DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_ASSET_CALC_PVT

Source


1 PACKAGE BODY FA_ASSET_CALC_PVT as
2 /* $Header: FAVCALB.pls 120.211.12020000.7 2013/03/19 18:02:38 dvjoshi ship $   */
3 
4 G_primary_new_cost            NUMBER;
5 G_primary_salvage_value       NUMBER;
6 G_primary_deprn_limit_amount  NUMBER;
7 
8 g_release                  number  := fa_cache_pkg.fazarel_release;
9 
10 FUNCTION calc_fin_info
11    (px_trans_rec                IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
12     p_inv_trans_rec           IN     FA_API_TYPES.inv_trans_rec_type,
13     p_asset_hdr_rec             IN            FA_API_TYPES.asset_hdr_rec_type,
14     p_asset_desc_rec            IN            FA_API_TYPES.asset_desc_rec_type,
15     p_asset_type_rec            IN            FA_API_TYPES.asset_type_rec_type,
16     p_asset_cat_rec             IN            FA_API_TYPES.asset_cat_rec_type,
17     p_asset_fin_rec_old         IN            FA_API_TYPES.asset_fin_rec_type,
18     p_asset_fin_rec_adj         IN            FA_API_TYPES.asset_fin_rec_type,
19     px_asset_fin_rec_new        IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
20     p_asset_deprn_rec_old       IN            FA_API_TYPES.asset_deprn_rec_type,
21     p_asset_deprn_rec_adj       IN            FA_API_TYPES.asset_deprn_rec_type,
22     px_asset_deprn_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
23     p_period_rec                IN            FA_API_TYPES.period_rec_type,
24     p_reclassed_asset_id        IN            NUMBER default null,
25     p_reclass_src_dest          IN            VARCHAR2 default null,
26     p_reclassed_asset_dpis      IN            DATE default null,
27     p_mrc_sob_type_code         IN            VARCHAR2,
28     p_group_reclass_options_rec IN OUT NOCOPY FA_API_TYPES.group_reclass_options_rec_type,
29     p_calling_fn                IN            VARCHAR2
30    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
31 
32 
33    l_adjust_type            varchar2(15);
34    l_deprn_exp              number := 0;
35    l_deprn_exp_temp         number := 0; --Bug 13620748
36    l_bonus_deprn_exp        number := 0;
37    l_impairment_exp         number := 0;
38    l_deprn_rsv              number := 0;
39    l_bonus_deprn_rsv        number := 0;
40    l_ann_adj_deprn_exp      number := 0;
41    l_ann_adj_bonus_deprn_exp number := 0;
42 
43    l_clearing               number := 0;
44    l_cost_to_insert         number := 0;
45    l_clearing_to_insert     number := 0;
46 
47    l_jdpis                  number;
48    l_asset_deprn_rec_adj    FA_API_TYPES.asset_deprn_rec_type;
49 
50    -- used for method cache
51    l_method_id              number;
52    l_rate_source_rule       varchar2(10);
53    l_deprn_basis_rule       varchar2(4);
54    l_set_extend_flag             boolean := FALSE;
55    l_reset_extend_flag           boolean := FALSE;
56    l_extended_flag           boolean := FALSE;
57    l_amortization_start_date date;
58    l_old_amortization_start_date date;
59 
60    l_group_level_override    varchar2(1) := NULL;
61    x_new_deprn_amount        number;
62    x_new_bonus_amount        number;
63    x_new_impairment_amount   number;
64    l_rc                      number;
65 
66    l_trxs_exist              VARCHAR2(1);
67    l_calling_fn              varchar2(40) := 'fa_asset_calc_pvt.calc_fin_info';
68    l_last_trx_count          number;
69 
70    l_deprn_reserve_exists    number;
71 
72    l_temp_deprn_reserve      number; -- Used to pass deprn reserve depending whether
73                                      -- asset is in period of addition or not.
74    l_call_faxama            boolean;
75 
76    l_disabled_flag_changed   boolean :=FALSE; --HH used to check
77    l_call_bs                 boolean := TRUE; --whether faxama for group should be called
78                                               -- or not
79    l_old_dpis               date;
80 
81    l_cap_temp_value         number;  -- temporary variable to manipulate eop(fy)_rec_cost(sal)
82                                      -- for capitalization.
83 
84    l_nbv_for_sal            number;
85    l_financial_info_changed BOOLEAN;
86 
87    CURSOR c_get_member_trx is
88       select asset_id
89            , transaction_header_id
90            , transaction_type_code
91            , transaction_date_entered
92            , transaction_name
93            , source_transaction_header_id
94            , mass_reference_id
95            , transaction_subtype
96            , transaction_key
97            , amortization_start_date
98            , calling_interface
99            , mass_transaction_id
100            , member_transaction_header_id
101            , trx_reference_id
102            , last_update_date
103            , last_updated_by
104            , last_update_login
105       from   fa_transaction_headers
106       where  transaction_header_id = px_trans_rec.member_transaction_header_id;
107 
108    -- Bug4958977: Introducing new cursor to trap dpis change only trx.
109    CURSOR c_check_dpis_change is
110        select inbk.transaction_header_id_in
111        from   fa_books inbk
112             , fa_books outbk
113        where  inbk.transaction_header_id_in   = px_trans_rec.member_transaction_header_id
114        and    outbk.asset_id                  = inbk.asset_id
115        and    outbk.book_type_code            = p_asset_hdr_rec.book_type_code
116        and    outbk.transaction_header_id_out = px_trans_rec.member_transaction_header_id
117        and    inbk.cost                       = outbk.cost
118        and    nvl(inbk.salvage_value, 0)              = nvl(outbk.salvage_value, 0)
119        and    nvl(inbk.allowed_deprn_limit_amount, 0) = nvl(outbk.allowed_deprn_limit_amount, 0)
120        and    inbk.date_placed_in_service     <> outbk.date_placed_in_service;
121 
122    --Bug8244128 Added a new cursor to fetch recognize_gain_loss
123    --from retirements table
124    CURSOR c_recognize_gain_loss_ret (l_thid number) is
125    select recognize_gain_loss
126    from   fa_retirements
127    where  transaction_header_id_in = l_thid;
128 
129    CURSOR c_recognize_gain_loss_res (l_thid number) is
130    select recognize_gain_loss
131    from   fa_retirements
132    where  transaction_header_id_out = l_thid;
133 
134    -- Bug 8520695
135    CURSOR c_check_addn is   -- to check if there exists an addition transaction before current transaction
136       select count(1)
137       from fa_transaction_headers
138       where asset_id              = p_asset_hdr_rec.asset_id
139       and   transaction_header_id < px_trans_rec.transaction_header_id
140       and   transaction_type_code = 'ADDITION';
141 
142    l_addn_cnt               number;
143    -- End Bug 8520695
144 
145    -- Bug 10097181
146    cursor c_group_rcl_out is
147    select inbk.asset_id
148    from   fa_books inbk
149           , fa_books outbk
150    where  inbk.transaction_header_id_in   = px_trans_rec.member_transaction_header_id
151    and    outbk.asset_id                  = inbk.asset_id
152    and    outbk.book_type_code            = p_asset_hdr_rec.book_type_code
153    and    outbk.transaction_header_id_out = inbk.transaction_header_id_in
154    and    inbk.group_asset_id is null
155    and    outbk.group_asset_id is not null;
156 
157    l_group_rcl_out_asset number;
158 
159    -- Bug4958977: following 2 new variables
160    l_temp_thid  number;
161    l_dpis_change boolean := FALSE;
162 
163    l_trans_rec              FA_API_TYPES.trans_rec_type;
164    l_asset_hdr_rec          FA_API_TYPES.asset_hdr_rec_type;
165    l_asset_desc_rec         FA_API_TYPES.asset_desc_rec_type;
166    l_asset_fin_rec          FA_API_TYPES.asset_fin_rec_type;
167    l_asset_cat_rec          FA_API_TYPES.asset_cat_rec_type;
168    l_asset_type_rec         FA_API_TYPES.asset_type_rec_type;
169    l_asset_deprn_rec        FA_API_TYPES.asset_deprn_rec_type; --Bug7008015
170 
171    l_recognize_gain_loss VARCHAR2(5); -- Bug8244128
172 
173    calc_err                 EXCEPTION;
174 
175 BEGIN
176 
177    if (p_log_level_rec.statement_level) then
178       fa_debug_pkg.add('calc_fin_info', 'at beginning of', 'calc_fin_info', p_log_level_rec => p_log_level_rec);
179       fa_debug_pkg.add('calc_fin_info',
180                        'p_asset_fin_rec_adj.over_depreciate_option',
181                         p_asset_fin_rec_adj.over_depreciate_option, p_log_level_rec => p_log_level_rec);
182    end if;
183 
184 
185    -- get category default info
186 
187    l_jdpis := to_number(to_char(
188                   nvl(px_asset_fin_rec_new.date_placed_in_service,
189                      nvl(p_asset_fin_rec_adj.date_placed_in_service,
190                          p_asset_fin_rec_old.date_placed_in_service)), 'J'));
191 
192    if not fa_cache_pkg.fazccbd (X_book   => p_asset_hdr_rec.book_type_code,
193                                 X_cat_id => p_asset_cat_rec.category_id,
194                                 X_jdpis  => l_jdpis, p_log_level_rec => p_log_level_rec) then
195       raise calc_err;
196    end if;
197 
198 
199    -- load the global attribute information
200    FA_UTIL_PVT.load_char_value
201        (p_char_old  => p_asset_fin_rec_old.global_attribute1,
202         p_char_adj  => p_asset_fin_rec_adj.global_attribute1,
203         x_char_new  => px_asset_fin_rec_new.global_attribute1, p_log_level_rec => p_log_level_rec);
204 
205    FA_UTIL_PVT.load_char_value
206        (p_char_old  => p_asset_fin_rec_old.global_attribute2,
207         p_char_adj  => p_asset_fin_rec_adj.global_attribute2,
208         x_char_new  => px_asset_fin_rec_new.global_attribute2, p_log_level_rec => p_log_level_rec);
209 
210    FA_UTIL_PVT.load_char_value
211        (p_char_old  => p_asset_fin_rec_old.global_attribute3,
212         p_char_adj  => p_asset_fin_rec_adj.global_attribute3,
213         x_char_new  => px_asset_fin_rec_new.global_attribute3, p_log_level_rec => p_log_level_rec);
214 
215    FA_UTIL_PVT.load_char_value
216        (p_char_old  => p_asset_fin_rec_old.global_attribute4,
217         p_char_adj  => p_asset_fin_rec_adj.global_attribute4,
218         x_char_new  => px_asset_fin_rec_new.global_attribute4, p_log_level_rec => p_log_level_rec);
219 
220    FA_UTIL_PVT.load_char_value
221        (p_char_old  => p_asset_fin_rec_old.global_attribute5,
222         p_char_adj  => p_asset_fin_rec_adj.global_attribute5,
223         x_char_new  => px_asset_fin_rec_new.global_attribute5, p_log_level_rec => p_log_level_rec);
224 
225    FA_UTIL_PVT.load_char_value
226        (p_char_old  => p_asset_fin_rec_old.global_attribute6,
227         p_char_adj  => p_asset_fin_rec_adj.global_attribute6,
228         x_char_new  => px_asset_fin_rec_new.global_attribute6, p_log_level_rec => p_log_level_rec);
229 
230    FA_UTIL_PVT.load_char_value
231        (p_char_old  => p_asset_fin_rec_old.global_attribute7,
232         p_char_adj  => p_asset_fin_rec_adj.global_attribute7,
233         x_char_new  => px_asset_fin_rec_new.global_attribute7, p_log_level_rec => p_log_level_rec);
234 
235    FA_UTIL_PVT.load_char_value
236        (p_char_old  => p_asset_fin_rec_old.global_attribute8,
237         p_char_adj  => p_asset_fin_rec_adj.global_attribute8,
238         x_char_new  => px_asset_fin_rec_new.global_attribute8, p_log_level_rec => p_log_level_rec);
239 
240    FA_UTIL_PVT.load_char_value
241        (p_char_old  => p_asset_fin_rec_old.global_attribute9,
242         p_char_adj  => p_asset_fin_rec_adj.global_attribute9,
243         x_char_new  => px_asset_fin_rec_new.global_attribute9, p_log_level_rec => p_log_level_rec);
244 
245    FA_UTIL_PVT.load_char_value
246        (p_char_old  => p_asset_fin_rec_old.global_attribute10,
247         p_char_adj  => p_asset_fin_rec_adj.global_attribute10,
248         x_char_new  => px_asset_fin_rec_new.global_attribute10, p_log_level_rec => p_log_level_rec);
249 
250    FA_UTIL_PVT.load_char_value
251        (p_char_old  => p_asset_fin_rec_old.global_attribute11,
252         p_char_adj  => p_asset_fin_rec_adj.global_attribute11,
253         x_char_new  => px_asset_fin_rec_new.global_attribute11, p_log_level_rec => p_log_level_rec);
254 
255    FA_UTIL_PVT.load_char_value
256        (p_char_old  => p_asset_fin_rec_old.global_attribute12,
257         p_char_adj  => p_asset_fin_rec_adj.global_attribute12,
258         x_char_new  => px_asset_fin_rec_new.global_attribute12, p_log_level_rec => p_log_level_rec);
259 
260    FA_UTIL_PVT.load_char_value
261        (p_char_old  => p_asset_fin_rec_old.global_attribute13,
262         p_char_adj  => p_asset_fin_rec_adj.global_attribute13,
263         x_char_new  => px_asset_fin_rec_new.global_attribute13, p_log_level_rec => p_log_level_rec);
264 
265    FA_UTIL_PVT.load_char_value
266        (p_char_old  => p_asset_fin_rec_old.global_attribute14,
267         p_char_adj  => p_asset_fin_rec_adj.global_attribute14,
268         x_char_new  => px_asset_fin_rec_new.global_attribute14, p_log_level_rec => p_log_level_rec);
269 
270    FA_UTIL_PVT.load_char_value
271        (p_char_old  => p_asset_fin_rec_old.global_attribute15,
272         p_char_adj  => p_asset_fin_rec_adj.global_attribute15,
273         x_char_new  => px_asset_fin_rec_new.global_attribute15, p_log_level_rec => p_log_level_rec);
274 
275    FA_UTIL_PVT.load_char_value
276        (p_char_old  => p_asset_fin_rec_old.global_attribute16,
277         p_char_adj  => p_asset_fin_rec_adj.global_attribute16,
278         x_char_new  => px_asset_fin_rec_new.global_attribute16, p_log_level_rec => p_log_level_rec);
279 
280    FA_UTIL_PVT.load_char_value
281        (p_char_old  => p_asset_fin_rec_old.global_attribute17,
282         p_char_adj  => p_asset_fin_rec_adj.global_attribute17,
283         x_char_new  => px_asset_fin_rec_new.global_attribute17, p_log_level_rec => p_log_level_rec);
284 
285    FA_UTIL_PVT.load_char_value
286        (p_char_old  => p_asset_fin_rec_old.global_attribute18,
287         p_char_adj  => p_asset_fin_rec_adj.global_attribute18,
288         x_char_new  => px_asset_fin_rec_new.global_attribute18, p_log_level_rec => p_log_level_rec);
289 
290    FA_UTIL_PVT.load_char_value
291        (p_char_old  => p_asset_fin_rec_old.global_attribute19,
292         p_char_adj  => p_asset_fin_rec_adj.global_attribute19,
293         x_char_new  => px_asset_fin_rec_new.global_attribute19, p_log_level_rec => p_log_level_rec);
294 
295    FA_UTIL_PVT.load_char_value
296        (p_char_old  => p_asset_fin_rec_old.global_attribute20,
297         p_char_adj  => p_asset_fin_rec_adj.global_attribute20,
298         x_char_new  => px_asset_fin_rec_new.global_attribute20, p_log_level_rec => p_log_level_rec);
299 
300    FA_UTIL_PVT.load_char_value
301        (p_char_old  => p_asset_fin_rec_old.global_attribute_category,
302         p_char_adj  => p_asset_fin_rec_adj.global_attribute_category,
303         x_char_new  => px_asset_fin_rec_new.global_attribute_category, p_log_level_rec => p_log_level_rec);
304 
305 -- Changes made as per the ER No.s 6606548 and 6606552 by Sbyreddy  Start
306 
307    FA_UTIL_PVT.load_num_value
308        (p_num_old  => p_asset_fin_rec_old.nbv_at_switch,
309         p_num_adj  => p_asset_fin_rec_adj.nbv_at_switch,
310         x_num_new  => px_asset_fin_rec_new.nbv_at_switch, p_log_level_rec => p_log_level_rec);
311 
312    FA_UTIL_PVT.load_char_value
313        (p_char_old  => p_asset_fin_rec_old.prior_deprn_limit_type,
314         p_char_adj  => p_asset_fin_rec_adj.prior_deprn_limit_type,
315         x_char_new  => px_asset_fin_rec_new.prior_deprn_limit_type, p_log_level_rec => p_log_level_rec);
316 
317    FA_UTIL_PVT.load_num_value
318        (p_num_old  => p_asset_fin_rec_old.prior_deprn_limit_amount,
319         p_num_adj  => p_asset_fin_rec_adj.prior_deprn_limit_amount,
320         x_num_new  => px_asset_fin_rec_new.prior_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
321 
322    FA_UTIL_PVT.load_num_value
323        (p_num_old  => p_asset_fin_rec_old.prior_deprn_limit,
324         p_num_adj  => p_asset_fin_rec_adj.prior_deprn_limit,
325         x_num_new  => px_asset_fin_rec_new.prior_deprn_limit, p_log_level_rec => p_log_level_rec);
326 
327    --Bug 8620902 No need to set px_asset_fin_rec_new.period_counter_fully_reserved as it will
328    --             be set to null by adj and later set by depreciation.
329    --bug 8819226 commenting this as same thing is handelled below also.
330    /*IF (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') <>
331                         nvl(p_asset_fin_rec_adj.extended_deprn_flag, '-1')) and
332        nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y' then
333 
334       FA_UTIL_PVT.load_num_value
335           (p_num_old  => p_asset_fin_rec_old.period_counter_fully_reserved,
336            p_num_adj  => p_asset_fin_rec_adj.period_counter_fully_reserved,
337            x_num_new  => px_asset_fin_rec_new.period_counter_fully_reserved,
338            p_log_level_rec => p_log_level_rec);
339 
340    END IF;*/
341 
342    FA_UTIL_PVT.load_num_value
343        (p_num_old  => p_asset_fin_rec_old.extended_depreciation_period,
344         p_num_adj  => p_asset_fin_rec_adj.extended_depreciation_period,
345         x_num_new  => px_asset_fin_rec_new.extended_depreciation_period, p_log_level_rec => p_log_level_rec);
346 
347    FA_UTIL_PVT.load_char_value
348        (p_char_old  => p_asset_fin_rec_old.prior_deprn_method,
349         p_char_adj  => p_asset_fin_rec_adj.prior_deprn_method,
350         x_char_new  => px_asset_fin_rec_new.prior_deprn_method, p_log_level_rec => p_log_level_rec);
351 
352    FA_UTIL_PVT.load_num_value
353        (p_num_old  => p_asset_fin_rec_old.prior_life_in_months,
354         p_num_adj  => p_asset_fin_rec_adj.prior_life_in_months,
355         x_num_new  => px_asset_fin_rec_new.prior_life_in_months, p_log_level_rec => p_log_level_rec);
356 
357    FA_UTIL_PVT.load_num_value
358        (p_num_old  => p_asset_fin_rec_old.prior_basic_rate,
359         p_num_adj  => p_asset_fin_rec_adj.prior_basic_rate,
360         x_num_new  => px_asset_fin_rec_new.prior_basic_rate, p_log_level_rec => p_log_level_rec);
361 
362    FA_UTIL_PVT.load_num_value
363        (p_num_old  => p_asset_fin_rec_old.prior_adjusted_rate,
364         p_num_adj  => p_asset_fin_rec_adj.prior_adjusted_rate,
365         x_num_new  => px_asset_fin_rec_new.prior_adjusted_rate, p_log_level_rec => p_log_level_rec);
366 -- Changes made as per the ER No.s 6606548 and 6606552 by End
367 
368    if (px_trans_rec.transaction_type_code = 'ADDITION' or
369        px_trans_rec.transaction_type_code = 'CIP ADDITION' or
370        px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
371        px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
372        px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
373        px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT') then
374 
375      -- Bug:8240522
376          FA_UTIL_PVT.load_num_value
377             (p_num_old  => p_asset_fin_rec_old.contract_id,
378              p_num_adj  => p_asset_fin_rec_adj.contract_id,
379              x_num_new  => px_asset_fin_rec_new.contract_id, p_log_level_rec => p_log_level_rec);
380 
381       px_asset_fin_rec_new.prorate_convention_code   :=
382          nvl(p_asset_fin_rec_adj.prorate_convention_code,
383              nvl(p_asset_fin_rec_old.prorate_convention_code,
384                  fa_cache_pkg.fazccbd_record.prorate_convention_code));
385       px_asset_fin_rec_new.depreciate_flag           :=
386          nvl(p_asset_fin_rec_adj.depreciate_flag,
387              nvl(p_asset_fin_rec_old.depreciate_flag,
388                  fa_cache_pkg.fazccbd_record.depreciate_flag));
389 
390       --HH group ed.
391       px_asset_fin_rec_new.disabled_flag := p_asset_fin_rec_adj.disabled_flag;
392       --End HH
393       -- the following values can be nulled out either during
394       -- an adjustment (exc bonus) or during addition in comparison to
395       -- what would have been defaulted from the category.
396 
397       -- note we check the old method because trx_type is not
398       -- enough as we only want the cat defaulting to occur
399       -- during the initial addition, not during a void in period of add
400 
401       FA_UTIL_PVT.load_char_value
402          (p_char_old  => p_asset_fin_rec_old.bonus_rule,
403           p_char_adj  => p_asset_fin_rec_adj.bonus_rule,
404           x_char_new  => px_asset_fin_rec_new.bonus_rule, p_log_level_rec => p_log_level_rec);
405 
406       -- do not allow the nulling out of bonus rule during adj
407       if (px_asset_fin_rec_new.bonus_rule is null and
408           p_asset_fin_rec_old.bonus_rule  is not null) then
409          fa_srvr_msg.add_message(
410             calling_fn => l_calling_fn,
411              name       => 'FA_DEPRN_UPDATE_BONUS_RULE', p_log_level_rec => p_log_level_rec);
412          raise calc_err;
413       end if;
414 
415       FA_UTIL_PVT.load_char_value
416          (p_char_old  => p_asset_fin_rec_old.ceiling_name,
417           p_char_adj  => p_asset_fin_rec_adj.ceiling_name,
418           x_char_new  => px_asset_fin_rec_new.ceiling_name, p_log_level_rec => p_log_level_rec);
419 
420       -- This is for FLAT RATE EXTENSION deprn basis rule
421       FA_UTIL_PVT.load_char_value
422          (p_char_old  => p_asset_fin_rec_old.exclude_fully_rsv_flag,
423           p_char_adj  => p_asset_fin_rec_adj.exclude_fully_rsv_flag,
424           x_char_new  => px_asset_fin_rec_new.exclude_fully_rsv_flag, p_log_level_rec => p_log_level_rec);
425 
426       FA_UTIL_PVT.load_num_value
427          (p_num_old  => p_asset_fin_rec_old.cash_generating_unit_id,
428           p_num_adj  => p_asset_fin_rec_adj.cash_generating_unit_id,
429           x_num_new  => px_asset_fin_rec_new.cash_generating_unit_id, p_log_level_rec => p_log_level_rec);
430 
431       if p_asset_type_rec.asset_type <> 'GROUP' then
432 
433          FA_UTIL_PVT.load_num_value
434             (p_num_old  => p_asset_fin_rec_old.group_asset_id,
435              p_num_adj  => p_asset_fin_rec_adj.group_asset_id,
436              x_num_new  => px_asset_fin_rec_new.group_asset_id, p_log_level_rec => p_log_level_rec);
437 
438          -- validate new group info
439          if (px_asset_fin_rec_new.group_asset_id is not null) then
440             -- verify the asset exist in the book already
441             if not FA_ASSET_VAL_PVT.validate_group_asset
442                      (p_group_asset_id => px_asset_fin_rec_new.group_asset_id,
443                       p_book_type_code => p_asset_hdr_rec.book_type_code,
444                       p_asset_type     => p_asset_type_rec.asset_type
445                      , p_log_level_rec => p_log_level_rec) then
446                raise calc_err;
447             end if;
448 
449          end if;
450 
451       end if;
452 
453       if not calc_new_amounts
454               (px_trans_rec              => px_trans_rec,
455                p_asset_hdr_rec           => p_asset_hdr_rec,
456                p_asset_desc_rec          => p_asset_desc_rec,
457                p_asset_type_rec          => p_asset_type_rec,
458                p_asset_cat_rec           => p_asset_cat_rec,
459                p_asset_fin_rec_old       => p_asset_fin_rec_old,
460                p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
461                px_asset_fin_rec_new      => px_asset_fin_rec_new,
462                p_asset_deprn_rec_old     => p_asset_deprn_rec_old,
463                p_asset_deprn_rec_adj     => p_asset_deprn_rec_adj,
464                px_asset_deprn_rec_new    => px_asset_deprn_rec_new,
465                p_mrc_sob_type_code       => p_mrc_sob_type_code,
466                p_log_level_rec           => p_log_level_rec
467               ) then
468          raise calc_err;
469       end if;
470 
471       -- BUG# 3200703
472       -- do not allow amortization if not allowed at book level
473 
474       if ((px_trans_rec.transaction_subtype = 'AMORTIZED' or
475            px_trans_rec.amortization_start_date is not null) and
476           fa_cache_pkg.fazcbc_record.amortize_flag = 'NO') then
477          fa_srvr_msg.add_message(
478                   calling_fn => l_calling_fn,
479                   name       => 'FA_BOOK_AMORTIZED_NOT_ALLOW', p_log_level_rec => p_log_level_rec);
480          raise calc_err;
481       end if;
482 
483       if (p_log_level_rec.statement_level) then
484             fa_debug_pkg.add('calc_new_info before Rsv change validate',
485                   'p_asset_deprn_rec_adj.deprn_reserve',
486                    p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
487             fa_debug_pkg.add('calc_new_info before Rsv change validate',
488                   'p_asset_deprn_rec_adj.ytd_deprn',
489                    p_asset_deprn_rec_adj.ytd_deprn, p_log_level_rec => p_log_level_rec);
490       end if;
491 
492       -- Bug 12894769 : The validation needed for group only when adjustment performed directly on group
493       -- Bug 12612333 : Moved the validation from FAPADJB.pls
494       -- Bug 8471701 : Prevent reserve change if any 'B' row distribution is inactive
495       if ((nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0) or (nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) <> 0)) and
496          (p_asset_hdr_rec.period_of_addition = 'Y') and
497          (g_release <> 11) and
498          ((p_asset_type_rec.asset_type <> 'GROUP') or
499           ((p_asset_type_rec.asset_type = 'GROUP') and (nvl(px_trans_rec.transaction_key, 'XX') = 'GJ'))) then
500 
501          if not FA_ASSET_VAL_PVT.validate_ltd_deprn_change
502              (p_book_type_code      => p_asset_hdr_rec.book_type_code,
503               p_asset_Id            => p_asset_hdr_rec.asset_id,
504               p_calling_fn          => l_calling_fn,
505               p_log_level_rec       => p_log_level_rec) then
506             raise calc_err;
507          end if;
508 
509       end if;
510       -- End Bug 8471701
511 
512       -- keeping this code after moving validate_asset_book call above
513       -- but not sure if it's correct ???
514       if (px_asset_fin_rec_new.group_asset_id is not null) then
515          if (px_asset_fin_rec_new.super_group_id is not null) then
516              -- *** validate super group exists ***
517             fa_srvr_msg.add_message(
518                    calling_fn => l_calling_fn,
519                    name       => 'FA_NO_SUPER_GROUP_ALLOWED', p_log_level_rec => p_log_level_rec);
520             raise calc_err;
521          end if;
522       end if;
523 
524       if (p_calling_fn = 'fa_cip_pvt.do_cap_rev') then
525          l_old_dpis := px_asset_fin_rec_new.date_placed_in_service;
526       else
527          l_old_dpis := p_asset_fin_rec_old.date_placed_in_service;
528       end if;
529 
530       if not fa_asset_val_pvt.validate_dpis
531               (p_transaction_type_code  => px_trans_rec.transaction_type_code,
532                p_book_type_code         => p_asset_hdr_rec.book_type_code,
533                p_date_placed_in_service =>
534                   px_asset_fin_rec_new.date_placed_in_service,
535                p_prorate_convention_code =>
536                   px_asset_fin_rec_new.prorate_convention_code,
537                p_old_date_placed_in_service =>                       -- Bug3724207
538                   l_old_dpis,        -- Bug3724207
539                p_asset_id               => p_asset_hdr_rec.asset_id, -- Bug3724207
540                p_transaction_subtype    => px_trans_rec.transaction_subtype,
541                p_asset_type             => p_asset_type_rec.asset_type, -- bug 5501090
542                p_calling_interface      => px_trans_rec.calling_interface,
543                p_calling_fn             => l_calling_fn
544               , p_log_level_rec => p_log_level_rec)then
545          raise calc_err;
546       end if;
547 
548       if (px_asset_fin_rec_new.group_asset_id is not null) then
549          if not fa_asset_val_pvt.validate_member_dpis
550                 (p_book_type_code          => p_asset_hdr_rec.book_type_code,
551                  p_date_placed_in_service  =>
552                     px_asset_fin_rec_new.date_placed_in_service,
553                  p_group_asset_Id          =>
554                     px_asset_fin_rec_new.group_asset_id,
555                  p_calling_fn              => l_calling_fn, p_log_level_rec => p_log_level_rec) then
556             raise calc_err;
557          end if;
558       end if;
559 
560       if not fa_asset_val_pvt.validate_depreciate_flag
561              (p_depreciate_flag         => px_asset_fin_rec_new.depreciate_flag,
562               p_calling_fn              => l_calling_fn
563               , p_log_level_rec => p_log_level_rec) then
564          raise calc_err;
565       end if;
566 
567       -- need to calc the prorate date before calling calc_deprn_info
568       -- due to subcomponent life rule defaulting
569 
570 
571       if not calc_prorate_date
572               (p_asset_hdr_rec           => p_asset_hdr_rec,
573                p_asset_type_rec          => p_asset_type_rec,
574                p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
575                px_asset_fin_rec_new      => px_asset_fin_rec_new,
576                p_period_rec              => p_period_rec,
577                p_log_level_rec           => p_log_level_rec
578               ) then
579          raise calc_err;
580       end if;
581 
582       if not calc_deprn_info
583               (p_trans_rec               => px_trans_rec,
584                p_asset_hdr_rec           => p_asset_hdr_rec,
585                p_asset_desc_rec          => p_asset_desc_rec,
586                p_asset_cat_rec           => p_asset_cat_rec,
587                p_asset_type_rec          => p_asset_type_rec,
588                p_asset_fin_rec_old       => p_asset_fin_rec_old,
589                p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
590                px_asset_fin_rec_new      => px_asset_fin_rec_new,
591                p_asset_deprn_rec_adj     => p_asset_deprn_rec_adj,
592                p_asset_deprn_rec_new     => px_asset_deprn_rec_new,
593                p_period_rec              => p_period_rec,
594                p_log_level_rec           => p_log_level_rec
595               ) then
596          raise calc_err;
597       end if;
598 
599       if not calc_derived_amounts
600               (px_trans_rec              => px_trans_rec,
601                p_asset_hdr_rec           => p_asset_hdr_rec,
602                p_asset_desc_rec          => p_asset_desc_rec,
603                p_asset_type_rec          => p_asset_type_rec,
604                p_asset_cat_rec           => p_asset_cat_rec,
605                p_asset_fin_rec_old       => p_asset_fin_rec_old,
606                p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
607                px_asset_fin_rec_new      => px_asset_fin_rec_new,
608                p_asset_deprn_rec_old     => p_asset_deprn_rec_old,
609                p_asset_deprn_rec_adj     => p_asset_deprn_rec_adj,
610                px_asset_deprn_rec_new    => px_asset_deprn_rec_new,
611                p_period_rec              => p_period_rec,
612                p_mrc_sob_type_code       => p_mrc_sob_type_code,
613                p_log_level_rec           => p_log_level_rec
614               ) then
615          raise calc_err;
616       end if;
617 
618       if p_asset_type_rec.asset_type <> 'GROUP' then
619          -- member level information must be copied from old to new
620          if px_asset_fin_rec_new.group_asset_id is not null then
621 
622            if not calc_member_info
623                  (p_trans_rec               => px_trans_rec,
624                   p_asset_hdr_rec           => p_asset_hdr_rec,
625                   p_asset_fin_rec_old       => p_asset_fin_rec_old,
626                   p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
627                   px_asset_fin_rec_new      => px_asset_fin_rec_new,
628                   p_asset_deprn_rec_old     => p_asset_deprn_rec_old,
629                   p_log_level_rec           => p_log_level_rec
630                  ) then
631               raise calc_err;
632            end if;
633 
634          else
635 
636            if not calc_standalone_info
637                  (p_asset_hdr_rec       => p_asset_hdr_rec,
638                   p_asset_fin_rec_old   => p_asset_fin_rec_old,
639                   p_asset_fin_rec_adj   => p_asset_fin_rec_adj,
640                   px_asset_fin_rec_new  => px_asset_fin_rec_new,
641                   p_asset_deprn_rec_new => px_asset_deprn_rec_new,
642                   p_log_level_rec           => p_log_level_rec
643                  ) then
644               raise calc_err;
645            end if;
646          end if; -- (px_asset_fin_rec_new.group_asset_id is not null)
647 
648       else -- Asset type is Group
649          --HH Validate disabled_flag
650          if not FA_ASSET_VAL_PVT.validate_disabled_flag
651                   (p_group_asset_id => px_asset_fin_rec_new.group_asset_id,
652                    p_book_type_code => p_asset_hdr_rec.book_type_code,
653                    p_old_flag       => p_asset_fin_rec_old.disabled_flag,
654                    p_new_flag       => px_asset_fin_rec_new.disabled_flag
655                   , p_log_level_rec => p_log_level_rec) then
656             raise calc_err;
657          end if;
658 
659          -- the following line is where we could allowed multi-tier
660          -- group associates / hierarchies is desired
661          px_asset_fin_rec_new.group_asset_id := NULL;
662 
663          if (p_log_level_rec.statement_level) then
664                fa_debug_pkg.add('calc_new_info before calc group',
665                      'p_asset_fin_rec_adj.over_depreciate_option',
666                       p_asset_fin_rec_adj.over_depreciate_option, p_log_level_rec => p_log_level_rec);
667          end if;
668 
669          if not FA_ASSET_VAL_PVT.validate_super_group (
670                   p_book_type_code       => p_asset_hdr_rec.book_type_code,
671                   p_old_super_group_id   => p_asset_fin_rec_old.super_group_id,
672                   p_new_super_group_id   => px_asset_fin_rec_new.super_group_id,
673                   p_calling_fn           => l_calling_fn, p_log_level_rec => p_log_level_rec) then
674 
675             if (p_log_level_rec.statement_level) then
676                fa_debug_pkg.add(l_calling_fn, 'Error calling function', 'FA_ASSET_VAL_PVT.validate_super_group',  p_log_level_rec => p_log_level_rec);
677             end if;
678 
679             raise calc_err;
680          end if;
681 
682          if not calc_group_info
683                  (p_trans_rec               => px_trans_rec,
684                   p_asset_hdr_rec           => p_asset_hdr_rec,
685                   p_asset_fin_rec_old       => p_asset_fin_rec_old,
686                   p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
687                   px_asset_fin_rec_new      => px_asset_fin_rec_new,
688                   p_asset_deprn_rec_old     => p_asset_deprn_rec_old,
689                   p_log_level_rec           => p_log_level_rec
690                  ) then
691             raise calc_err;
692          end if;
693 
694          -- SLA: ***REVISIT***
695          if ( p_asset_hdr_rec.period_of_addition = 'Y' and
696             nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') <> 'ENERGY PERIOD END BALANCE' ) then
697             l_temp_deprn_reserve := px_asset_deprn_rec_new.deprn_reserve;
698          else
699             l_temp_deprn_reserve := to_number(null);
700          end if;
701          if not (nvl(p_group_reclass_options_rec.group_reclass_type,'XXX') = 'CALC' and
702                  px_asset_fin_rec_new.tracking_method is null and
703                  nvl(p_asset_fin_rec_old.group_asset_id, -99) = nvl(px_asset_fin_rec_new.group_asset_id, -99)) then
704             if not fa_asset_val_pvt.validate_over_depreciate
705                  (p_asset_hdr_rec              => p_asset_hdr_rec,
706                   p_asset_type                 => p_asset_type_rec.asset_type,
707                   p_over_depreciate_option     => px_asset_fin_rec_new.over_depreciate_option,
708                   p_adjusted_recoverable_cost  => px_asset_fin_rec_new.adjusted_recoverable_cost,
709                   p_recoverable_cost           => px_asset_fin_rec_new.recoverable_cost,
710                   p_deprn_reserve_new          => l_temp_deprn_reserve,
711                   p_rate_source_rule           => fa_cache_pkg.fazccmt_record.rate_source_rule,
712                   p_deprn_basis_rule           => fa_cache_pkg.fazccmt_record.deprn_basis_rule,
713                   p_recapture_reserve_flag     => px_asset_fin_rec_new.recapture_reserve_flag,
714                   p_deprn_limit_type           => px_asset_fin_rec_new.deprn_limit_type
715                  , p_log_level_rec => p_log_level_rec) then
716                raise calc_err;
717             end if;
718          end if;
719       end if; --p_asset_type_rec.asset_type
720 
721     /* bug#10094653 - validating unit_of_measure */
722      if fa_cache_pkg.fazccmt_record.rate_source_rule = 'PRODUCTION' then
723         if not fa_asset_val_pvt.validate_unit_of_measure(p_unit_of_measure => px_asset_fin_rec_new.unit_of_measure,
724                              p_calling_fn                  => l_calling_fn,
725                              p_log_level_rec               => p_log_level_rec) then
726            if (p_log_level_rec.statement_level) then
727               fa_debug_pkg.add(l_calling_fn, 'Failed calling',
728                              'FA_ASSET_VAL_PVT.validate_unit_of_measure',  p_log_level_rec => p_log_level_rec);
729            end if;
730            raise calc_err;
731         end if;
732      end if;
733 
734       -- Bug 9916378
735       if not  FA_ASSET_VAL_PVT.validate_uop_method
736                (p_asset_hdr_rec => p_asset_hdr_rec,
737                p_asset_type_rec => p_asset_type_rec,
738                p_asset_fin_rec => px_asset_fin_rec_new,
739                p_asset_fin_rec_old => p_asset_fin_rec_old,
740                p_asset_deprn_rec => p_asset_deprn_rec_old,
741                p_log_level_rec => p_log_level_rec) then
742          raise calc_err;
743       end if;
744 
745       -- Bug 9916378
746       if not  FA_ASSET_VAL_PVT.validate_prev_period_amort
747                (p_asset_hdr_rec => p_asset_hdr_rec,
748                p_trans_rec => px_trans_rec,
749                p_period_rec => p_period_rec,
750                p_asset_retire_rec => null,
751                p_log_level_rec => p_log_level_rec) then
752          raise calc_err;
753       end if;
754 
755       -- Check to prevent prior period trx with Energy UOP
756      if not FA_ASSET_VAL_PVT.validate_egy_prod_date (
757                p_calendar_period_start_date  => p_period_rec.calendar_period_open_date,
758                p_transaction_date            => nvl(px_trans_rec.amortization_start_date,
759                                                     px_trans_rec.transaction_date_entered),
760                p_transaction_key             => px_trans_rec.transaction_key,
761                p_rate_source_rule            => fa_cache_pkg.fazccmt_record.rate_source_rule,
762                p_rule_name                   => fa_cache_pkg.fazcdrd_record.rule_name,
763                p_calling_fn                  => l_calling_fn,
764                p_log_level_rec               => p_log_level_rec) then
765          if (p_log_level_rec.statement_level) then
766             fa_debug_pkg.add(l_calling_fn, 'Failed calling',
767                              'FA_ASSET_VAL_PVT.validate_egy_prod_date',  p_log_level_rec => p_log_level_rec);
768          end if;
769          raise calc_err;
770       end if;
771 
772       if not FA_ASSET_VAL_PVT.validate_bonus_rule_resv
773             (p_asset_hdr_rec      => p_asset_hdr_rec,
774              p_asset_desc_rec     => p_asset_desc_rec,
775              p_asset_type_rec     => p_asset_type_rec,
776              p_asset_fin_rec      => px_asset_fin_rec_new,
777              p_asset_deprn_rec    => px_asset_deprn_rec_new,
778              p_calling_fn         => l_calling_fn,
779              p_log_level_rec      => p_log_level_rec) then
780          if (p_log_level_rec.statement_level) then
781             fa_debug_pkg.add(l_calling_fn, 'Failed calling',
782                              'FA_ASSET_VAL_PVT.validate_bonus_rule_resv',  p_log_level_rec => p_log_level_rec);
783          end if;
784          raise calc_err;
785       end if;
786 
787       if (px_trans_rec.transaction_type_code in
788                  ('ADDITION', 'CIP ADDITION', 'GROUP ADDITION',
789                   'ADJUSTMENT', 'CIP ADJUSTMENT', 'GROUP ADJUSTMENT')) then
790 
791          -- Fix for Bug #3187975.  Do Polish rule validations.
792 
793          -- Check adjustment (since old rec is null for regular addition)
794          -- For adjustment, this is to prevent a method change out of a
795          -- polish rule as well as a regular adjustment.
796          if (p_asset_fin_rec_old.deprn_method_code is not null) then
797             if not FA_ASSET_VAL_PVT.validate_polish (
798                p_transaction_type_code => 'ADJUSTMENT',
799                p_method_code           => p_asset_fin_rec_old.deprn_method_code,
800                p_life_in_months        => p_asset_fin_rec_old.life_in_months,
801                p_asset_type            => p_asset_type_rec.asset_type,
802                p_bonus_rule            => p_asset_fin_rec_old.bonus_rule,
803                p_ceiling_name          => p_asset_fin_rec_old.ceiling_name,
804                p_deprn_limit_type      => p_asset_fin_rec_old.deprn_limit_type,
805                p_group_asset_id        => p_asset_fin_rec_old.group_asset_id,
806                p_calling_fn            => l_calling_fn
807             , p_log_level_rec => p_log_level_rec) then
808                raise calc_err;
809             end if;
810 
811             -- For adjustment, this is to prevent a method change into a
812             -- polish rule as well as a regular adjustment.
813             if not FA_ASSET_VAL_PVT.validate_polish (
814                p_transaction_type_code => 'ADJUSTMENT',
815                p_method_code           =>
816                                    px_asset_fin_rec_new.deprn_method_code,
817                p_life_in_months        => px_asset_fin_rec_new.life_in_months,
818                p_asset_type            => p_asset_type_rec.asset_type,
819                p_bonus_rule            => px_asset_fin_rec_new.bonus_rule,
820                p_ceiling_name          => px_asset_fin_rec_new.ceiling_name,
821                p_deprn_limit_type      => px_asset_fin_rec_new.deprn_limit_type,
822                p_group_asset_id        => px_asset_fin_rec_new.group_asset_id,
823                p_calling_fn            => l_calling_fn
824             , p_log_level_rec => p_log_level_rec) then
825                raise calc_err;
826             end if;
827          else
828             -- Validate addition since old rec is null.
829             if not FA_ASSET_VAL_PVT.validate_polish (
830                p_transaction_type_code => 'ADDITION',
831                p_method_code           =>
832                                    px_asset_fin_rec_new.deprn_method_code,
833                p_life_in_months        => px_asset_fin_rec_new.life_in_months,
834                p_asset_type            => p_asset_type_rec.asset_type,
835                p_bonus_rule            => px_asset_fin_rec_new.bonus_rule,
836                p_ceiling_name          => px_asset_fin_rec_new.ceiling_name,
837                p_deprn_limit_type      => px_asset_fin_rec_new.deprn_limit_type,
838                p_group_asset_id        => px_asset_fin_rec_new.group_asset_id,
839                p_date_placed_in_service
840                                        =>
841                                    px_asset_fin_rec_new.date_placed_in_service,
842                p_calendar_period_open_date
843                                        =>
844                                    p_period_rec.calendar_period_open_date,
845                p_ytd_deprn             => px_asset_deprn_rec_new.ytd_deprn,
846                p_deprn_reserve         => px_asset_deprn_rec_new.deprn_reserve,
847                p_calling_fn            => l_calling_fn
848             , p_log_level_rec => p_log_level_rec) then
849                raise calc_err;
850             end if;
851          end if;
852       end if;
853 
854       -- Bug 10025180 : Do not allow extending of asset in the period in which it got fully reserved in current period
855       -- Bug 12593804 : Do not allow extended asset addition which is fully reserved in current period
856       if ((nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') = 'Y') and
857                 (nvl(p_asset_fin_rec_old.extended_deprn_flag,'D') in ('D','N'))) then
858 
859          if not FA_ASSET_VAL_PVT.validate_extending_asset
860                  (p_asset_hdr_rec         => p_asset_hdr_rec,
861                   p_asset_fin_rec_old     => p_asset_fin_rec_old,
862                   p_asset_fin_rec_adj     => p_asset_fin_rec_adj,
863                   p_asset_type_rec        => p_asset_type_rec,
864                   p_period_rec            => p_period_rec,
865                   p_log_level_rec         => p_log_level_rec) then
866             raise calc_err;
867          end if;
868 
869       end if;
870 
871       -- perform final validation on all calculated amounts
872       -- and only do so in the period of addition
873 
874       -- do not perform this check on groups nor on assets which
875       -- may have been in a group during the period of addition
876       -- the latter poses a problem in that this could be called
877       -- from a transaction following a group reclass such that
878       -- there is no difference in old and new.   We might have
879       -- do see if the asset was ever in a group than bypass
880 
881       -- R12 conditional handling
882       -- SLA Uptake
883       -- further restricting only to the first ADDITION
884       -- bug 8649223 (Added condition px_trans_rec.transaction_type_code = 'ADJUSTMENT')
885       if (p_asset_hdr_rec.period_of_addition = 'Y' and
886           p_asset_type_rec.asset_type <> 'GROUP' and
887           p_asset_fin_rec_old.group_asset_id is null and
888           px_asset_fin_rec_new.group_asset_id is null and
889           (G_release = 11 or
890            (px_trans_rec.transaction_type_code = 'ADDITION' or
891             -- px_trans_rec.transaction_type_code = 'ADJUSTMENT' or -- reverted for bug 8765988
892             px_trans_rec.transaction_type_code = 'CIP ADDITION'))) then
893 
894          -- BUG# 2323997
895          -- no longer calling validate_rec_cost_reserve here
896          -- as it is handled by the following check for non-deprn-basis
897          -- assets...  also changed passed value to be adj_rec_cost - BMR
898 
899 ---------Added by Satish Byreddy As part of Reverse Catch up calculation Bug No.        6951549
900 
901             if (nvl(px_asset_fin_rec_new.extended_deprn_flag,'X') in ('N','D',FND_API.G_MISS_CHAR)) then
902                l_reset_extend_flag := TRUE;
903                l_extended_flag := FALSE; -- Bug 6737486 don't need validations when resetting
904             ELSE
905               l_reset_extend_flag := FALSE;
906 
907             end if;
908 
909               IF NOT (l_reset_extend_flag) THEN
910 
911                  if not fa_asset_val_pvt.validate_adj_rec_cost
912                          (p_adjusted_recoverable_cost => px_asset_fin_rec_new.adjusted_recoverable_cost,
913                           p_deprn_reserve             => px_asset_deprn_rec_new.deprn_reserve,
914                           p_calling_fn                => l_calling_fn
915                          , p_log_level_rec => p_log_level_rec) then
916                     raise calc_err;
917                  end if;
918                END IF;
919 
920 ---------End OF Addition by Satish Byreddy As part of Reverse Catch up calculation Bug No.      6951549
921 
922          /*Bug#9682863 - Modified the parameters - instead of individual value passing records. */
923          if not fa_asset_val_pvt.validate_ytd_reserve
924                  (p_asset_hdr_rec             => p_asset_hdr_rec,
925                   p_asset_type_rec            => p_asset_type_rec,
926                   p_asset_fin_rec_new         => px_asset_fin_rec_new,
927                   p_asset_deprn_rec_new       => px_asset_deprn_rec_new,
928                   p_asset_deprn_rec_old       => p_asset_deprn_rec_old,    -- Fix for bug 8790562
929                   p_period_rec                => p_period_rec,
930                   p_calling_fn                => l_calling_fn
931                  , p_log_level_rec => p_log_level_rec) then
932             raise calc_err;
933          end if;
934 
935          -- Bug 7491479 Need to set the period counter fully reserved if the asset was
936          -- added with cost = reserve
937 	 -- Bug 12556691 : Need to check deprn_limit_type to find out if deprn limit is used
938 
939          if (nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'N' OR
940             (nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y' AND
941              px_asset_fin_rec_new.deprn_method_code <> 'JP-STL-EXTND'))  then
942             if (p_asset_type_rec.asset_type = 'CAPITALIZED') then
943                if (nvl(px_asset_fin_rec_new.cost,0) <> 0) then
944                   if (nvl(p_asset_fin_rec_adj.period_counter_fully_reserved, -- Bug 7661870
945                           p_period_rec.period_counter) = p_period_rec.period_counter) then
946                      if (px_asset_fin_rec_new.deprn_limit_type <> 'NONE') then
947                         if (nvl(px_asset_fin_rec_new.cost,0) -
948                             nvl(px_asset_deprn_rec_new.deprn_reserve,0) -
949                             nvl(px_asset_fin_rec_new.allowed_deprn_limit_amount,0) = 0) then
950                            px_asset_fin_rec_new.period_counter_fully_reserved :=
951                            p_period_rec.period_counter;
952                            px_asset_fin_rec_new.period_counter_life_complete :=
953                            p_period_rec.period_counter;
954                         else
955                            px_asset_fin_rec_new.period_counter_fully_reserved := null;
956                            px_asset_fin_rec_new.period_counter_life_complete := null;
957                         end if;
958                      else
959                         if (nvl(px_asset_fin_rec_new.cost,0) -
960                             nvl(px_asset_deprn_rec_new.deprn_reserve,0) -
961                             nvl(px_asset_fin_rec_new.salvage_value,0)  = 0) then
962                             px_asset_fin_rec_new.period_counter_fully_reserved :=
963                             p_period_rec.period_counter;
964                             px_asset_fin_rec_new.period_counter_life_complete :=
965                             p_period_rec.period_counter;
966                         else
967                             px_asset_fin_rec_new.period_counter_fully_reserved := null;
968                             px_asset_fin_rec_new.period_counter_life_complete := null;
969                         end if;
970                      end if;
971                   end if;
972                end if;
973             end if;
974          end if;
975 -- End of Bug 7491479
976       end if;
977 
978       -- Bug 8722521 : Validation for Japan methods during Tax upload
979       if (nvl(px_trans_rec.calling_interface,'X') = 'FATAXUP') and
980          (nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y') then
981          if not FA_ASSET_VAL_PVT.validate_jp_taxupl (
982                    p_trans_rec            =>     px_trans_rec,
983                    p_asset_type_rec       =>     p_asset_type_rec,
984                    p_asset_fin_rec        =>     px_asset_fin_rec_new,
985                    p_asset_hdr_rec        =>     p_asset_hdr_rec,
986                    p_asset_deprn_rec      =>     px_asset_deprn_rec_new,
987                    p_log_level_rec        =>     p_log_level_rec) then
988             raise calc_err;
989          end if;
990       end if;
991 
992       if (p_log_level_rec.statement_level) then
993                fa_debug_pkg.add('calc_fin_info',
994                      'px_asset_fin_rec_new.production_capacity',
995                       px_asset_fin_rec_new.production_capacity, p_log_level_rec => p_log_level_rec);
996                fa_debug_pkg.add('calc_fin_info',
997                      'px_asset_deprn_rec_new.ltd_prod',
998                       px_asset_deprn_rec_new.ltd_production, p_log_level_rec => p_log_level_rec);
999                fa_debug_pkg.add('calc_fin_info',
1000                      'px_asset_deprn_rec_new.ytd_prod',
1001                       px_asset_deprn_rec_new.ytd_production, p_log_level_rec => p_log_level_rec);
1002                fa_debug_pkg.add('calc_fin_info',
1003                      'px_asset_fin_rec_new.short_fiscal_year_flag',
1004                       px_asset_fin_rec_new.short_fiscal_year_flag, p_log_level_rec => p_log_level_rec);
1005       end if;
1006 
1007       -- New Adjustments Behavior
1008       -- ------------------------
1009       -- Original versions simply called faadjust as usual.
1010       -- New model is as follows:
1011       --
1012       -- 1) the invoice engine will cllear all payables cost against
1013       --    the payables ccid for each line (prim and reporting)
1014       -- 2) faadjust is called with ins_adj passed as false
1015       --    and returns the amounts for expense and bonus expense
1016       -- 3) we determine any difference between the payables cost cleared
1017       --    and the delta cost which still needs to be flex built and posted
1018       -- 4) we pass all four amounts to a new version of faxiat which
1019       --    will insert them
1020       --
1021       -- Note: we can potentially enabled this at the time of addition
1022       -- as well instead of relying on CJE when desired.
1023 
1024       if not fa_cache_pkg.fazccmt
1025               (X_method                => px_asset_fin_rec_new.Deprn_Method_Code,
1026                X_life                  => px_asset_fin_rec_new.Life_In_Months
1027               , p_log_level_rec => p_log_level_rec) then
1028          raise calc_err;
1029       end if;
1030 
1031       l_method_id        := fa_cache_pkg.fazccmt_record.method_id;
1032       l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
1033       l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
1034 
1035       ----------------------------------------------
1036       -- Call Depreciable Basis Rule
1037       -- Event type: Initial Addition
1038       -- This event type calculates adjusted_cost
1039       -- at the period of DPIS.
1040       ----------------------------------------------
1041       /*13513616 --No need to call if CGU is changed ,set old values */
1042       l_financial_info_changed := FA_ASSET_VAL_PVT.is_financial_info_changed(p_asset_fin_rec_old  => p_asset_fin_rec_old,
1043                                                                              p_asset_fin_rec_adj  => p_asset_fin_rec_adj,
1044 						   	                     px_asset_fin_rec_new => px_asset_fin_rec_new,
1045 							                     p_log_level_rec      => p_log_level_rec);
1046       /*bug#16426081 starts*/
1047       if(p_asset_fin_rec_adj.adjusted_cost <> 0) then
1048          px_trans_rec.transaction_key := 'BA';
1049          px_asset_fin_rec_new.adjusted_cost := p_asset_fin_rec_adj.adjusted_cost;
1050          l_financial_info_changed := false;
1051       end if;
1052       if not  FA_ASSET_VAL_PVT.validate_cca_rules
1053                (p_trans_rec => px_trans_rec,
1054                p_asset_hdr_rec => p_asset_hdr_rec,
1055                p_asset_type_rec => p_asset_type_rec,
1056                p_asset_fin_rec => px_asset_fin_rec_new,
1057                p_asset_fin_rec_old => p_asset_fin_rec_old,
1058                p_asset_deprn_rec => px_asset_deprn_rec_new,
1059                p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1060                p_period_rec => p_period_rec,
1061                p_log_level_rec => p_log_level_rec) then
1062          raise calc_err;
1063       end if;
1064       /*bug#16426081 ends*/
1065       if l_financial_info_changed then
1066          if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
1067                     (
1068                      p_event_type             => 'INITIAL_ADDITION',
1069                      p_asset_fin_rec_new      => px_asset_fin_rec_new,
1070                      p_asset_fin_rec_old      => p_asset_fin_rec_old,
1071                      p_asset_hdr_rec          => p_asset_hdr_rec,
1072                      p_asset_type_rec         => p_asset_type_rec,
1073                      p_asset_deprn_rec        => px_asset_deprn_rec_new,
1074                      p_trans_rec              => px_trans_rec,
1075                      p_period_rec             => p_period_rec,
1076                      p_used_by_adjustment     => 'ADJUSTMENT',
1077                      p_mrc_sob_type_code      => p_mrc_sob_type_code,
1078                      px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
1079                      px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
1080                      px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
1081                      p_log_level_rec          => p_log_level_rec
1082                     )
1083                  )
1084          then
1085            raise calc_err;
1086          end if;
1087       end if;
1088       if (p_log_level_rec.statement_level) then
1089                fa_debug_pkg.add('calc_fin_info', 'trx_subtype',
1090                                 px_trans_rec.transaction_subtype, p_log_level_rec);
1091                fa_debug_pkg.add('calc_fin_info', 'transaction_type_code',
1092                                 px_trans_rec.transaction_type_code, p_log_level_rec);
1093       end if;
1094 
1095       if (px_trans_rec.transaction_subtype = 'AMORTIZED') then
1096 
1097          -- validate the amortization_start_date (do for add and adj)
1098          -- when not in period of addition, amort date is set to trx date
1099          -- BUG# 3194910 - for group, only do this for direct adjustments
1100          --                and not those spawned by members
1101 
1102          if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1103              px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
1104              (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1105               px_trans_rec.transaction_key       = 'GJ')) then
1106             l_amortization_start_date := px_trans_rec.transaction_date_entered;
1107          else
1108             l_amortization_start_date := px_trans_rec.amortization_start_date;
1109          end if;
1110 
1111          -- Fix for Bug #2668073.  Need to pass different variables to OUT
1112          -- NOCOPY and IN parameters for amort start date;
1113          l_old_amortization_start_date := l_amortization_start_date;
1114 
1115 
1116          if not FA_ASSET_VAL_PVT.validate_amort_start_date
1117                  (p_transaction_type_code     => px_trans_rec.transaction_type_code,
1118                   p_asset_id                  => p_asset_hdr_rec.asset_id,
1119                   p_book_type_code            => p_asset_hdr_rec.book_type_code,
1120                   p_date_placed_in_service    => px_asset_fin_rec_new.date_placed_in_service,
1121                   p_conversion_date           => px_asset_fin_rec_new.conversion_date,
1122                   p_period_rec                => p_period_rec,
1123                   p_amortization_start_date   => l_old_amortization_start_date,
1124                   p_db_rule_name              => fa_cache_pkg.fazcdrd_record.rule_name,
1125                   p_rate_source_rule          => fa_cache_pkg.fazccmt_record.rate_source_rule,
1126                   p_transaction_key           => px_trans_rec.transaction_key,
1127                   x_amortization_start_date   => l_amortization_start_date,
1128                   x_trxs_exist                => l_trxs_exist,
1129                   p_calling_fn                => l_calling_fn, p_log_level_rec => p_log_level_rec) then
1130             raise calc_err;
1131          end if;
1132 
1133          if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1134              px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
1135              px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT') then
1136              if ( l_amortization_start_date is not null) then
1137                 px_trans_rec.transaction_date_entered := l_amortization_start_date;
1138              end if;
1139             px_trans_rec.amortization_start_date := l_amortization_start_date;
1140          else
1141             px_trans_rec.amortization_start_date := l_amortization_start_date;
1142          end if;
1143       end if;
1144 
1145       if (px_trans_rec.transaction_subtype = 'AMORTIZED') and
1146          (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1147           px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT') then
1148 
1149          if not FA_ASSET_VAL_PVT.validate_cost_change (
1150                   p_asset_id                => p_asset_hdr_rec.asset_id,
1151                   p_group_asset_id          => px_asset_fin_rec_new.group_asset_id, --hh
1152                   p_book_type_code          => p_asset_hdr_rec.book_type_code,
1153                   p_asset_type              => p_asset_type_rec.asset_type,
1154                   p_transaction_header_id   => px_trans_rec.transaction_header_id,
1155                   p_transaction_date        => nvl(px_trans_rec.amortization_start_date,
1156                                                    px_trans_rec.transaction_date_entered),
1157                   p_cost                    => p_asset_fin_rec_old.cost,
1158                   p_cost_adj                => p_asset_fin_rec_adj.cost,
1159                   p_salvage_value           => p_asset_fin_rec_old.salvage_value,
1160                   p_salvage_value_adj       => p_asset_fin_rec_adj.salvage_value,
1161                   p_deprn_limit_amount      => p_asset_fin_rec_old.allowed_deprn_limit_amount,
1162                   p_deprn_limit_amount_adj  => p_asset_fin_rec_adj.allowed_deprn_limit_amount,
1163                   p_mrc_sob_type_code       => p_mrc_sob_type_code,
1164                   p_set_of_books_id         => p_asset_hdr_rec.set_of_books_id,
1165                   p_over_depreciate_option  => px_asset_fin_rec_new.over_depreciate_option, --hh
1166                   p_log_level_rec           => p_log_level_rec
1167                  ) then
1168             raise calc_err;
1169          end if;
1170 
1171      end if;
1172 
1173       -- note: we want to pick up adjustments to group assets in the period
1174       -- of addition, but not the initial shell.  in that case, the
1175       -- old struct will be null so comparing that
1176 
1177       -- do not pick up such groups if an initial reserve adjustment has
1178       -- already been performed
1179 
1180       -- R12 conditional logic
1181       -- SLA: since voids are obsolete changing the condition
1182 
1183       if (((G_release = 11 and
1184             px_trans_rec.transaction_type_code = 'GROUP ADDITION') or
1185            (G_release <> 11 and
1186             px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1187             p_asset_hdr_rec.period_of_addition = 'Y' )) and
1188           p_asset_fin_rec_old.rate_adjustment_factor is not null ) then
1189          select count(*)
1190            into l_deprn_reserve_exists
1191            from fa_deprn_summary
1192           where asset_id = p_asset_hdr_rec.asset_id
1193             and book_type_code = p_asset_hdr_rec.book_type_code
1194             and deprn_source_code = 'BOOKS'
1195             and deprn_reserve <> 0;
1196 
1197          if (p_log_level_rec.statement_level) then
1198              fa_debug_pkg.add('calc_fin_info', 'l_deprn_reserve_exists for group', l_deprn_reserve_exists, p_log_level_rec => p_log_level_rec);
1199          end if;
1200 
1201       end if;
1202 
1203       if (p_log_level_rec.statement_level) then
1204           fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_old.rate_adjustment_factor', p_asset_fin_rec_old.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
1205           fa_debug_pkg.add(l_calling_fn, 'l_deprn_reserve_exists', l_deprn_reserve_exists, p_log_level_rec => p_log_level_rec);
1206           fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec_adj.deprn_reserve', p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
1207       end if;
1208 
1209        --Bug8244128 Fetching recognize_gain_loss from retirements table
1210        if ( px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and px_trans_rec.transaction_key  = 'MR' ) then
1211           open c_recognize_gain_loss_ret( px_trans_rec.member_transaction_header_id);
1212           fetch c_recognize_gain_loss_ret into l_recognize_gain_loss;
1213           close c_recognize_gain_loss_ret;
1214 
1215        elsif ( px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and px_trans_rec.transaction_key  = 'MS') then
1216           open c_recognize_gain_loss_res( px_trans_rec.member_transaction_header_id);
1217           fetch c_recognize_gain_loss_res into l_recognize_gain_loss;
1218           close c_recognize_gain_loss_res;
1219        end if;
1220 
1221        if (p_log_level_rec.statement_level) then
1222           fa_debug_pkg.add(l_calling_fn, 'l_recognize_gain_loss', l_recognize_gain_loss, p_log_level_rec);
1223        end if;
1224 
1225       -- Bug7017134: Modified condition below to handle adjustment in period of
1226       -- group addition.  Following condition has to be true in order to properly
1227       -- skip call to any functions in faxama
1228 
1229       -- R12 conditional logic
1230       -- SLA Uptake
1231       -- enter this code for additions and adjustments in period of addition
1232       -- to force catchup where needed too
1233       -- ** doesn't work coes asset isn't inserted yet **
1234 
1235       if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
1236           px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
1237           (G_release = 11 and
1238            (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' or
1239             (px_trans_rec.transaction_type_code = 'GROUP ADDITION' and
1240              p_asset_fin_rec_old.rate_adjustment_factor is not null and
1241              l_deprn_reserve_exists = 0 and
1242              (px_trans_rec.transaction_key <> 'GJ' or
1243               (px_trans_rec.transaction_key = 'GJ' and
1244                nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0))))) or
1245           (G_release <> 11 and
1246             (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1247              nvl(l_deprn_reserve_exists,0) = 0 and
1248              (px_trans_rec.transaction_key <> 'GJ' or
1249               (px_trans_rec.transaction_key = 'GJ' and
1250                nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0))) or
1251             (px_trans_rec.transaction_type_code = 'ADDITION' and
1252              p_asset_fin_rec_old.rate_adjustment_factor is not null))) then
1253 
1254          if (p_log_level_rec.statement_level) then
1255              fa_debug_pkg.add('calc_fin_info', 'in adjustment logic', 'before check for dep_flag', p_log_level_rec => p_log_level_rec);
1256          end if;
1257 
1258          -- much of this logic is based upon faxfa2b.pls
1259 
1260          if (px_trans_rec.transaction_subtype = 'AMORTIZED' and
1261              /*bug#16426081 starts */
1262                 (px_asset_fin_rec_new.cost <> 0 or
1263                    (p_asset_fin_rec_old.group_asset_id is null and
1264                    px_asset_fin_rec_new.group_asset_id is not null and
1265                    p_asset_deprn_rec_old.deprn_reserve <> 0
1266                    )
1267                  )
1268              /*bug#16426081 ends */
1269              --px_asset_fin_rec_new.cost <> 0
1270              ) or
1271             (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' or
1272              px_trans_rec.transaction_type_code = 'GROUP ADDITION') then
1273              l_adjust_type := 'AMORTIZED';
1274          else
1275              l_adjust_type := 'EXPENSED';
1276          end if;
1277 
1278          -- temporarily adding this until they are correctly built into the calc routines
1279          px_asset_fin_rec_new.rate_adjustment_factor := p_asset_fin_rec_old.rate_adjustment_factor;
1280          px_asset_fin_rec_new.formula_factor         := 1;
1281 
1282          -- Bug#3845714
1283          -- Following logic was added not to process BS for Sumup Case (to fix Bug3737670)
1284          -- Now Sumup Group will not be processed for FA_ADJ row
1285          if (px_asset_fin_rec_new.group_asset_id is null and
1286              nvl(px_asset_fin_rec_new.member_rollup_flag,'N') = 'Y') then
1287             l_call_bs := FALSE;
1288          end if;
1289 
1290          -- SLA Uptake
1291          -- adding nvl around old value since additions will enter this code now
1292          -- also entering this logic when dep flag is set to yes when
1293          -- previously was no
1294 
1295          if ((px_asset_fin_rec_new.depreciate_flag       = nvl(p_asset_fin_rec_old.depreciate_flag,
1296                                                               px_asset_fin_rec_new.depreciate_flag) or
1297              (G_release = 11 or
1298               (nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'NO' and
1299               px_asset_fin_rec_new.adjustment_required_status = 'ADD'))) and
1300          --HH only if disabled_flag is not Y.
1301              nvl(px_asset_fin_rec_new.disabled_flag,'N') = nvl(p_asset_fin_rec_old.disabled_flag,'N') and
1302              nvl(px_asset_fin_rec_new.reval_ceiling, 0) = nvl(p_asset_fin_rec_old.reval_ceiling, 0) and not
1303              (p_inv_trans_rec.invoice_transaction_id is not null and
1304               nvl(p_asset_fin_rec_adj.cost, 0) = 0)) then
1305 
1306             if (p_log_level_rec.statement_level) then
1307                fa_debug_pkg.add('calc_fin_info', 'inside',
1308                                  'main adjustment logic', p_log_level_rec => p_log_level_rec);
1309                fa_debug_pkg.add('calc_fin_info', 'calling_interface', px_trans_rec.calling_interface, p_log_level_rec => p_log_level_rec);
1310                fa_debug_pkg.add('calc_fin_info', 'TRX_KEY before faxama', px_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
1311                fa_debug_pkg.add('calc_fin_info', 'group_reclass_type before faxama',
1312                                  p_group_reclass_options_rec.group_reclass_type, p_log_level_rec => p_log_level_rec);
1313 
1314             end if;
1315 
1316             -- BUG# 4684363
1317             -- removing validation originally added for FA_NO_GC_CALC_FULLYRSV
1318             -- see older code for details
1319 
1320             if ((px_asset_fin_rec_new.group_asset_id is null and
1321                  nvl(px_asset_fin_rec_new.member_rollup_flag,'N') <> 'Y') or
1322                 (px_asset_fin_rec_new.group_asset_id is not null and
1323                  nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'CALCULATE')) then
1324 
1325                -- new method
1326                -- BUG# 3134846
1327                --    need to account for the value of l_adjust_type rather than just
1328                --    just the value of the subtype here (see above)
1329                --
1330                -- if (px_trans_rec.transaction_subtype = 'AMORTIZED' and
1331                if (l_adjust_type = 'AMORTIZED' and
1332                   --HH
1333                    (nvl(px_asset_fin_rec_new.disabled_flag,'N') = 'N')) then
1334 
1335                   l_call_faxama := TRUE;
1336 
1337                   -- BUG# 6987729
1338                   -- determine reclass case in order to skip calc/expense logic
1339                   -- when inbound or outbound from a group
1340                   -- and avoid calling as we don't want to double the
1341                   -- hits to faxama/faxinaj here and in favgrecb.pls
1342 
1343                   if ((nvl(px_asset_fin_rec_new.group_asset_id, -99) <>
1344                        nvl(p_asset_fin_rec_old.group_asset_id, -99)) AND
1345                       (px_asset_fin_rec_new.group_asset_id is null OR
1346                        p_asset_fin_rec_old.group_asset_id is null)) then
1347                      l_call_faxama := FALSE;
1348                      l_call_bs := FALSE;
1349                   end if;
1350 
1351 
1352                   -- if called from faxasset set flag for conc program
1353                   -- to call faxama for backdated transactions.
1354                   -- This is for backdated transactions that affect a group
1355                   -- asset so that faxama is not invoked from form but from
1356                   -- process group adjustments.
1357 
1358                   --
1359                   -- This is the place where prior period transaction and group reclass
1360                   -- to be processed with Process Group Adjustment concurrent program.
1361                   -- Comment following if statement out for testing with script.
1362                   -- There are 5 more places needs to be commented out in FAVGRECB.pls in
1363                   -- order to make process to be done without concurrent program
1364                   --
1365                   if (px_trans_rec.calling_interface = 'FAXASSET') then
1366                      if (p_asset_type_rec.asset_type = 'GROUP') then
1367                         if (px_trans_rec.transaction_key in(
1368                                         'MA','MJ','MC','MV','MD','MN','GJ') and
1369                            px_trans_rec.amortization_start_date <
1370                            p_period_rec.calendar_period_open_date) then
1371 
1372                            px_asset_fin_rec_new.adjustment_required_status := 'GADJ';
1373                            l_call_faxama := FALSE;
1374                            l_call_bs := FALSE;
1375                         elsif (px_trans_rec.transaction_key = 'GC' and
1376                            p_group_reclass_options_rec.group_reclass_type = 'CALC') then
1377                            px_asset_fin_rec_new.adjustment_required_status := 'GADJ';
1378                            l_call_faxama := FALSE;
1379                            l_call_bs := FALSE;
1380                            -- lock member assets too here, bug 10097181
1381                            open c_group_rcl_out;
1382                            fetch c_group_rcl_out into l_group_rcl_out_asset;
1383                            close c_group_rcl_out;
1384                            if (nvl(l_group_rcl_out_asset,-99) > 0) then
1385                               if (p_mrc_sob_type_code <> 'R') then
1386                                  update fa_books
1387                                  set adjustment_required_status = 'GADJ'
1388                                  where asset_id = l_group_rcl_out_asset
1389                                  and book_type_code = p_asset_hdr_rec.book_type_code
1390                                  and transaction_header_id_out is null;
1391                               else
1392                                  update fa_mc_books
1393                                  set adjustment_required_status = 'GADJ'
1394                                  where asset_id = l_group_rcl_out_asset
1395                                  and book_type_code = p_asset_hdr_rec.book_type_code
1396                                  and set_of_books_id = p_asset_hdr_rec.set_of_books_id
1397                                  and transaction_header_id_out is null;
1398                               end if;
1399                            end if;
1400 
1401                         elsif (px_trans_rec.transaction_key = 'GC' and
1402                            p_group_reclass_options_rec.group_reclass_type = 'MANUAL') then
1403                            l_call_faxama := FALSE;
1404                            l_call_bs := FALSE;
1405                         elsif (px_trans_rec.transaction_key in ('MR', 'MS')) and                         -- ENERGY
1406                               (px_asset_fin_rec_new.tracking_method = 'ALLOCATE') and                    -- ENERGY
1407                               (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and  -- ENERGY
1408                               (l_recognize_gain_loss = 'NO') then -- ENERGY
1409                            -- Energy implementation requires FA_RETIREMENT_PVT.Do_Allocate to            -- ENERGY
1410                            -- be called from Process Group Adjsutment Conc program.                      -- ENERGY
1411                             --8244128 Added the check for recognize gain and loss
1412                            px_asset_fin_rec_new.adjustment_required_status := 'GADJ';                    -- ENERGY
1413                         elsif (px_trans_rec.transaction_key in ('MR', 'MS')) and                         -- ENERGY
1414                               (px_asset_fin_rec_new.tracking_method = 'ALLOCATE') and                    -- ENERGY
1415                               (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and  -- ENERGY
1416                               (l_recognize_gain_loss = 'YES')  then                                      -- ENERGY
1417                            --8244128 Added the condition to set adjustment_required_status
1418                            -- for case with recognize_gain_loss as YES
1419                            px_asset_fin_rec_new.adjustment_required_status := 'NONE';                    -- ENERGY
1420                         end if;
1421                      elsif (p_asset_type_rec.asset_type <> 'GROUP' and
1422                            p_asset_fin_rec_old.group_asset_id is not null and
1423                            px_asset_fin_rec_new.group_asset_id is null and
1424                            p_group_reclass_options_rec.group_reclass_type is not null) then
1425                         l_call_faxama := FALSE;
1426                         l_call_bs := FALSE;
1427                      end if;
1428                   end if;
1429                   --
1430                   --
1431                   --
1432 
1433                   /*Bug 8941132 MRC Reclass -Start*/
1434                   if (p_asset_type_rec.asset_type = 'GROUP') then
1435                      if (px_trans_rec.transaction_key = 'GC' and p_group_reclass_options_rec.group_reclass_type = 'CALC') then
1436                         l_call_faxama := FALSE;
1437                         l_call_bs := FALSE;
1438                      elsif (px_trans_rec.transaction_key = 'GC' and p_group_reclass_options_rec.group_reclass_type = 'MANUAL') then
1439                         l_call_faxama := FALSE;
1440                         l_call_bs := FALSE;
1441                      end if;
1442                   end if;
1443                   /*Bug 8941132 MRC Reclass -End*/
1444 
1445                   if (p_log_level_rec.statement_level) then
1446                      fa_debug_pkg.add('calc_fin_info', 'adjustment_required_status',
1447                                        px_asset_fin_rec_new.adjustment_required_status, p_log_level_rec => p_log_level_rec);
1448                      fa_debug_pkg.add('calc_fin_info', 'l_call_faxama', l_call_faxama, p_log_level_rec => p_log_level_rec);
1449                   end if;
1450 
1451                   --* Bug#3737670
1452                   -- Skip to call faxama if the processing asset and transaction is matched with followings.
1453                   --  Transaction - Group Reclassification
1454                   --  Tracking Method - Calculate
1455                   --  Depreciation Option - Member
1456                   if nvl(px_asset_fin_rec_new.group_asset_id,-99) <> nvl(p_asset_fin_rec_old.group_asset_id,-99) and
1457                      nvl(px_asset_fin_rec_new.tracking_method,'NONE') = 'CALCULATE' and
1458                      nvl(px_asset_fin_rec_new.depreciation_option,'NONE') = 'MEMBER' then
1459                       if (p_log_level_rec.statement_level) then
1460                          fa_debug_pkg.add('calc_fin_info', 'Skip faxama since group reclass in calculate and Member', 'l_call_faxama is FALSE', p_log_level_rec => p_log_level_rec);
1461                       end if;
1462                       l_call_faxama := FALSE;
1463                   end if;
1464 
1465                   -- Fix for Bug #3846324.  Do not call faxama if the asset is not depreciating.  We
1466                   -- do not want a deprn expense catchup row created here.
1467                   -- Bug4318400: for group(non-sumup group), faxama needs to be called.
1468                   -- Not to call faxama for sumup group is taken care before this point
1469                   if (px_asset_fin_rec_new.depreciate_flag = 'NO') and
1470                      (p_asset_type_rec.asset_type <> 'GROUP') then
1471                      l_call_faxama := FALSE;
1472                   end if;
1473 
1474                   -- Bug4958977: Adding following entire if statement.
1475                   -- trx could be dpis change if following conditions are met
1476                   -- even though trx date is in current period
1477                   if (px_trans_rec.transaction_key = 'MJ' and
1478                       nvl(p_asset_fin_rec_adj.cost, 0) = 0 and
1479                       nvl(p_asset_fin_rec_adj.cip_cost, 0) = 0 and
1480                       nvl(p_asset_fin_rec_adj.salvage_value, 0) = 0 and
1481                       nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) = 0) and
1482                      (nvl(px_trans_rec.amortization_start_date,
1483                           px_trans_rec.transaction_date_entered) >=
1484                                  p_period_rec.calendar_period_open_date) then
1485 
1486                      if (p_log_level_rec.statement_level) then
1487                         fa_debug_pkg.add('calc_fin_info', 'could be dpis change', 'cont', p_log_level_rec => p_log_level_rec);
1488                      end if;
1489 
1490                      OPEN c_check_dpis_change;
1491                      FETCH c_check_dpis_change INTO l_temp_thid;
1492                      CLOSE c_check_dpis_change;
1493 
1494                      if (p_log_level_rec.statement_level) then
1495                         fa_debug_pkg.add('calc_fin_info', 'temp_thid', l_temp_thid, p_log_level_rec => p_log_level_rec);
1496                      end if;
1497 
1498                      if (l_temp_thid is not null) then
1499                         l_dpis_change := TRUE;
1500                      else
1501                         l_dpis_change := FALSE;
1502                      end if;
1503                   end if;
1504 
1505                   -- Call faxama only if this is prior period trx
1506                   -- Bug4958977: Added condition "or (l_dpis_change)"
1507                   if (((p_period_rec.calendar_period_open_date >
1508                                          px_trans_rec.amortization_start_date) or
1509                        (l_dpis_change))and
1510                       l_call_faxama and
1511 		      l_financial_info_changed) then
1512 
1513                      if (p_log_level_rec.statement_level) then
1514                         fa_debug_pkg.add('calc_fin_info', 'calling FAXAMA', 'faxama', p_log_level_rec => p_log_level_rec);
1515                         fa_debug_pkg.add('calc_fin_info', 'px_asset_fin_rec_new.reduction_rate', px_asset_fin_rec_new.reduction_rate, p_log_level_rec => p_log_level_rec);
1516                      end if;
1517 
1518                      if (p_asset_type_rec.asset_type <> 'GROUP') then
1519 
1520                         if not FA_AMORT_PVT.faxama
1521                            (px_trans_rec           => px_trans_rec,
1522                             p_asset_hdr_rec        => p_asset_hdr_rec,
1523                             p_asset_desc_rec       => p_asset_desc_rec,
1524                             p_asset_cat_rec        => p_asset_cat_rec,
1525                             p_asset_type_rec       => p_asset_type_rec,
1526                             p_asset_fin_rec_old    => p_asset_fin_rec_old,
1527                             p_asset_fin_rec_adj    => p_asset_fin_rec_adj,
1528                             px_asset_fin_rec_new   => px_asset_fin_rec_new,
1529                             p_asset_deprn_rec      => p_asset_deprn_rec_old,
1530                             p_asset_deprn_rec_adj  => p_asset_deprn_rec_adj,
1531                             p_period_rec           => p_period_rec,
1532                             p_mrc_sob_type_code    => p_mrc_sob_type_code,
1533                             p_running_mode         => fa_std_types.FA_DPR_NORMAL,
1534                             p_used_by_revaluation  => null,
1535                             p_reclassed_asset_id   => p_reclassed_asset_id,
1536                             p_reclass_src_dest     => p_reclass_src_dest,
1537                             p_reclassed_asset_dpis => p_reclassed_asset_dpis,
1538                             x_deprn_exp            => l_deprn_exp,
1539                             x_bonus_deprn_exp      => l_bonus_deprn_exp,
1540                             x_impairment_exp       => l_impairment_exp
1541                             , p_log_level_rec => p_log_level_rec) then
1542                            return (FALSE);
1543                         end if;
1544 
1545 			/* Bug 13620748 start */
1546 
1547 			-- basically we need to resverse the entire catchup in case
1548 			-- their is an amrotized change of reserve in POA in R12
1549 
1550                         if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0)
1551                              OR (nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0)
1552 			     OR (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE)))
1553                              AND (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date)
1554                              AND (p_asset_hdr_rec.period_of_addition = 'Y')
1555                              AND G_release <> 11) THEN
1556 
1557                            BEGIN
1558                               IF (p_mrc_sob_type_code <> 'R') then
1559                                  SELECT sum(decode(adj.debit_credit_flag,'DR',
1560                                                    -1 * adj.adjustment_amount,
1561                                                    adj.adjustment_amount))
1562                                  INTO   l_deprn_exp_temp
1563                                  FROM   fa_adjustments adj,
1564                                         fa_transaction_headers th
1565                                  WHERE  th.book_type_code = p_asset_hdr_rec.book_type_code
1566                                  and    th.asset_id = p_asset_hdr_rec.asset_id
1567                                  and    th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') --Bug7409454
1568                                  and    adj.book_type_code = p_asset_hdr_rec.book_type_code
1569                                  and    adj.asset_id = p_asset_hdr_rec.asset_id
1570                                  and    adj.transaction_header_id = th.transaction_header_id
1571                                  and    adj.source_type_code = 'DEPRECIATION'
1572                                  and    adj.adjustment_type = 'EXPENSE'
1573                                  and    adj.period_counter_created = p_period_rec.period_counter;
1574 
1575                               ELSE
1576 
1577                                  SELECT sum(decode(adj.debit_credit_flag,'DR',
1578                                                    -1 * adj.adjustment_amount,
1579                                                    adj.adjustment_amount))
1580                                  INTO   l_deprn_exp_temp
1581                                  FROM   fa_mc_adjustments adj,
1582                                         fa_transaction_headers th
1583                                  WHERE  th.book_type_code = p_asset_hdr_rec.book_type_code
1584                                  and    th.asset_id = p_asset_hdr_rec.asset_id
1585                                  and    th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') ----Bug7409454
1586                                  and    adj.book_type_code = p_asset_hdr_rec.book_type_code
1587                                  and    adj.asset_id = p_asset_hdr_rec.asset_id
1588                                  and    adj.transaction_header_id = th.transaction_header_id
1589                                  and    adj.source_type_code = 'DEPRECIATION'
1590                                  and    adj.adjustment_type = 'EXPENSE'
1591                                  and    adj.period_counter_created = p_period_rec.period_counter
1592                                  and    adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1593 
1594                               END IF;
1595                            EXCEPTION
1596                               WHEN OTHERS THEN
1597                                  l_deprn_exp_temp := 0;
1598                            END;
1599                         end if;
1600 			/* Bug 13620748 end */
1601                      end if; -- (p_asset_type_rec.asset_type <> 'GROUP')
1602 
1603                   else
1604                      -- calc_raf_adj_cost is the function to recalculate adj cost,
1605                      -- raf, and formular factor and it is godd enough for current
1606                      -- period trx.
1607                      /*Bug 8941132: MRC Reclass For Group Reclass l_call_bs is always false
1608                                     Since faxama is called by FAPGADJB.pls
1609                      if ((px_trans_rec.calling_interface <> 'FAXASSET') and
1610                          (px_trans_rec.transaction_key = 'GC' and
1611                          (p_group_reclass_options_rec.group_reclass_type = 'CALC'))) or
1612                      */
1613                      if (px_trans_rec.transaction_key in ('MR', 'MS')) then
1614                         l_call_bs := TRUE;
1615                      else
1616                         l_call_bs := FALSE;
1617                      end if;
1618 
1619                      -- 6950629 -> Only Contract_id adjustment, adjusted_cost calc is not updated*
1620                      -- Bug7017134: There is no need to call calc_raf_adj_cost in case of
1621                      -- GC, MR, MS.
1622                      -- Bug 7390952, added nvl function
1623                      if (nvl(px_trans_rec.transaction_key,'zz') not in ('GC', 'MR', 'MS') and
1624                         l_financial_info_changed ) then
1625                         if not FA_AMORT_PVT.calc_raf_adj_cost
1626                                         (p_trans_rec           => px_trans_rec,
1627                                          p_asset_hdr_rec       => p_asset_hdr_rec,
1628                                          p_asset_desc_rec      => p_asset_desc_rec,
1629                                          p_asset_type_rec      => p_asset_type_rec,
1630                                          p_asset_fin_rec_old   => p_asset_fin_rec_old,
1631                                          px_asset_fin_rec_new  => px_asset_fin_rec_new,
1632                                          p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1633                                          p_asset_deprn_rec_new => px_asset_deprn_rec_new,
1634                                          p_period_rec          => p_period_rec,
1635                                          p_group_reclass_options_rec => p_group_reclass_options_rec,
1636                                          p_mrc_sob_type_code   => p_mrc_sob_type_code
1637                                          , p_log_level_rec => p_log_level_rec) then
1638                                  raise calc_err;
1639                         end if;
1640                      end if;
1641 
1642                      /* Begin of Bug 6803812 : Reverse the fa_adj entry created
1643  * for period of addition
1644  *                         if reserve change is made */
1645 
1646                      -- R12 conditional handling
1647                      if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0) or
1648                           (nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0)
1649 			  OR (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE))) and
1650                          (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date) and
1651                          (p_asset_hdr_rec.period_of_addition = 'Y') and
1652                          G_release <> 11) then
1653 
1654                         begin
1655                            if (p_mrc_sob_type_code <> 'R') then
1656                               SELECT sum(decode(adj.debit_credit_flag,'DR',
1657                                                 -1 * adj.adjustment_amount,
1658                                                 adj.adjustment_amount)),
1659                                      sum(decode(adj.debit_credit_flag,'DR',
1660                                                 -1 * adj.annualized_adjustment,
1661                                                 adj.annualized_adjustment))
1662                               INTO   l_deprn_exp,l_ann_adj_deprn_exp
1663                               FROM   fa_adjustments adj,
1664                                      fa_transaction_headers th
1665                               WHERE  th.book_type_code = p_asset_hdr_rec.book_type_code
1666                               and    th.asset_id = p_asset_hdr_rec.asset_id
1667                               and    th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') --Bug7409454
1668                               and    adj.book_type_code = p_asset_hdr_rec.book_type_code
1669                               and    adj.asset_id = p_asset_hdr_rec.asset_id
1670                               and    adj.transaction_header_id = th.transaction_header_id
1671                               and    adj.source_type_code = 'DEPRECIATION'
1672                               and    adj.adjustment_type = 'EXPENSE'
1673                               and    adj.period_counter_created = p_period_rec.period_counter;
1674 
1675                            else
1676 
1677                               SELECT sum(decode(adj.debit_credit_flag,'DR',
1678                                                 -1 * adj.adjustment_amount,
1679                                                 adj.adjustment_amount)),
1680                                      sum(decode(adj.debit_credit_flag,'DR',
1681                                                 -1 * adj.annualized_adjustment,
1682                                                 adj.annualized_adjustment))
1683                               INTO   l_deprn_exp,l_ann_adj_deprn_exp
1684                               FROM   fa_mc_adjustments adj,
1685                                      fa_transaction_headers th
1686                               WHERE  th.book_type_code = p_asset_hdr_rec.book_type_code
1687                               and    th.asset_id = p_asset_hdr_rec.asset_id
1688                               and    th.transaction_type_code in ('ADDITION', 'ADJUSTMENT') ----Bug7409454
1689                               and    adj.book_type_code = p_asset_hdr_rec.book_type_code
1690                               and    adj.asset_id = p_asset_hdr_rec.asset_id
1691                               and    adj.transaction_header_id = th.transaction_header_id
1692                               and    adj.source_type_code = 'DEPRECIATION'
1693                               and    adj.adjustment_type = 'EXPENSE'
1694                               and    adj.period_counter_created = p_period_rec.period_counter
1695                               and    adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1696 
1697                            end if;
1698                         EXCEPTION
1699                            WHEN OTHERS THEN
1700                               l_deprn_exp := 0;
1701                               l_ann_adj_deprn_exp := 0;
1702                         END;
1703 
1704                      end if; /* End of Bug 6803812 */
1705 
1706                   end if; -- (p_period_rec.calendar_period_open_date >
1707 
1708                else
1709 
1710                   -- R12 conditional handling
1711                   -- Begin of Bug 7153740 : Reverse the fa_adj entry created  for period of addition
1712                   -- if manual reserve change is done
1713                   if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0) or
1714                        (nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0)
1715                                                           OR (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE))) and
1716                       (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date) and
1717                       (p_asset_hdr_rec.period_of_addition = 'Y') and
1718                       G_release <> 11) then
1719 
1720                      --Bug#8598745 : To recalculate adjusted_cost.
1721                      if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
1722                                            p_event_type          => 'EXPENSED_ADJ',
1723                                            p_asset_fin_rec_new   => px_asset_fin_rec_new,
1724                                            p_asset_fin_rec_old   => p_asset_fin_rec_old,
1725                                            p_asset_hdr_rec       => p_asset_hdr_rec,
1726                                            p_asset_type_rec      => p_asset_type_rec,
1727                                            p_asset_deprn_rec     => px_asset_deprn_rec_new,
1728                                            p_trans_rec           => px_trans_rec,
1729                                            p_period_rec          => p_period_rec,
1730                                            p_used_by_adjustment  => 'ADJUSTMENT',
1731                                            p_mrc_sob_type_code   => p_mrc_sob_type_code,
1732                                            p_hyp_total_rsv       => px_asset_deprn_rec_new.deprn_reserve,
1733                                            p_hyp_total_ytd       => px_asset_deprn_rec_new.ytd_deprn,             --Bug 10180072 passed the value of YTD also
1734                                            p_recoverable_cost    => px_asset_fin_rec_new.recoverable_cost,
1735                                            px_new_adjusted_cost  => px_asset_fin_rec_new.adjusted_cost,
1736                                            px_new_raf            => px_asset_fin_rec_new.rate_adjustment_factor,
1737                                            px_new_formula_factor => px_asset_fin_rec_new.formula_factor,
1738                                            p_log_level_rec       => p_log_level_rec))then
1739                         raise calc_err;
1740                      end if;
1741 
1742                      BEGIN
1743                         if (p_mrc_sob_type_code <> 'R') then
1744                            SELECT sum(decode(adj.debit_credit_flag,'DR',
1745                                                         -1 * adj.adjustment_amount,
1746                                                         adj.adjustment_amount)),
1747                                   sum(decode(adj.debit_credit_flag,'DR',
1748                                                         -1 * adj.annualized_adjustment,
1749                                                         adj.annualized_adjustment))
1750                            INTO   l_deprn_exp,l_ann_adj_deprn_exp
1751                            FROM   fa_adjustments adj,
1752                                   fa_transaction_headers th
1753                            WHERE  th.book_type_code = p_asset_hdr_rec.book_type_code
1754                            and    th.asset_id = p_asset_hdr_rec.asset_id
1755                            and    th.transaction_type_code in ('ADDITION', 'ADJUSTMENT')
1756                            and    adj.book_type_code = p_asset_hdr_rec.book_type_code
1757                            and    adj.asset_id = p_asset_hdr_rec.asset_id
1758                            and    adj.transaction_header_id = th.transaction_header_id
1759                            and    adj.source_type_code = 'DEPRECIATION'
1760                            and    adj.adjustment_type = 'EXPENSE'
1761                            and    adj.period_counter_created = p_period_rec.period_counter;
1762 
1763                         else
1764 
1765                            SELECT sum(decode(adj.debit_credit_flag,'DR',
1766                                                         -1 * adj.adjustment_amount,
1767                                                         adj.adjustment_amount)),
1768                                   sum(decode(adj.debit_credit_flag,'DR',
1769                                                         -1 * adj.annualized_adjustment,
1770                                                         adj.annualized_adjustment))
1771                            INTO   l_deprn_exp,l_ann_adj_deprn_exp
1772                            FROM   fa_mc_adjustments adj,
1773                                   fa_transaction_headers th
1774                            WHERE  th.book_type_code = p_asset_hdr_rec.book_type_code
1775                            and    th.asset_id = p_asset_hdr_rec.asset_id
1776                            and    th.transaction_type_code in ('ADDITION', 'ADJUSTMENT')
1777                            and    adj.book_type_code = p_asset_hdr_rec.book_type_code
1778                            and    adj.asset_id = p_asset_hdr_rec.asset_id
1779                            and    adj.transaction_header_id = th.transaction_header_id
1780                            and    adj.source_type_code = 'DEPRECIATION'
1781                            and    adj.adjustment_type = 'EXPENSE'
1782                            and    adj.period_counter_created = p_period_rec.period_counter
1783                            and    adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1784 
1785                         end if;
1786                      EXCEPTION
1787                         WHEN OTHERS THEN
1788                            l_deprn_exp := 0;
1789                            l_ann_adj_deprn_exp := 0;
1790                      END;
1791                   else
1792 
1793                      --HH we want to skip over faxexp if disabled_flag just changed
1794                     --although we probably should never get in here.
1795                      if l_financial_info_changed then
1796                         if not FA_EXP_PVT.faxexp
1797                         (px_trans_rec          => px_trans_rec,
1798                          p_asset_hdr_rec       => p_asset_hdr_rec,
1799                          p_asset_desc_rec      => p_asset_desc_rec,
1800                          p_asset_cat_rec       => p_asset_cat_rec,
1801                          p_asset_type_rec      => p_asset_type_rec,
1802                          p_asset_fin_rec_old   => p_asset_fin_rec_old,
1803                          px_asset_fin_rec_new  => px_asset_fin_rec_new,
1804                          p_asset_deprn_rec     => p_asset_deprn_rec_old,
1805                          p_period_rec          => p_period_rec,
1806                          p_mrc_sob_type_code   => p_mrc_sob_type_code,
1807                          p_running_mode        => fa_std_types.FA_DPR_NORMAL,
1808                          p_used_by_revaluation => null,
1809                          x_deprn_exp           => l_deprn_exp,
1810                          x_bonus_deprn_exp     => l_bonus_deprn_exp,
1811                          x_impairment_exp      => l_impairment_exp,
1812                          x_ann_adj_deprn_exp   => l_ann_adj_deprn_exp,
1813                          x_ann_adj_bonus_deprn_exp => l_ann_adj_bonus_deprn_exp,
1814                          p_log_level_rec => p_log_level_rec) then
1815                            raise calc_err;
1816                      end if;
1817                   end if; --disabled_flag changed.
1818                end if; --  if (((nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0)..
1819            end if;  -- amortized / expensed
1820 
1821                if (p_log_level_rec.statement_level) then
1822                    fa_debug_pkg.add('calc_fin_info', 'after user exits, adj_cost',
1823                                     px_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
1824                end if;
1825 
1826                -- manual override - this is the only section in faadjust that
1827                -- needs to be propogated here
1828                if px_trans_rec.deprn_override_flag in (fa_std_types.FA_OVERRIDE_DPR,
1829                                fa_std_types.FA_OVERRIDE_BONUS,
1830                                fa_std_types.FA_OVERRIDE_DPR_BONUS) then
1831 
1832                   fa_std_types.deprn_override_trigger_enabled:= FALSE;
1833 
1834                   if (NVL(p_asset_fin_rec_old.tracking_method, ' ') = 'ALLOCATE') then
1835                      UPDATE FA_DEPRN_OVERRIDE ov
1836                         SET ov.transaction_header_id = px_trans_rec.transaction_header_id
1837                       WHERE ov.book_type_code        = p_asset_hdr_rec.book_type_code
1838                         AND ov.used_by               = 'ADJUSTMENT'
1839                         AND ov.status                = 'SELECTED'
1840                         AND ov.transaction_header_id is null
1841                         AND ov.asset_id IN
1842                             (SELECT bk.asset_id
1843                                FROM fa_books bk
1844                               WHERE bk.book_type_code = ov.book_type_code
1845                                 AND bk.group_asset_id = p_asset_hdr_rec.asset_id
1846                                 AND bk.date_ineffective IS NULL);
1847                   else
1848                      UPDATE FA_DEPRN_OVERRIDE
1849                         SET transaction_header_id = px_trans_rec.transaction_header_id
1850                       WHERE book_type_code        = p_asset_hdr_rec.book_type_code
1851                         AND asset_id              = p_asset_hdr_rec.asset_id
1852                         AND used_by               = 'ADJUSTMENT'
1853                         AND status                = 'SELECTED'
1854                         AND transaction_header_id is null;
1855                   end if;
1856 
1857                   fa_std_types.deprn_override_trigger_enabled:= TRUE;
1858                end if;
1859 
1860                --    need to account for the value of l_adjust_type rather than just
1861                --    just the value of the subtype here (see above)
1862                --
1863                -- if (px_trans_rec.transaction_subtype = 'AMORTIZED' and
1864                if (l_adjust_type = 'AMORTIZED' and
1865                    px_asset_fin_rec_new.cost = 0) then
1866                   px_asset_fin_rec_new.rate_adjustment_factor := 1;
1867                end if;
1868 
1869                if ((px_asset_fin_rec_new.formula_factor <> 1 or
1870                     px_asset_fin_rec_new.rate_adjustment_factor <> 1) and
1871                    l_rate_source_rule = 'FORMULA') then
1872                   px_asset_fin_rec_new.old_adjusted_cost := p_asset_fin_rec_old.adjusted_cost;
1873                end if;
1874 
1875             elsif p_asset_type_rec.asset_type='GROUP' and
1876                   nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'CALCULATE' and
1877                   nvl(px_asset_fin_rec_new.member_rollup_flag,'N') = 'Y'
1878             then
1879 
1880               -- The returned adjusted_cost is supported only CCA.
1881 
1882               if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
1883                     (p_event_type             => 'AMORT_ADJ',
1884                      p_asset_fin_rec_new      => px_asset_fin_rec_new,
1885                      p_asset_fin_rec_old      => p_asset_fin_rec_old,
1886                      p_asset_hdr_rec          => p_asset_hdr_rec,
1887                      p_asset_type_rec         => p_asset_type_rec,
1888                      p_asset_deprn_rec        => px_asset_deprn_rec_new,
1889                      p_trans_rec              => px_trans_rec,
1890                      p_period_rec             => p_period_rec,
1891                      p_current_total_rsv      => px_asset_deprn_rec_new.deprn_reserve,
1892                      p_current_rsv            => px_asset_deprn_rec_new.deprn_reserve -
1893                                                  px_asset_deprn_rec_new.bonus_deprn_reserve - nvl(px_asset_deprn_rec_new.impairment_reserve,0),
1894                      p_current_total_ytd      => px_asset_deprn_rec_new.ytd_deprn,
1895                      p_adj_reserve            => p_asset_deprn_rec_adj.deprn_reserve,
1896                      p_mrc_sob_type_code      => p_mrc_sob_type_code,
1897                      p_used_by_adjustment     => 'ADJUSTMENT',
1898                      px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
1899                      px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
1900                      px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
1901                      p_log_level_rec          => p_log_level_rec)
1902               ) then
1903                  raise calc_err;
1904               end if;
1905 
1906             end if; -- Tracking Method is not Allocate for Group Member Asset.
1907 
1908          elsif not (p_inv_trans_rec.invoice_transaction_id is not null and
1909                     nvl(p_asset_fin_rec_adj.cost, 0) = 0) then  -- depreciate flag changed
1910 
1911             if (p_log_level_rec.statement_level) then
1912                fa_debug_pkg.add('calc_fin_info', 'entering',
1913                                  'logic for depreciate flag change', p_log_level_rec => p_log_level_rec);
1914             end if;
1915 
1916             -- Recalculate eofy_reserve
1917             if px_asset_fin_rec_new.depreciate_flag='YES' and
1918                px_asset_deprn_rec_new.ytd_deprn =0
1919             then
1920                px_asset_fin_rec_new.eofy_reserve := px_asset_deprn_rec_new.deprn_reserve;
1921             end if;
1922 
1923             ----------------------------------------------
1924             -- Call Depreciable Basis Rule
1925             -- for depreciate flag adjustment
1926             ----------------------------------------------
1927             if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
1928                     (
1929                      p_event_type             => 'DEPRECIATE_FLAG_ADJ',
1930                      p_asset_fin_rec_new      => px_asset_fin_rec_new,
1931                      p_asset_fin_rec_old      => p_asset_fin_rec_old,
1932                      p_asset_hdr_rec          => p_asset_hdr_rec,
1933                      p_asset_type_rec         => p_asset_type_rec,
1934                      p_asset_deprn_rec        => px_asset_deprn_rec_new,
1935                      p_trans_rec              => px_trans_rec,
1936                      p_period_rec             => p_period_rec,
1937                      p_mrc_sob_type_code      => p_mrc_sob_type_code,
1938                      px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
1939                      px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
1940                      px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
1941                      p_log_level_rec          => p_log_level_rec
1942                     )
1943                  )
1944              then
1945                  raise calc_err;
1946              end if;
1947          else -- BUG# 3615096: 0 cost change from invoice transaction
1948              if (p_log_level_rec.statement_level) then
1949                 fa_debug_pkg.add('calc_fin_info', 'entering',
1950                                   'logic for zero cost invoice changes', p_log_level_rec => p_log_level_rec);
1951              end if;
1952 
1953              px_asset_fin_rec_new := p_asset_fin_rec_old;
1954          end if;              -- change in depreciate flag
1955 
1956       -- R12 conditional logic
1957       -- SLA: since voids are obsolete chaning condition for group
1958 
1959       elsif (px_trans_rec.transaction_type_code = 'ADDITION' or
1960              px_trans_rec.transaction_type_code = 'CIP ADDITION' or
1961              px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
1962              (G_release <> 11 and
1963               px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
1964               p_asset_hdr_rec.period_of_addition = 'Y')) then
1965 
1966         if (p_asset_type_rec.asset_type = 'GROUP') and
1967            (l_deprn_reserve_exists <> 0 or nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0 )then
1968 
1969            /*Bug 8941132: MRC Reclass -No need to call faxama.
1970            if ((px_trans_rec.calling_interface <> 'FAXASSET') and
1971                (px_trans_rec.transaction_key = 'GC')) or */
1972 
1973            if (px_trans_rec.transaction_key in ('MR', 'MS')) then
1974               l_call_bs := TRUE;
1975            else
1976               l_call_bs := FALSE;
1977            end if;
1978 
1979            if not FA_AMORT_PVT.calc_raf_adj_cost
1980                         (p_trans_rec           => px_trans_rec,
1981                          p_asset_hdr_rec       => p_asset_hdr_rec,
1982                          p_asset_desc_rec      => p_asset_desc_rec,
1983                          p_asset_type_rec      => p_asset_type_rec,
1984                          p_asset_fin_rec_old   => p_asset_fin_rec_old,
1985                          px_asset_fin_rec_new  => px_asset_fin_rec_new,
1986                          p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
1987                          p_asset_deprn_rec_new => px_asset_deprn_rec_new,
1988                          p_period_rec          => p_period_rec,
1989                          p_mrc_sob_type_code   => p_mrc_sob_type_code
1990                          , p_log_level_rec => p_log_level_rec) then
1991                     raise calc_err;
1992            end if;
1993 
1994         else
1995            ----------------------------------------------
1996            -- Call Depreciable Basis Rule
1997            -- for Addition
1998            ----------------------------------------------
1999            -- Bug4403330: passing 0 values to p_eofy_recoverable_cost,
2000            -- p_eop_recoverable_cost, p_eofy_salvage_value, and p_eop_salvage_value
2001            -- is necessary to avoid calling GET_EOFY_EOP in deprn basis function because
2002            -- the sql gets old non depreciable value that should be excluded.
2003            if (px_trans_rec.transaction_type_code = 'ADDITION') and
2004               (p_calling_fn = 'fa_cip_pvt.do_cap_rev') then
2005               l_cap_temp_value := 0;
2006            else
2007               l_cap_temp_value := null;
2008            end if;
2009 
2010            if (p_log_level_rec.statement_level) then
2011               fa_debug_pkg.add('calc_fin_info1', 'p_asset_fin_rec_old.deprn_method_code1111111',
2012                                p_asset_fin_rec_old.deprn_method_code, p_log_level_rec);
2013               fa_debug_pkg.add('calc_fin_info1', 'px_asset_fin_rec_new.deprn_method_code1111111',
2014                                px_asset_fin_rec_new.deprn_method_code, p_log_level_rec);
2015            end if;
2016 
2017 ----------------Added by Satish Byreddy as part of calculating Catchup Bug number 6951549
2018            IF px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' OR
2019               p_asset_fin_rec_old.deprn_method_code = 'JP-STL-EXTND' THEN
2020 
2021               if px_trans_rec.calling_interface NOT IN ('FATAXUP','FAMAPT') THEN
2022                  --Bug 8834683 no need to cal catch up when asset with JP-STL-EXTND method code
2023                  --is added with reserve.
2024                  if (nvl(p_asset_deprn_rec_adj.deprn_reserve,0) =  0 )and
2025                     (p_asset_fin_rec_old.date_placed_in_service < p_period_rec.calendar_period_open_date) and
2026                     (p_asset_hdr_rec.period_of_addition = 'Y') and
2027                     (px_trans_rec.transaction_type_code = 'ADDITION') then
2028                     if l_financial_info_changed  then
2029                        -- Bug 8520695
2030                        open  c_check_addn;
2031                        fetch c_check_addn into l_addn_cnt;
2032                        close c_check_addn;
2033 
2034                        -- Prevent call to faxexp if the adj transaction is in POA
2035                        if l_addn_cnt = 0 then
2036                           if not FA_EXP_PVT.faxexp
2037                               (px_trans_rec          => px_trans_rec,
2038                                p_asset_hdr_rec       => p_asset_hdr_rec,
2039                                p_asset_desc_rec      => p_asset_desc_rec,
2040                                p_asset_cat_rec       => p_asset_cat_rec,
2041                                p_asset_type_rec      => p_asset_type_rec,
2042                                p_asset_fin_rec_old   => p_asset_fin_rec_old,
2043                                px_asset_fin_rec_new  => px_asset_fin_rec_new,
2044                                p_asset_deprn_rec     => p_asset_deprn_rec_old,
2045                                p_period_rec          => p_period_rec,
2046                                p_mrc_sob_type_code   => p_mrc_sob_type_code,
2047                                p_running_mode        => fa_std_types.FA_DPR_NORMAL,
2048                                p_used_by_revaluation => null,
2049                                x_deprn_exp           => l_deprn_exp,
2050                                x_bonus_deprn_exp     => l_bonus_deprn_exp,
2051                                x_impairment_exp      => l_impairment_exp,
2052                                x_ann_adj_deprn_exp   => l_ann_adj_deprn_exp,
2053                                x_ann_adj_bonus_deprn_exp => l_ann_adj_bonus_deprn_exp,
2054                                p_log_level_rec => p_log_level_rec) then
2055                               raise calc_err;
2056                           end if;
2057                        end if;  -- End Bug 8520695
2058                     end if; --disabled_flag changed.
2059                  end if;--deprn resereve = 0
2060               end if;
2061            end if; -- px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' OR
2062 
2063 
2064 ----------------End OF addition by Satish Byreddy as part of calculating Catchup Bug number     6951549
2065 
2066           if px_trans_rec.calling_interface <> 'FAEXDEPR' THEN
2067            if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
2068                        (
2069                         p_event_type             => 'ADDITION',
2070                         p_asset_fin_rec_new      => px_asset_fin_rec_new,
2071                         p_asset_fin_rec_old      => p_asset_fin_rec_old,
2072                         p_asset_hdr_rec          => p_asset_hdr_rec,
2073                         p_asset_type_rec         => p_asset_type_rec,
2074                         p_asset_deprn_rec        => px_asset_deprn_rec_new,
2075                         p_trans_rec              => px_trans_rec,
2076                         p_period_rec             => p_period_rec,
2077                         p_eofy_recoverable_cost  => l_cap_temp_value,
2078                         p_eop_recoverable_cost   => l_cap_temp_value,
2079                         p_eofy_salvage_value     => l_cap_temp_value,
2080                         p_eop_salvage_value      => l_cap_temp_value,
2081                         p_mrc_sob_type_code      => p_mrc_sob_type_code,
2082                         px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
2083                         px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
2084                         px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
2085                         p_log_level_rec          => p_log_level_rec
2086                        )
2087                     )
2088            then
2089                     raise calc_err;
2090            end if;
2091          end if;
2092          if (px_trans_rec.transaction_type_code = 'ADDITION') then
2093             IF px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' OR p_asset_fin_rec_old.deprn_method_code = 'JP-STL-EXTND'  THEN
2094                    if (p_log_level_rec.statement_level) then
2095                                fa_debug_pkg.add('calc_fin_info1',
2096                                      'x_deprn_exp.deprn_reserve22222',
2097                                       l_deprn_exp, p_log_level_rec => p_log_level_rec);
2098                    end if;
2099             px_asset_deprn_rec_new.deprn_reserve := nvl(px_asset_deprn_rec_new.deprn_reserve, 0) + nvl(l_deprn_exp, 0);
2100             px_asset_deprn_rec_new.ytd_deprn     := nvl(px_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_deprn_exp, 0);
2101 
2102           end if;
2103          end if;
2104 
2105         end if;
2106 
2107       end if;
2108 
2109 
2110 
2111       --
2112       -- Following faxama will return catch-up for group.
2113       -- This is the one will use FA_BOOKS_SUMMARY table to calculate
2114       -- and maintain FA_BOOKS_SUMMARY.
2115       --
2116       if (p_asset_type_rec.asset_type = 'GROUP') and
2117             (l_call_bs) then
2118 
2119          if -- (p_group_reclass_options_rec.group_reclass_type = 'CALC') and
2120             (p_asset_type_rec.asset_type = 'GROUP') and
2121             (p_reclass_src_dest = 'DESTINATION') then
2122             l_asset_deprn_rec_adj.deprn_reserve := nvl(l_asset_deprn_rec_adj.deprn_reserve, 0) +
2123                                                    p_group_reclass_options_rec.reserve_amount;
2124          else
2125             l_asset_deprn_rec_adj := p_asset_deprn_rec_adj;
2126          end if;
2127 
2128          if (not FA_AMORT_PVT.faxama(
2129                          px_trans_rec            => px_trans_rec,
2130                          p_asset_hdr_rec         => p_asset_hdr_rec,
2131                          p_asset_desc_rec        => p_asset_desc_rec,
2132                          p_asset_cat_rec         => p_asset_cat_rec,
2133                          p_asset_type_rec        => p_asset_type_rec,
2134                          p_asset_fin_rec_old     => p_asset_fin_rec_old,
2135                          p_asset_fin_rec_adj     => p_asset_fin_rec_adj,
2136                          px_asset_fin_rec_new    => px_asset_fin_rec_new,
2137                          p_asset_deprn_rec       => p_asset_deprn_rec_old,
2138                          p_asset_deprn_rec_adj   => l_asset_deprn_rec_adj,
2139                          p_period_rec            => p_period_rec,
2140                          p_mrc_sob_type_code     => p_mrc_sob_type_code,
2141                          p_running_mode          => fa_std_types.FA_DPR_NORMAL,
2142                          p_used_by_revaluation   => null,
2143                          p_reclassed_asset_id    => p_reclassed_asset_id,
2144                          p_reclass_src_dest      => p_reclass_src_dest,
2145                          p_reclassed_asset_dpis  => p_reclassed_asset_dpis,
2146                          p_update_books_summary  => TRUE,
2147                          p_proceeds_of_sale      => 0,
2148                          p_cost_of_removal       => 0,
2149                          x_deprn_exp             => l_deprn_exp,
2150                          x_bonus_deprn_exp       => l_bonus_deprn_exp,
2151                          x_impairment_exp        => l_impairment_exp,
2152                          x_deprn_rsv             => l_deprn_rsv, p_log_level_rec => p_log_level_rec)) then
2153 
2154             if (p_log_level_rec.statement_level) then
2155                fa_debug_pkg.add('calc_fin_info', 'calling FA_AMORT_PVT.faxama', 'FAILED',  p_log_level_rec => p_log_level_rec);
2156             end if;
2157 
2158             raise calc_err;
2159 
2160          end if; -- (not FA_AMORT_PVT.faxama
2161 
2162          if (p_group_reclass_options_rec.group_reclass_type = 'CALC') and
2163             (p_asset_type_rec.asset_type = 'GROUP') and
2164             (p_reclass_src_dest = 'SOURCE') then
2165             p_group_reclass_options_rec.reserve_amount := -1 * l_deprn_rsv;
2166          end if;
2167 
2168       end if; -- (p_asset_type_rec.asset_type = 'GROUP')
2169 
2170 
2171       if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
2172           px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT') then
2173 
2174          -- get the total amounted cleared for payables cost
2175          -- from the invoice engine (assumes its been flushed)
2176          if (p_mrc_sob_type_code <> 'R') then
2177             select nvl(sum(decode(debit_credit_flag,
2178                                   'CR', adjustment_amount,
2179                                   adjustment_amount * -1)), 0)
2180               into l_clearing
2181               from fa_adjustments
2182              where asset_id = p_asset_hdr_rec.asset_id
2183                and book_type_code = p_asset_hdr_rec.book_type_code
2184                and period_counter_created = p_period_rec.period_counter
2185                and transaction_header_id = px_trans_rec.transaction_header_id
2186                and adjustment_type = 'COST CLEARING';
2187          else
2188             select nvl(sum(decode(debit_credit_flag,
2189                                   'CR', adjustment_amount,
2190                                   adjustment_amount * -1)), 0)
2191               into l_clearing
2192               from fa_mc_adjustments
2193              where asset_id = p_asset_hdr_rec.asset_id
2194                and book_type_code = p_asset_hdr_rec.book_type_code
2195                and period_counter_created = p_period_rec.period_counter
2196                and transaction_header_id = px_trans_rec.transaction_header_id
2197                and adjustment_type = 'COST CLEARING'
2198                and set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
2199          end if;
2200       end if;
2201 
2202       /* Bug#9961363: Checking validation even for expensed trx
2203       -- Bug#9161943: Checking validation after recalculating new adjusted reserve
2204       -- Bug#7172602: Validate Salvage value change
2205       -- Bug 9935595: No need to validate salvage value for extended assets
2206          (either already extended or during availing extended state)
2207       -- Bug#9957314: Restricting validation when deprn_limit is defined for asset */
2208 
2209       if (p_asset_type_rec.asset_type <> 'GROUP' and p_asset_fin_rec_old.group_asset_id is null and
2210           px_asset_fin_rec_new.group_asset_id is null)  AND
2211          (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') <> 'Y') AND
2212          (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') = nvl(p_asset_fin_rec_adj.extended_deprn_flag, '-1')) AND
2213           p_asset_fin_rec_old.allowed_deprn_limit_amount is null AND
2214           px_asset_fin_rec_new.allowed_deprn_limit_amount is null
2215           then
2216 
2217           if px_trans_rec.amortization_start_date is not null then
2218             l_nbv_for_sal := nvl(px_asset_fin_rec_new.cost,0) -
2219                              nvl(px_asset_deprn_rec_new.deprn_reserve,0) -
2220                              nvl(px_asset_deprn_rec_new.impairment_reserve,0);
2221           else
2222             l_nbv_for_sal := nvl(px_asset_fin_rec_new.cost,0);
2223           end if;
2224 
2225          if not FA_ASSET_VAL_PVT.validate_salvage_value
2226                  ( p_salvage_value => px_asset_fin_rec_new.salvage_value,
2227                    p_nbv           => l_nbv_for_sal,
2228                    p_calling_fn    => l_calling_fn,
2229                    p_log_level_rec => p_log_level_rec) then
2230                raise calc_err;
2231          end if;
2232       end if;
2233 
2234       -- process groups here to for the catchup but not for clearing
2235 
2236       -- R12 conditional handling
2237       -- SLA: now insert catchup for capitalization
2238 
2239       if (px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
2240           px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT' or
2241           px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' or
2242           px_trans_rec.transaction_type_code = 'GROUP ADDITION'  or
2243           (px_trans_rec.transaction_type_code = 'ADDITION' and
2244            p_asset_fin_rec_old.rate_adjustment_factor is not null and
2245            G_release <> 11 )) then
2246 
2247          if (px_trans_rec.transaction_type_code = 'GROUP ADDITION' or
2248              (G_release <> 11 and
2249               (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
2250                p_asset_hdr_rec.period_of_addition = 'Y') or
2251               (px_trans_rec.transaction_type_code = 'ADJUSTMENT' and
2252                p_asset_hdr_rec.period_of_addition = 'Y'
2253                /* Bug 13620748 we need to add exp to deprn reserve if their is a reserve adj in POA
2254                (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0 and
2255                 nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) = 0 )*/
2256                 ))) then
2257                 -- Bug 14342757 we need to make ure that we add expense only
2258                 -- if there is an amoritzed change to reserve in POA
2259                 IF  (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) = 0 and
2260                      nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) = 0 )  OR
2261                      ((nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) <> 0 and
2262                      nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) <> 0 ) AND
2263                      l_call_faxama AND
2264                      (p_period_rec.calendar_period_open_date >
2265                                          px_trans_rec.amortization_start_date)) THEN
2266 
2267                   IF NOT (NVL(p_asset_deprn_rec_adj.allow_taxup_flag,FALSE)) THEN
2268                        px_asset_deprn_rec_new.deprn_reserve := nvl(px_asset_deprn_rec_new.deprn_reserve, 0) + nvl(l_deprn_exp, 0);
2269                        px_asset_deprn_rec_new.ytd_deprn     := nvl(px_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_deprn_exp, 0);
2270                   ELSE
2271 
2272                        IF (p_asset_deprn_rec_adj.deprn_reserve <> 0) THEN
2273                           px_asset_deprn_rec_new.deprn_reserve := nvl(px_asset_deprn_rec_new.deprn_reserve, 0) + nvl(l_deprn_exp, 0);
2274                        END IF;
2275 
2276                        IF (p_asset_deprn_rec_adj.ytd_deprn <> 0) THEN
2277                           px_asset_deprn_rec_new.ytd_deprn     := nvl(px_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_deprn_exp, 0);
2278                        END IF;
2279 
2280                   END IF;
2281 
2282             -- Bug 8533933
2283             px_asset_deprn_rec_new.bonus_ytd_deprn     := nvl(px_asset_deprn_rec_new.bonus_ytd_deprn, 0) + nvl(l_bonus_deprn_exp, 0);
2284             px_asset_deprn_rec_new.bonus_deprn_reserve := nvl(px_asset_deprn_rec_new.bonus_deprn_reserve, 0) + nvl(l_bonus_deprn_exp, 0);
2285             -- End Bug 8533933
2286 	    END IF;
2287          end if;
2288          --bug 8765988/8649223 ( Adding this validation to prevent -ve NBV in POA via adjustement)
2289          if (p_asset_hdr_rec.period_of_addition = 'Y' and px_trans_rec.transaction_type_code = 'ADJUSTMENT' and
2290              nvl(px_asset_fin_rec_new.ALLOCATE_TO_FULLY_RSV_FLAG,'N') = 'N'
2291             ) then
2292             if not fa_asset_val_pvt.validate_adj_rec_cost
2293                  (p_adjusted_recoverable_cost => px_asset_fin_rec_new.adjusted_recoverable_cost,
2294                   p_deprn_reserve             => px_asset_deprn_rec_new.deprn_reserve,
2295                   p_calling_fn                => l_calling_fn,
2296                   p_log_level_rec             => p_log_level_rec
2297                  ) then
2298                raise calc_err;
2299             end if;
2300 
2301             /*Bug#9488077/9130653 - added following condition */
2302             if (p_asset_deprn_rec_adj.deprn_reserve <> 0 OR p_asset_deprn_rec_adj.ytd_deprn <> 0) then
2303                --bug 8785230 Missing Validation for POA and +ve deprn reserve
2304                /*Bug#9682863 - Modified the parameters - instead of individual value passing records. */
2305                if not fa_asset_val_pvt.validate_ytd_reserve
2306                  (p_asset_hdr_rec             => p_asset_hdr_rec,
2307                   p_asset_type_rec            => p_asset_type_rec,
2308                   p_asset_fin_rec_new         => px_asset_fin_rec_new,
2309                   p_asset_deprn_rec_new       => px_asset_deprn_rec_new,
2310                   p_period_rec                => p_period_rec,
2311                   p_asset_deprn_rec_old       => p_asset_deprn_rec_old,    /*Fix for bug 8790562 */
2312                   p_calling_fn                => l_calling_fn,
2313                   p_log_level_rec             => p_log_level_rec) then
2314 
2315                  raise calc_err;
2316                end if;
2317             end if;
2318          end if;
2319 
2320 
2321 
2322          -- insure we do not post any catchup for group member
2323          if (px_asset_fin_rec_new.group_asset_id is not null) and
2324             nvl(px_asset_fin_rec_new.tracking_method,'OTHER') <> 'CALCULATE' then
2325             l_deprn_exp       := 0;
2326             l_bonus_deprn_exp := 0;
2327             l_impairment_exp  := 0;
2328          end if;
2329 
2330          if (p_log_level_rec.statement_level) then
2331             fa_debug_pkg.add('calx_fin_info', 'calling', 'faxiat', p_log_level_rec => p_log_level_rec);
2332             fa_debug_pkg.add('calc_fin_info', 'after user exits, adj_cost',
2333                               px_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
2334          end if;
2335 
2336          -- insert all the amounts
2337          -- HH only if this is not a disabled_flag transaction
2338 
2339          -- R12 conditional handling
2340          -- SLA do not insert cost/clearing for capitalization
2341          if (px_trans_rec.transaction_type_code = 'ADDITION' and
2342              (p_asset_fin_rec_old.rate_adjustment_factor is not null or
2343               G_release = 11)) then
2344             l_cost_to_insert     := 0;
2345             l_clearing_to_insert := 0;
2346          else
2347             l_cost_to_insert     := p_asset_fin_rec_adj.cost;
2348             l_clearing_to_insert := p_asset_fin_rec_adj.cost - l_clearing;
2349          end if;
2350 
2351          if ((G_release <> 11 or
2352               px_trans_rec.transaction_type_code not in
2353                 ('ADDITION', 'CIP ADDITION')) and
2354              l_financial_info_changed) then
2355             if not FA_INS_ADJ_PVT.faxiat
2356                      (p_trans_rec       => px_trans_rec,
2357                       p_asset_hdr_rec   => p_asset_hdr_rec,
2358                       p_asset_desc_rec  => p_asset_desc_rec,
2359                       p_asset_cat_rec   => p_asset_cat_rec,
2360                       p_asset_type_rec  => p_asset_type_rec,
2361                       p_cost            => l_cost_to_insert,
2362                       p_clearing        => l_clearing_to_insert,
2363                       p_deprn_expense   => l_deprn_exp + NVL (l_deprn_exp_temp,0), --Bug 13620748
2364                       p_bonus_expense   => l_bonus_deprn_exp,
2365                       p_impair_expense  => l_impairment_exp,
2366                       p_ann_adj_amt     => l_ann_adj_deprn_exp, --0
2367                       p_mrc_sob_type_code => p_mrc_sob_type_code,
2368                       p_calling_fn      => l_calling_fn
2369                      , p_log_level_rec => p_log_level_rec) then raise calc_err;
2370             end if;
2371          end if; --no change to disabled_flag
2372 
2373          -- ENERGY and allocate in general
2374          -- Dupulicate group FA_ADJUSTMENTS entries on member asset
2375          --
2376          if (p_log_level_rec.statement_level) then
2377             fa_debug_pkg.add(l_calling_fn, 'l_deprn_exp', l_deprn_exp, p_log_level_rec => p_log_level_rec);
2378             fa_debug_pkg.add(l_calling_fn, 'l_bonus_deprn_exp', l_bonus_deprn_exp, p_log_level_rec => p_log_level_rec);
2379             fa_debug_pkg.add(l_calling_fn, 'p_asset_type_rec.asset_type', p_asset_type_rec.asset_type, p_log_level_rec => p_log_level_rec);
2380             fa_debug_pkg.add(l_calling_fn, 'px_trans_rec.member_transaction_header_id',
2381                              px_trans_rec.member_transaction_header_id, p_log_level_rec => p_log_level_rec);
2382             fa_debug_pkg.add(l_calling_fn, 'l_disabled_flag_changed',(not l_financial_info_changed), p_log_level_rec => p_log_level_rec);
2383          end if;
2384 
2385          -- Bug7008015: Relocated the condition about amount so that even if there is no expense
2386          -- at group level, process go thorugh following to determine if there is member reserve
2387          -- to backed out as expense.
2388          -- Bug7140693: Removed reinstatement from following condition
2389          if  (p_asset_type_rec.asset_type = 'GROUP') and
2390              (px_trans_rec.member_transaction_header_id is not null) and
2391              (l_financial_info_changed) and
2392              (nvl(px_asset_fin_rec_new.tracking_method,'NO TRACK') = 'ALLOCATE') and
2393              (px_trans_rec.transaction_key <> 'MR')  then
2394 
2395             OPEN c_get_member_trx;
2396             FETCH c_get_member_trx INTO l_asset_hdr_rec.asset_id
2397                                       , l_trans_rec.transaction_header_id
2398                                       , l_trans_rec.transaction_type_code
2399                                       , l_trans_rec.transaction_date_entered
2400                                       , l_trans_rec.transaction_name
2401                                       , l_trans_rec.source_transaction_header_id
2402                                       , l_trans_rec.mass_reference_id
2403                                       , l_trans_rec.transaction_subtype
2404                                       , l_trans_rec.transaction_key
2405                                       , l_trans_rec.amortization_start_date
2406                                       , l_trans_rec.calling_interface
2407                                       , l_trans_rec.mass_transaction_id
2408                                       , l_trans_rec.member_transaction_header_id
2409                                       , l_trans_rec.trx_reference_id
2410                                       , l_trans_rec.who_info.last_update_date
2411                                       , l_trans_rec.who_info.last_updated_by
2412                                       , l_trans_rec.who_info.last_update_login;
2413             CLOSE c_get_member_trx;
2414 
2415             l_trans_rec.who_info.created_by := l_trans_rec.who_info.last_updated_by;
2416             l_trans_rec.who_info.creation_date := l_trans_rec.who_info.last_update_date;
2417 
2418             l_asset_hdr_rec.book_type_code := p_asset_hdr_rec.book_type_code;
2419             l_asset_hdr_rec.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
2420 
2421             -- load the old structs
2422             if not FA_UTIL_PVT.get_asset_fin_rec
2423                     (p_asset_hdr_rec         => l_asset_hdr_rec,
2424                      px_asset_fin_rec        => l_asset_fin_rec,
2425                      p_transaction_header_id => NULL,
2426                      p_mrc_sob_type_code     => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
2427                raise calc_err;
2428             end if;
2429 
2430             if not FA_UTIL_PVT.get_asset_desc_rec
2431                     (p_asset_hdr_rec         => l_asset_hdr_rec,
2432                      px_asset_desc_rec       => l_asset_desc_rec, p_log_level_rec => p_log_level_rec) then
2433                raise calc_err;
2434             end if;
2435 
2436             if not FA_UTIL_PVT.get_asset_cat_rec
2437                     (p_asset_hdr_rec         => l_asset_hdr_rec,
2438                      px_asset_cat_rec        => l_asset_cat_rec,
2439                      p_date_effective        => null, p_log_level_rec => p_log_level_rec) then
2440                raise calc_err;
2441             end if;
2442 
2443             if not FA_UTIL_PVT.get_asset_type_rec
2444                     (p_asset_hdr_rec         => l_asset_hdr_rec,
2445                      px_asset_type_rec       => l_asset_type_rec,
2446                      p_date_effective        => null, p_log_level_rec => p_log_level_rec) then
2447                raise calc_err;
2448             end if;
2449 
2450             --Bug7008015: Need member reserve
2451             if not FA_UTIL_PVT.get_asset_deprn_rec
2452                    (p_asset_hdr_rec         => l_asset_hdr_rec ,
2453                     px_asset_deprn_rec      => l_asset_deprn_rec,
2454                     p_period_counter        => NULL,
2455                     p_mrc_sob_type_code     => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
2456                raise calc_err;
2457             end if;
2458 
2459             -- Bug7008015
2460             -- Fully reserve member asset if
2461             -- - l_adjust_type is AMORTIZED: If this is expensed, this won't be necessary as it takes care this
2462             -- - This is a member asset.  - premature to apply this for all assets
2463             -- - Tracking method is allocate - premature to apply this for all assets
2464             -- - This is not group reclass
2465             -- - There is a change in cost
2466             -- - New reserve is more than the adj rec cost or adj rec cost is 0 while there is rsv balance
2467             -- If all above condition is met, asset will be fully reserve by expensing remaining nbv (adj rec cost - rsv)
2468             if (p_log_level_rec.statement_level) then
2469                fa_debug_pkg.add(l_calling_fn, 'l_adjust_type', l_adjust_type, p_log_level_rec => p_log_level_rec);
2470                fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.group_asset_id', px_asset_fin_rec_new.group_asset_id, p_log_level_rec => p_log_level_rec);
2471                fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.tracking_method', px_asset_fin_rec_new.tracking_method, p_log_level_rec => p_log_level_rec);
2472                fa_debug_pkg.add(l_calling_fn, 'px_trans_rec.transaction_key', px_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
2473                fa_debug_pkg.add(l_calling_fn, 'p_asset_fin_rec_adj.cost', p_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
2474                fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
2475                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec.adjusted_recoverable_cost', l_asset_fin_rec.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
2476                fa_debug_pkg.add(l_calling_fn, 'l_deprn_exp', l_deprn_exp, p_log_level_rec => p_log_level_rec);
2477             end if;
2478 
2479             if l_adjust_type = 'AMORTIZED' and
2480                (not (px_trans_rec.calling_interface = 'FAXASSET' and
2481                      px_asset_fin_rec_new.adjustment_required_status = 'GADJ')) and
2482                l_asset_fin_rec.group_asset_id is not null and
2483                l_asset_fin_rec.tracking_method = 'ALLOCATE' and
2484                px_trans_rec.transaction_key <> 'GC' and
2485                nvl(px_asset_fin_rec_new.ALLOCATE_TO_FULLY_RSV_FLAG,'N') = 'N' and
2486                nvl(p_asset_fin_rec_adj.cost , 0) <> 0 and
2487                ( ( ( sign(nvl(l_asset_deprn_rec.deprn_reserve, 0) + nvl(l_deprn_exp, 0)) =
2488                                                          sign(l_asset_fin_rec.adjusted_recoverable_cost) ) and
2489                       ( abs(nvl(l_asset_deprn_rec.deprn_reserve, 0) + nvl(l_deprn_exp, 0)) >
2490                                                          abs(l_asset_fin_rec.adjusted_recoverable_cost)   )  ) or
2491                  (l_asset_fin_rec.adjusted_recoverable_cost = 0 and l_asset_deprn_rec.deprn_reserve <> 0)     ) then
2492                l_deprn_exp := l_asset_fin_rec.adjusted_recoverable_cost - nvl(l_asset_deprn_rec.deprn_reserve, 0);
2493             end if;
2494 
2495             -- Bug7008015: call faxiat only if there is expense to back out for member assets
2496             if (nvl(l_deprn_exp, 0) <> 0 or nvl(l_bonus_deprn_exp, 0) <> 0 or nvl(l_impairment_exp, 0) <> 0) then
2497                if not FA_INS_ADJ_PVT.faxiat
2498                      (p_trans_rec       => l_trans_rec,
2499                       p_asset_hdr_rec   => l_asset_hdr_rec,
2500                       p_asset_desc_rec  => l_asset_desc_rec,
2501                       p_asset_cat_rec   => l_asset_cat_rec,
2502                       p_asset_type_rec  => l_asset_type_rec,
2503                       p_cost            => 0,
2504                       p_clearing        => 0,
2505                       p_deprn_expense   => l_deprn_exp,
2506                       p_bonus_expense   => l_bonus_deprn_exp,
2507                       p_impair_expense  => l_impairment_exp,
2508                       p_ann_adj_amt     => 0,
2509                       p_track_member_flag => 'Y',
2510                       p_mrc_sob_type_code => p_mrc_sob_type_code,
2511                       p_calling_fn      => l_calling_fn, p_log_level_rec => p_log_level_rec) then
2512                   raise calc_err;
2513                end if;
2514             end if;
2515 
2516          end if;
2517          -- End of ENERGY Change
2518 
2519          -- When Group Adjustment is processed for the group whose tracking
2520          -- method is allocate but the transaction kicked at group level,
2521          -- expense must be allocated to members.
2522          -- HH assuming this is not a change to disabled_flag
2523 
2524          -- R12 conditional logic
2525          -- SLA voids are obsolete so group adjustments happen in period of add
2526          -- why are group adjustments i period of add not processed here
2527 
2528          if (G_release = 11 or
2529              p_asset_hdr_rec.period_of_addition <> 'Y') and
2530             px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
2531             px_trans_rec.member_transaction_header_id is null and
2532             nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' and
2533             l_financial_info_changed then
2534 
2535            -- Call TRACK_ASSETS
2536            l_rc := fa_track_member_pvt.track_assets
2537                      (P_book_type_code             => p_asset_hdr_rec.book_type_code,
2538                       P_group_asset_id             => p_asset_hdr_rec.asset_id,
2539                       P_period_counter             => p_period_rec.period_num,
2540                       P_fiscal_year                => p_period_rec.fiscal_year,
2541                       P_group_deprn_basis          => fa_cache_pkg.fazccmt_record.deprn_basis_rule,
2542                       P_group_exclude_salvage      => fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag,
2543                       P_group_bonus_rule           => px_asset_fin_rec_new.bonus_rule,
2544                       P_group_deprn_amount         => l_deprn_exp,
2545                       P_group_bonus_amount         => l_bonus_deprn_exp,
2546                       P_tracking_method            => px_asset_fin_rec_new.tracking_method,
2547                       P_allocate_to_fully_ret_flag => px_asset_fin_rec_new.allocate_to_fully_ret_flag,
2548                       P_allocate_to_fully_rsv_flag => px_asset_fin_rec_new.allocate_to_fully_rsv_flag,
2549                       P_excess_allocation_option   => px_asset_fin_rec_new.excess_allocation_option,
2550                       P_depreciation_option        => px_asset_fin_rec_new.depreciation_option,
2551                       P_member_rollup_flag         => px_asset_fin_rec_new.member_rollup_flag,
2552                       P_group_level_override       => l_group_level_override,
2553                       P_period_of_addition         => p_asset_hdr_rec.period_of_addition,
2554                       P_transaction_date_entered   =>
2555                       px_trans_rec.transaction_date_entered, --HH: Added for 6782497
2556                       P_mode                       => 'GROUP ADJUSTMENT',
2557                       P_mrc_sob_type_code          => p_mrc_sob_type_code,
2558                       P_set_of_books_id            => p_asset_hdr_rec.set_of_books_id,
2559                       X_new_deprn_amount           => x_new_deprn_amount,
2560                       X_new_bonus_amount           => x_new_bonus_amount,  p_log_level_rec => p_log_level_rec);
2561            if l_rc <> 0  then
2562              raise calc_err;
2563            end if;
2564          end if;
2565 
2566 
2567       end if;
2568 
2569    end if;
2570    return true;
2571 
2572 EXCEPTION
2573 
2574    when calc_err then
2575       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2576       return false;
2577 
2578    when others then
2579       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2580       return false;
2581 
2582 END calc_fin_info;
2583 
2584 
2585 FUNCTION calc_new_amounts
2586    (px_trans_rec              IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
2587     p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
2588     p_asset_desc_rec          IN     FA_API_TYPES.asset_desc_rec_type,
2589     p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
2590     p_asset_cat_rec           IN     FA_API_TYPES.asset_cat_rec_type,
2591     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
2592     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
2593     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
2594     p_asset_deprn_rec_old     IN     FA_API_TYPES.asset_deprn_rec_type,
2595     p_asset_deprn_rec_adj     IN     FA_API_TYPES.asset_deprn_rec_type,
2596     px_asset_deprn_rec_new    IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
2597     p_mrc_sob_type_code       IN     VARCHAR2
2598    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
2599 
2600    l_reval_ceiling_adj NUMBER; -- BUG 2620221
2601 
2602    l_calling_fn     VARCHAR2(40) := 'fa_asset_calc_pvt.calc_new_amounts';
2603    calc_err         EXCEPTION;
2604 
2605 BEGIN
2606 
2607 
2608    --  This procedure basically sets all new info by deriving it from the old and adjustment structures.
2609    --  For additions, all will end up coming from the adj struct.
2610    --
2611    --  Different values can be intentionally nulled out / removed, but most can not...
2612    --  The depreciation related info, including method, life, short tax, bonus, etc will all
2613    --  be addressed by the validate_deprn_info function
2614 
2615    -- Set all non-calculated and non-method info
2616 
2617    -- these values can be nulled out intentionally so we use
2618    -- G_MISS values for defaults - ceiling hand group have been removed
2619    -- and merged in the bonus area becuase of the impacts of
2620    -- defaulting for additions
2621 
2622    FA_UTIL_PVT.load_num_value
2623        (p_num_old  => p_asset_fin_rec_old.itc_amount_id,
2624         p_num_adj  => p_asset_fin_rec_adj.itc_amount_id,
2625         x_num_new  => px_asset_fin_rec_new.itc_amount_id, p_log_level_rec => p_log_level_rec);
2626 
2627    -- added for group enhancements
2628 
2629    FA_UTIL_PVT.load_num_value
2630        (p_num_old  => p_asset_fin_rec_old.super_group_id,
2631         p_num_adj  => p_asset_fin_rec_adj.super_group_id,
2632         x_num_new  => px_asset_fin_rec_new.super_group_id, p_log_level_rec => p_log_level_rec);
2633 
2634    FA_UTIL_PVT.load_num_value
2635        (p_num_old  => p_asset_fin_rec_old.cash_generating_unit_id,
2636         p_num_adj  => p_asset_fin_rec_adj.cash_generating_unit_id,
2637         x_num_new  => px_asset_fin_rec_new.cash_generating_unit_id, p_log_level_rec => p_log_level_rec);
2638 
2639    -- moved dirivation of the salvage and limit types back down to their respective functions
2640 
2641    -- these values must be populated - null in adjust means they must be set to old values
2642 
2643    px_asset_fin_rec_new.date_placed_in_service    := nvl(p_asset_fin_rec_adj.date_placed_in_service,
2644                                                            p_asset_fin_rec_old.date_placed_in_service);
2645 
2646    -- amounts that may increase to adjustment
2647    px_asset_fin_rec_new.cost                      := nvl(p_asset_fin_rec_adj.cost, 0) +
2648                                                        nvl(p_asset_fin_rec_old.cost, 0);
2649 
2650    if (p_asset_type_rec.asset_type = 'CIP' or
2651        p_asset_type_rec.asset_type = 'GROUP') then
2652       px_asset_fin_rec_new.cip_cost               := nvl(p_asset_fin_rec_adj.cip_cost, 0) +
2653                                                        nvl(p_asset_fin_rec_old.cip_cost, 0);
2654    else
2655       px_asset_fin_rec_new.cip_cost               := 0;
2656    end if;
2657 
2658    px_asset_fin_rec_new.production_capacity       := nvl(p_asset_fin_rec_adj.production_capacity, 0) +
2659                                                        nvl(p_asset_fin_rec_old.production_capacity, 0);
2660    px_asset_fin_rec_new.fully_rsvd_revals_counter := nvl(p_asset_fin_rec_adj.fully_rsvd_revals_counter, 0) +
2661                                                        nvl(p_asset_fin_rec_old.fully_rsvd_revals_counter, 0);
2662    px_asset_fin_rec_new.reval_amortization_basis  := nvl(p_asset_fin_rec_adj.reval_amortization_basis, 0) +
2663                                                        nvl(p_asset_fin_rec_old.reval_amortization_basis, 0);
2664 
2665    -- Bug 6795070: insert into fa_deprn_summary is based on
2666    -- px_asset_deprn_rec_new
2667    px_asset_deprn_rec_new.reval_amortization_basis  := nvl(p_asset_deprn_rec_adj.reval_amortization_basis, 0) +
2668                                                        nvl(p_asset_deprn_rec_old.reval_amortization_basis, 0);
2669 
2670    -- Commenting this for the bug 2620221
2671    /*
2672    if (p_asset_fin_rec_old.reval_ceiling is null and
2673        p_asset_fin_rec_adj.reval_ceiling is null) then
2674        px_asset_fin_rec_new.reval_ceiling         := null;
2675    else
2676        px_asset_fin_rec_new.reval_ceiling         := nvl(p_asset_fin_rec_adj.reval_ceiling, 0) +
2677                                                        nvl(p_asset_fin_rec_old.reval_ceiling, 0);
2678    end if;
2679    */
2680 
2681 
2682    -- Adding this for the BUG 2620221
2683    -- If the value of  p_asset_fin_rec_adj.reval_ceiling is FND_API.G_MISS_NUM then make it NULL
2684    -- And after this calculate the value of New Reval Ceiling differently when the Adjusted Reval
2685    -- Ceiling is NULL.
2686    if (p_asset_fin_rec_adj.reval_ceiling = FND_API.G_MISS_NUM) then
2687        l_reval_ceiling_adj := null;
2688    else
2689        l_reval_ceiling_adj := p_asset_fin_rec_adj.reval_ceiling;
2690    end if;
2691 
2692    if (l_reval_ceiling_adj is NULL) then
2693        px_asset_fin_rec_new.reval_ceiling := NULL;
2694    else
2695        px_asset_fin_rec_new.reval_ceiling := nvl(l_reval_ceiling_adj, 0) +
2696                                              nvl(p_asset_fin_rec_old.reval_ceiling, 0);
2697    end if;
2698 
2699    px_asset_fin_rec_new.unrevalued_cost           := nvl(p_asset_fin_rec_adj.unrevalued_cost,
2700                                                            nvl(p_asset_fin_rec_adj.cost, 0)) +
2701                                                        nvl(p_asset_fin_rec_old.unrevalued_cost,
2702                                                            nvl(p_asset_fin_rec_old.cost, 0));
2703    px_asset_fin_rec_new.cip_cost                  := nvl(p_asset_fin_rec_adj.cip_cost, 0) +
2704                                                        nvl(p_asset_fin_rec_old.cip_cost, 0);
2705 
2706 
2707    -- SLA Uptake
2708    -- keeping this for now, but it may need to change
2709    -- intention is to allow the new amounts to be calculated,
2710    -- but insert the ADJ via faxiat
2711 
2712 
2713    if (p_asset_hdr_rec.period_of_addition = 'Y') then
2714 
2715       if px_trans_rec.transaction_type_code = 'ADDITION'  /*Bug# - 9212314 */
2716       or px_trans_rec.transaction_type_code = 'CIP ADDITION' then /*Bug# - 10329295 */
2717          px_asset_fin_rec_new.original_cost             := nvl(p_asset_fin_rec_adj.original_cost,
2718                                                               nvl(p_asset_fin_rec_adj.cost, 0)) +
2719                                                           nvl(p_asset_fin_rec_old.original_cost,
2720                                                               nvl(p_asset_fin_rec_old.cost, 0));
2721       else
2722          px_asset_fin_rec_new.original_cost             := nvl(p_asset_fin_rec_old.original_cost,0);
2723       end if;
2724       px_asset_deprn_rec_new.deprn_amount            := 0;
2725       px_asset_deprn_rec_new.deprn_reserve           := nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) +
2726                                                           nvl(p_asset_deprn_rec_old.deprn_reserve, 0);
2727       px_asset_deprn_rec_new.ytd_deprn               := nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) +
2728                                                           nvl(p_asset_deprn_rec_old.ytd_deprn, 0);
2729       px_asset_deprn_rec_new.reval_deprn_reserve     := nvl(p_asset_deprn_rec_adj.reval_deprn_reserve, 0) +
2730                                                           nvl(p_asset_deprn_rec_old.reval_deprn_reserve, 0);
2731       px_asset_deprn_rec_new.reval_ytd_deprn         := nvl(p_asset_deprn_rec_adj.reval_ytd_deprn, 0) +
2732                                                           nvl(p_asset_deprn_rec_old.reval_ytd_deprn, 0);
2733       px_asset_deprn_rec_new.production              := nvl(p_asset_deprn_rec_adj.production, 0) +
2734                                                           nvl(p_asset_deprn_rec_old.production, 0);
2735       px_asset_deprn_rec_new.ltd_production          := nvl(p_asset_deprn_rec_adj.ltd_production, 0) +
2736                                                           nvl(p_asset_deprn_rec_old.ltd_production, 0);
2737       px_asset_deprn_rec_new.ytd_production          := nvl(p_asset_deprn_rec_adj.ytd_production, 0) +
2738                                                           nvl(p_asset_deprn_rec_old.ytd_production, 0);
2739 
2740       px_asset_deprn_rec_new.bonus_deprn_amount      := 0;
2741       px_asset_deprn_rec_new.bonus_deprn_reserve     := nvl(p_asset_deprn_rec_adj.bonus_deprn_reserve, 0) +
2742                                                           nvl(p_asset_deprn_rec_old.bonus_deprn_reserve, 0);
2743       px_asset_deprn_rec_new.bonus_ytd_deprn         := nvl(p_asset_deprn_rec_adj.bonus_ytd_deprn, 0) +
2744                                                           nvl(p_asset_deprn_rec_old.bonus_ytd_deprn, 0);
2745       px_asset_deprn_rec_new.impairment_amount       := 0;
2746       px_asset_deprn_rec_new.ytd_impairment          := 0;
2747       px_asset_deprn_rec_new.impairment_reserve          := 0;
2748    else
2749 
2750       px_asset_fin_rec_new.original_cost             := nvl(p_asset_fin_rec_old.original_cost,0);
2751       px_asset_deprn_rec_new.deprn_reserve           := nvl(p_asset_deprn_rec_old.deprn_reserve, 0);
2752       px_asset_deprn_rec_new.ytd_deprn               := nvl(p_asset_deprn_rec_old.ytd_deprn, 0);
2753       px_asset_deprn_rec_new.reval_deprn_reserve     := nvl(p_asset_deprn_rec_old.reval_deprn_reserve, 0);
2754       px_asset_deprn_rec_new.reval_ytd_deprn         := nvl(p_asset_deprn_rec_old.reval_ytd_deprn, 0);
2755       px_asset_deprn_rec_new.ltd_production          := nvl(p_asset_deprn_rec_old.ltd_production, 0);
2756       px_asset_deprn_rec_new.ytd_production          := nvl(p_asset_deprn_rec_old.ytd_production, 0);
2757       px_asset_deprn_rec_new.bonus_deprn_reserve     := nvl(p_asset_deprn_rec_old.bonus_deprn_reserve, 0);
2758       px_asset_deprn_rec_new.bonus_ytd_deprn         := nvl(p_asset_deprn_rec_old.bonus_ytd_deprn, 0);
2759       px_asset_deprn_rec_new.impairment_amount       := nvl(p_asset_deprn_rec_old.impairment_amount, 0);
2760       px_asset_deprn_rec_new.ytd_impairment          := nvl(p_asset_deprn_rec_old.ytd_impairment, 0);
2761       px_asset_deprn_rec_new.impairment_reserve          := nvl(p_asset_deprn_rec_old.impairment_reserve, 0);
2762 
2763    end if;
2764 
2765    px_asset_fin_rec_new.short_fiscal_year_flag    := nvl(p_asset_fin_rec_adj.short_fiscal_year_flag,
2766                                                            nvl(p_asset_fin_rec_old.short_fiscal_year_flag, 'NO'));
2767 
2768    if (px_asset_fin_rec_new.short_fiscal_year_flag = 'YES') then
2769       px_asset_fin_rec_new.conversion_date           := nvl(p_asset_fin_rec_adj.conversion_date,
2770                                                               p_asset_fin_rec_old.conversion_date);
2771       px_asset_fin_rec_new.orig_deprn_start_date     := nvl(p_asset_fin_rec_adj.orig_deprn_start_date,
2772                                                               p_asset_fin_rec_old.orig_deprn_start_date);
2773    else
2774       px_asset_fin_rec_new.conversion_date           := null;
2775       px_asset_fin_rec_new.orig_deprn_start_date     := null;
2776    end if;
2777 
2778    -- Japan Tax Phase3
2779    FA_UTIL_PVT.load_char_value
2780       (p_char_old  => p_asset_fin_rec_old.extended_deprn_flag,
2781        p_char_adj  => p_asset_fin_rec_adj.extended_deprn_flag,
2782        x_char_new  => px_asset_fin_rec_new.extended_deprn_flag, p_log_level_rec => p_log_level_rec);
2783 
2784    FA_UTIL_PVT.load_num_value
2785       (p_num_old  => p_asset_fin_rec_old.extended_depreciation_period,
2786        p_num_adj  => p_asset_fin_rec_adj.extended_depreciation_period,
2787        x_num_new  => px_asset_fin_rec_new.extended_depreciation_period, p_log_level_rec => p_log_level_rec);
2788 
2789    -- round those values holding currency amounts
2790    -- converted to use utils package instead of fa_round_pkg
2791    -- so that the correct sob (P/R) is always used to get currency
2792 
2793 
2794    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.cost,
2795                               p_asset_hdr_rec.book_type_code,
2796                               p_asset_hdr_rec.set_of_books_id,
2797                               p_log_level_rec => p_log_level_rec) then
2798       raise calc_err;
2799    end if;
2800 
2801 
2802    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.original_cost,
2803                               p_asset_hdr_rec.book_type_code,
2804                               p_asset_hdr_rec.set_of_books_id,
2805                               p_log_level_rec => p_log_level_rec) then
2806       raise calc_err;
2807    end if;
2808 
2809    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.reval_amortization_basis,
2810                               p_asset_hdr_rec.book_type_code,
2811                               p_asset_hdr_rec.set_of_books_id,
2812                               p_log_level_rec => p_log_level_rec) then
2813       raise calc_err;
2814    end if;
2815 
2816    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.reval_ceiling,
2817                               p_asset_hdr_rec.book_type_code,
2818                               p_asset_hdr_rec.set_of_books_id,
2819                               p_log_level_rec => p_log_level_rec) then
2820       raise calc_err;
2821    end if;
2822 
2823    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.unrevalued_cost,
2824                               p_asset_hdr_rec.book_type_code,
2825                               p_asset_hdr_rec.set_of_books_id,
2826                               p_log_level_rec => p_log_level_rec) then
2827       raise calc_err;
2828    end if;
2829 
2830    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.cip_cost,
2831                               p_asset_hdr_rec.book_type_code,
2832                               p_asset_hdr_rec.set_of_books_id,
2833                               p_log_level_rec => p_log_level_rec) then
2834       raise calc_err;
2835    end if;
2836 
2837    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.deprn_reserve,
2838                               p_asset_hdr_rec.book_type_code,
2839                               p_asset_hdr_rec.set_of_books_id,
2840                               p_log_level_rec => p_log_level_rec) then
2841       raise calc_err;
2842    end if;
2843 
2844    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.ytd_deprn,
2845                               p_asset_hdr_rec.book_type_code,
2846                               p_asset_hdr_rec.set_of_books_id,
2847                               p_log_level_rec => p_log_level_rec) then
2848       raise calc_err;
2849    end if;
2850 
2851    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.reval_deprn_reserve,
2852                               p_asset_hdr_rec.book_type_code,
2853                               p_asset_hdr_rec.set_of_books_id,
2854                               p_log_level_rec => p_log_level_rec) then
2855       raise calc_err;
2856    end if;
2857 
2858    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.reval_ytd_deprn,
2859                               p_asset_hdr_rec.book_type_code,
2860                               p_asset_hdr_rec.set_of_books_id,
2861                               p_log_level_rec => p_log_level_rec) then
2862       raise calc_err;
2863    end if;
2864 
2865    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.bonus_deprn_reserve,
2866                               p_asset_hdr_rec.book_type_code,
2867                               p_asset_hdr_rec.set_of_books_id,
2868                               p_log_level_rec => p_log_level_rec) then
2869       raise calc_err;
2870    end if;
2871 
2872    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.bonus_ytd_deprn,
2873                               p_asset_hdr_rec.book_type_code,
2874                               p_asset_hdr_rec.set_of_books_id,
2875                               p_log_level_rec => p_log_level_rec) then
2876       raise calc_err;
2877    end if;
2878 
2879    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.impairment_reserve,
2880                               p_asset_hdr_rec.book_type_code,
2881                               p_asset_hdr_rec.set_of_books_id,
2882                               p_log_level_rec => p_log_level_rec) then
2883       raise calc_err;
2884    end if;
2885 
2886    if not FA_UTILS_PKG.faxrnd(px_asset_deprn_rec_new.ytd_impairment,
2887                               p_asset_hdr_rec.book_type_code,
2888                               p_asset_hdr_rec.set_of_books_id,
2889                               p_log_level_rec => p_log_level_rec) then
2890       raise calc_err;
2891    end if;
2892 
2893    if (p_mrc_sob_type_code <> 'R' and p_asset_type_rec.asset_type <> 'GROUP') then --Bug 9099190
2894        G_primary_new_cost := px_asset_fin_rec_new.cost;
2895    end if;
2896 
2897    return true;
2898 
2899 EXCEPTION
2900    when calc_err then
2901       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2902       return false;
2903 
2904    when others then
2905       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2906       return false;
2907 
2908 
2909 END calc_new_amounts;
2910 
2911 FUNCTION calc_derived_amounts
2912    (px_trans_rec              IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
2913     p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
2914     p_asset_desc_rec          IN     FA_API_TYPES.asset_desc_rec_type,
2915     p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
2916     p_asset_cat_rec           IN     FA_API_TYPES.asset_cat_rec_type,
2917     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
2918     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
2919     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
2920     p_asset_deprn_rec_old     IN     FA_API_TYPES.asset_deprn_rec_type,
2921     p_asset_deprn_rec_adj     IN     FA_API_TYPES.asset_deprn_rec_type,
2922     px_asset_deprn_rec_new    IN OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
2923     p_period_rec              IN     FA_API_TYPES.period_rec_type,
2924     p_mrc_sob_type_code       IN     VARCHAR2
2925    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
2926 
2927    l_count        number := 0;
2928    l_calling_fn   VARCHAR2(40) := 'fa_asset_calc_pvt.calc_derived_amounts';
2929    calc_err       EXCEPTION;
2930 
2931 BEGIN
2932 
2933    if not calc_deprn_start_date
2934           (p_asset_hdr_rec           => p_asset_hdr_rec,
2935            p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
2936            px_asset_fin_rec_new      => px_asset_fin_rec_new,
2937            p_log_level_rec           => p_log_level_rec
2938           ) then
2939             raise calc_err;
2940    end if;
2941 
2942    if not calc_salvage_value
2943           (p_trans_rec               => px_trans_rec,
2944            p_asset_hdr_rec           => p_asset_hdr_rec,
2945            p_asset_type_rec          => p_asset_type_rec,
2946            p_asset_fin_rec_old       => p_asset_fin_rec_old,
2947            p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
2948            px_asset_fin_rec_new      => px_asset_fin_rec_new,
2949            p_mrc_sob_type_code       => p_mrc_sob_type_code,
2950            p_log_level_rec           => p_log_level_rec
2951           ) then
2952       raise calc_err;
2953    end if;
2954 
2955    -- BUG# 2650528
2956    -- need to call calc_itc_info before calc_rec_cost
2957    -- in order to get the itc_basis otherwise the rec_cost
2958    -- would just be set to null
2959 
2960    if (fa_cache_pkg.fazcbc_record.book_class = 'TAX' and
2961        px_asset_fin_rec_new.itc_amount_id is not null) then
2962       if not calc_itc_info
2963              (p_asset_hdr_rec           => p_asset_hdr_rec,
2964               p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
2965               px_asset_fin_rec_new      => px_asset_fin_rec_new,
2966               p_log_level_rec           => p_log_level_rec
2967              ) then
2968          raise calc_err;
2969       end if;
2970    end if;
2971 
2972    if not calc_rec_cost
2973           (p_asset_hdr_rec           => p_asset_hdr_rec,
2974            p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
2975            px_asset_fin_rec_new      => px_asset_fin_rec_new,
2976            p_log_level_rec           => p_log_level_rec
2977           ) then
2978       raise calc_err;
2979    end if;
2980 
2981 
2982    if not calc_deprn_limit_adj_rec_cost
2983           (p_asset_hdr_rec           => p_asset_hdr_rec,
2984            p_asset_type_rec          => p_asset_type_rec,
2985            p_asset_fin_rec_old       => p_asset_fin_rec_old,
2986            p_asset_fin_rec_adj       => p_asset_fin_rec_adj,
2987            px_asset_fin_rec_new      => px_asset_fin_rec_new,
2988            p_mrc_sob_type_code       => p_mrc_sob_type_code,
2989            p_log_level_rec           => p_log_level_rec
2990           ) then
2991       raise calc_err;
2992    end if;
2993 
2994 
2995    if not calc_flags
2996           (p_trans_rec               => px_trans_rec,
2997            p_asset_hdr_rec           => p_asset_hdr_rec,
2998            p_asset_type_rec          => p_asset_type_rec,
2999            p_asset_fin_rec_old       => p_asset_fin_rec_old,
3000            px_asset_fin_rec_new      => px_asset_fin_rec_new,
3001            p_asset_deprn_rec         => px_asset_deprn_rec_new,
3002            p_period_rec              => p_period_rec,
3003            p_log_level_rec           => p_log_level_rec
3004           ) then
3005       raise calc_err;
3006    end if;
3007 
3008    -- Japan Tax phase3 Start
3009    -- Bug 8559068 base bug 7707540: load_num_value is called only while setting/resetting
3010    -- the extended_deprn_flag also removed the fix for 6707623
3011    -- bug 8819226 do not change the value of both flags when deprn flag is switched ON/OFF
3012    -- Bug 9244648: Set pc_fully_rsvd when called from tax upload
3013    -- Bug 9707074 Non-JapanTax: do not change the value of both flags when deprn flag is switched ON/OFF
3014    if (((nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') <> nvl(p_asset_fin_rec_adj.extended_deprn_flag, '-1'))
3015         OR (nvl(p_asset_fin_rec_old.extended_deprn_flag, '-1') = 'Y')
3016         OR (nvl(px_trans_rec.calling_interface,'X') = 'FATAXUP'))
3017        and nvl(fnd_profile.value('FA_JAPAN_TAX_REFORMS'),'N') = 'Y')
3018       OR (nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'YES'
3019          AND nvl(px_asset_fin_rec_new.depreciate_flag, 'YES') = 'NO')  then
3020 
3021       FA_UTIL_PVT.load_num_value
3022          (p_num_old  => p_asset_fin_rec_old.period_counter_life_complete,
3023           p_num_adj  => p_asset_fin_rec_adj.period_counter_life_complete,
3024           x_num_new  => px_asset_fin_rec_new.period_counter_life_complete,
3025           p_log_level_rec => p_log_level_rec);
3026 
3027       FA_UTIL_PVT.load_num_value
3028          (p_num_old  => p_asset_fin_rec_old.period_counter_fully_reserved,
3029           p_num_adj  => p_asset_fin_rec_adj.period_counter_fully_reserved,
3030           x_num_new  => px_asset_fin_rec_new.period_counter_fully_reserved,
3031           p_log_level_rec => p_log_level_rec);
3032 
3033    end if;
3034 
3035    if (p_log_level_rec.statement_level) then
3036       fa_debug_pkg.add(l_calling_fn, 'JPTX1: deprn_method_code', px_asset_fin_rec_new.deprn_method_code, p_log_level_rec);
3037       fa_debug_pkg.add(l_calling_fn, 'JPTX1: life_in_months', px_asset_fin_rec_new.life_in_months, p_log_level_rec);
3038       fa_debug_pkg.add(l_calling_fn, 'JPTX1: salvage_value', px_asset_fin_rec_new.salvage_value, p_log_level_rec);
3039       fa_debug_pkg.add(l_calling_fn, 'JPTX1: period_counter_fully_reserved',
3040                        px_asset_fin_rec_new.period_counter_fully_reserved, p_log_level_rec);
3041       fa_debug_pkg.add(l_calling_fn, 'JPTX1: period_counter_life_complete',
3042                        px_asset_fin_rec_new.period_counter_life_complete, p_log_level_rec);
3043       fa_debug_pkg.add(l_calling_fn, 'JPTX1: basic_rate', px_asset_fin_rec_new.basic_rate, p_log_level_rec);
3044       fa_debug_pkg.add(l_calling_fn, 'JPTX1: adjusted_rate', px_asset_fin_rec_new.adjusted_rate, p_log_level_rec);
3045       fa_debug_pkg.add(l_calling_fn, 'JPTX1: allowed_deprn_limit',
3046                        px_asset_fin_rec_new.allowed_deprn_limit, p_log_level_rec);
3047       fa_debug_pkg.add(l_calling_fn, 'JPTX1: deprn_limit_type', px_asset_fin_rec_new.deprn_limit_type, p_log_level_rec);
3048       fa_debug_pkg.add(l_calling_fn, 'JPTX1: allowed_deprn_limit_amount',
3049                        px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec);
3050       fa_debug_pkg.add(l_calling_fn, 'JPTX1: recoverable_cost', px_asset_fin_rec_new.recoverable_cost, p_log_level_rec);
3051       fa_debug_pkg.add(l_calling_fn, 'JPTX1: adjusted_rate', p_asset_fin_rec_old.adjusted_rate, p_log_level_rec);
3052    end if;
3053    -- Japan Tax phase3 End
3054 
3055    return true;
3056 
3057 EXCEPTION
3058    when calc_err then
3059       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3060       return false;
3061 
3062    when others then
3063       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3064       return false;
3065 
3066 END calc_derived_amounts;
3067 
3068 
3069 FUNCTION calc_prorate_date
3070    (p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
3071     p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
3072     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
3073     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3074     p_period_rec              IN     FA_API_TYPES.period_rec_type
3075    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3076 
3077    l_count                number:= 0;
3078    l_prorate_calendar     varchar2(15);
3079    l_fiscal_year_name     varchar2(30);
3080    l_calling_fn           varchar2(40) := 'fa_asset_calc_pvt.calc_prorate_date';
3081    calc_err               EXCEPTION;
3082 
3083 BEGIN
3084 
3085    l_prorate_calendar     := fa_cache_pkg.fazcbc_record.prorate_calendar;
3086    l_fiscal_year_name     := fa_cache_pkg.fazcbc_record.fiscal_year_name;
3087 
3088    if (p_asset_type_rec.asset_type = 'GROUP') then
3089       px_asset_fin_rec_new.prorate_date := px_asset_fin_rec_new.date_placed_in_service;
3090    else
3091 
3092       if (px_asset_fin_rec_new.prorate_convention_code is null) then
3093           fa_srvr_msg.add_message(
3094                    calling_fn => l_calling_fn,
3095                    name       => 'FA_EXP_GET_PRORATE_INFO', p_log_level_rec => p_log_level_rec);
3096          raise calc_err;
3097       end if;
3098 
3099       if not fa_cache_pkg.fazccvt
3100                (x_prorate_convention_code => px_asset_fin_rec_new.prorate_convention_code,
3101                 x_fiscal_year_name        => l_fiscal_year_name, p_log_level_rec => p_log_level_rec) then
3102          raise calc_err;
3103       end if;
3104 
3105       if (p_log_level_rec.statement_level) then
3106          fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.prorate_convention_code', px_asset_fin_rec_new.prorate_convention_code, p_log_level_rec => p_log_level_rec);
3107          fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.date_placed_in_service', px_asset_fin_rec_new.date_placed_in_service, p_log_level_rec => p_log_level_rec);
3108          fa_debug_pkg.add(l_calling_fn, 'l_prorate_calendar', l_prorate_calendar, p_log_level_rec => p_log_level_rec);
3109       end if;
3110 
3111       select /*+ leading(conv) use_nl(conv cp) index(cp) */
3112              prorate_date
3113         into px_asset_fin_rec_new.prorate_date
3114         from fa_calendar_periods cp,
3115              fa_conventions conv
3116        where conv.prorate_convention_code   = px_asset_fin_rec_new.prorate_convention_code
3117          and conv.start_date               <= px_asset_fin_rec_new.date_placed_in_service
3118          and conv.end_date                 >= px_asset_fin_rec_new.date_placed_in_service
3119          and cp.calendar_type               = l_prorate_calendar
3120          and conv.prorate_date             >= cp.start_date
3121          and conv.prorate_date             <= cp.end_date;
3122 
3123          -- BUG# 2251278
3124          -- removing the following as it prevent prorate periods that
3125          -- fall in a future period (such as FOL-MONTH)
3126          --
3127          -- and conv.prorate_date             <= p_period_rec.fy_end_date;
3128 
3129     end if; -- (p_asset_type_rec.asset_type = 'GROUP')
3130 
3131     -- For Polish, we need additional changes here.
3132     -- First find out if we have a polish mechanism here
3133     if (nvl(px_asset_fin_rec_new.deprn_method_code,
3134             p_asset_fin_rec_adj.deprn_method_code) is not null) and
3135        (fa_cache_pkg.fazccmt (
3136        X_method                => nvl(px_asset_fin_rec_new.deprn_method_code,
3137                                       p_asset_fin_rec_adj.deprn_method_code),
3138        X_life                  => nvl(px_asset_fin_rec_new.life_in_months,
3139                                       p_asset_fin_rec_adj.life_in_months),
3140        p_log_level_rec         => p_log_level_rec
3141     )) then
3142        if (fa_cache_pkg.fazccmt_record.deprn_basis_rule_id is not null) then
3143           if (fa_cache_pkg.fazcdbr_record.polish_rule in (
3144                    FA_STD_TYPES.FAD_DBR_POLISH_1,
3145                    FA_STD_TYPES.FAD_DBR_POLISH_2)) then
3146              -- For Polish rules 1 and 2, set prorate_date based on dpis
3147              -- regardless of prorate convention.
3148              px_asset_fin_rec_new.prorate_date :=
3149                 px_asset_fin_rec_new.date_placed_in_service;
3150           end if;
3151        end if;
3152     end if;
3153 
3154     return true;
3155 
3156 EXCEPTION
3157    when calc_err then
3158       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3159       return false;
3160 
3161    when no_data_found then
3162       fa_srvr_msg.add_message(
3163                 calling_fn => l_calling_fn,
3164                 name       => 'FA_EXP_GET_PRORATE_INFO', p_log_level_rec => p_log_level_rec);
3165       return FALSE;
3166 
3167    when others then
3168       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3169 
3170       return false;
3171 
3172 END calc_prorate_date;
3173 
3174 FUNCTION calc_deprn_start_date
3175    (p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
3176     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
3177     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type
3178    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3179 
3180    l_dwaf              varchar2(3);
3181    l_fiscal_year_name  varchar2(30);
3182    l_calling_fn        varchar2(40) := 'fa_asset_calc_pvt.calc_deprn_start_date';
3183    calc_err            EXCEPTION;
3184 
3185 BEGIN
3186 
3187     l_fiscal_year_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
3188 
3189     if not fa_cache_pkg.fazccvt
3190              (x_prorate_convention_code => px_asset_fin_rec_new.prorate_convention_code,
3191               x_fiscal_year_name        => l_fiscal_year_name, p_log_level_rec => p_log_level_rec) then
3192        raise calc_err;
3193     end if;
3194 
3195     l_dwaf := fa_cache_pkg.fazccvt_record.depr_when_acquired_flag;
3196 
3197     if (l_dwaf = 'YES') then
3198        px_asset_fin_rec_new.deprn_start_date := px_asset_fin_rec_new.date_placed_in_service;
3199     else
3200        px_asset_fin_rec_new.deprn_start_date := px_asset_fin_rec_new.prorate_date;
3201     end if;
3202 
3203     if px_asset_fin_rec_new.deprn_start_date is null then
3204       raise calc_err;
3205     end if;
3206 
3207     return true;
3208 
3209 EXCEPTION
3210    when calc_err then
3211       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3212       return false;
3213 
3214    when others then
3215       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3216       return false;
3217 
3218 END calc_deprn_start_date;
3219 
3220 
3221 FUNCTION calc_rec_cost
3222    (p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
3223     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
3224     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type
3225    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3226 
3227    CURSOR c_get_rec_cost_w_ceiling IS
3228     select least(px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value,
3229                       nvl(ce.limit, px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value))
3230       from fa_ceilings ce
3231      where ce.ceiling_name  = px_asset_fin_rec_new.ceiling_name
3232        and px_asset_fin_rec_new.date_placed_in_service
3233                between ce.start_date and
3234                        nvl(ce.end_date, px_asset_fin_rec_new.date_placed_in_service);
3235 
3236    l_ceiling_type   varchar2(30);
3237    l_calling_fn     varchar2(40) := 'fa_asset_calc_pvt.calc_rec_cost';
3238 
3239    l_temp_rec_cost  number;
3240 
3241    calc_err         EXCEPTION;
3242 
3243 BEGIN
3244 
3245    -- can probably convert to cache calls here
3246 
3247    if (px_asset_fin_rec_new.ceiling_name is not null) then
3248          select ceiling_type
3249            into l_ceiling_type
3250            from fa_ceiling_types
3251           where ceiling_name = px_asset_fin_rec_new.ceiling_name;
3252    end if;
3253 
3254    if (px_asset_fin_rec_new.itc_amount_id is null) then
3255 
3256       if l_ceiling_type = 'RECOVERABLE COST CEILING' then
3257 
3258          OPEN c_get_rec_cost_w_ceiling;
3259          FETCH c_get_rec_cost_w_ceiling INTO l_temp_rec_cost;
3260 
3261          if c_get_rec_cost_w_ceiling%NOTFOUND then
3262             px_asset_fin_rec_new.recoverable_cost := px_asset_fin_rec_new.cost -
3263                                                      px_asset_fin_rec_new.salvage_value;
3264          else
3265             px_asset_fin_rec_new.recoverable_cost := l_temp_rec_cost;
3266          end if;
3267 
3268          CLOSE c_get_rec_cost_w_ceiling;
3269 
3270       else
3271          px_asset_fin_rec_new.recoverable_cost :=
3272             px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value;
3273 
3274       end if;
3275    else
3276       if (l_ceiling_type = 'RECOVERABLE COST CEILING') then
3277          select least(px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value -
3278                       px_asset_fin_rec_new.itc_basis * ir.basis_reduction_rate,
3279                       nvl(ce.limit, px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value -
3280                                     px_asset_fin_rec_new.itc_basis * ir.basis_reduction_rate))
3281           into px_asset_fin_rec_new.recoverable_cost
3282           from fa_ceilings ce,
3283                fa_itc_rates ir
3284          where ir.itc_amount_id = px_asset_fin_rec_new.itc_amount_id
3285            and ce.ceiling_name = px_asset_fin_rec_new.ceiling_name
3286            and px_asset_fin_rec_new.date_placed_in_service
3287                between ce.start_date and
3288                        nvl(ce.end_date, px_asset_fin_rec_new.date_placed_in_service);
3289 
3290       else
3291          select px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value -
3292                 px_asset_fin_rec_new.itc_basis * ir.basis_reduction_rate
3293            into px_asset_fin_rec_new.recoverable_cost
3294            from fa_itc_rates ir
3295           where ir.itc_amount_id = px_asset_fin_rec_new.itc_amount_id;
3296       end if;
3297    end if;
3298 
3299    return true;
3300 
3301 EXCEPTION
3302    when calc_err then
3303       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3304       return false;
3305 
3306    when others then
3307       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3308       return false;
3309 
3310 END calc_rec_cost;
3311 
3312 
3313 FUNCTION calc_deprn_limit_adj_rec_cost
3314    (p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
3315     p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
3316     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
3317     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
3318     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3319     p_called_from_faxama      IN     BOOLEAN DEFAULT FALSE, -- Bug 6604235
3320     p_mrc_sob_type_code       IN     VARCHAR2
3321    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3322 
3323    l_calling_fn     VARCHAR2(40) := 'fa_asset_calc_pvt.calc_deprn_limit';
3324    calc_err         EXCEPTION;
3325 
3326 BEGIN
3327 
3328    -- like % salvage, we will now allow direct entry of limits on
3329    -- an asset by asset basis as part of the group project and
3330    -- no longer mandate from category
3331 
3332    -- reclass with redefault MUST explicitly populate the
3333    -- fin_adj rec with the new categories info (including treating
3334    -- the amount as a delta) ???  verify feasibility of ths last point ???
3335 
3336    if (p_log_level_rec.statement_level) then
3337       fa_debug_pkg.add(l_calling_fn,
3338                        'deprn_limit type',
3339                        p_asset_fin_rec_old.deprn_limit_type, p_log_level_rec => p_log_level_rec);
3340       fa_debug_pkg.add(l_calling_fn,
3341                        'salvage type',
3342                        p_asset_fin_rec_adj.deprn_limit_type, p_log_level_rec => p_log_level_rec);
3343       fa_debug_pkg.add(l_calling_fn,
3344                        'delta deprn limit',
3345                        p_asset_fin_rec_adj.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
3346       fa_debug_pkg.add(l_calling_fn,
3347                        'delta deprn limit amount',
3348                        p_asset_fin_rec_adj.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
3349    end if;
3350 
3351    px_asset_fin_rec_new.deprn_limit_type :=
3352       nvl(p_asset_fin_rec_adj.deprn_limit_type,
3353           nvl(p_asset_fin_rec_old.deprn_limit_type, 'NONE'));
3354 
3355    if (p_log_level_rec.statement_level) then
3356       fa_debug_pkg.add(l_calling_fn,
3357                        'limit type',
3358                        px_asset_fin_rec_new.deprn_limit_type, p_log_level_rec => p_log_level_rec);
3359    end if;
3360 
3361    -- Bug 6863138 When called from faxama, adj rec will have new values
3362    -- Bug 12556373  changed the below IF condition
3363    if p_called_from_faxama and px_asset_fin_rec_new.deprn_limit_type <> 'NONE' then
3364          px_asset_fin_rec_new.allowed_deprn_limit := p_asset_fin_rec_adj.allowed_deprn_limit;
3365          px_asset_fin_rec_new.allowed_deprn_limit_amount := p_asset_fin_rec_adj.allowed_deprn_limit_amount;
3366 	 --bug 14838772 FP Bug 8601905 :- Recalculate the limit amount in case of PCT
3367  	 if (px_asset_fin_rec_new.deprn_limit_type = 'PCT') then
3368  	    px_asset_fin_rec_new.allowed_deprn_limit_amount := px_asset_fin_rec_new.cost -
3369  	                                                      (px_asset_fin_rec_new.cost *
3370  	                                                       px_asset_fin_rec_new.allowed_deprn_limit);
3371             if not FA_UTILS_PKG.faxceil(px_asset_fin_rec_new.allowed_deprn_limit_amount,
3372                                         p_asset_hdr_rec.book_type_code,
3373 					p_asset_hdr_rec.set_of_books_id,
3374 					p_log_level_rec => p_log_level_rec) then
3375                raise calc_err;
3376             end if;
3377  	 end if;
3378 -- Bug#6913554,For calculating correct reserve amount during back dated retirement transaction.
3379        if px_asset_fin_rec_new.cost <> 0 then
3380          px_asset_fin_rec_new.adjusted_recoverable_cost :=
3381                    px_asset_fin_rec_new.cost - nvl(px_asset_fin_rec_new.allowed_deprn_limit_amount,0);
3382        else
3383          px_asset_fin_rec_new.adjusted_recoverable_cost := 0;
3384        end if;
3385 --Bug#6913554,End of fix.
3386 
3387 
3388       -- round the  adj_rec_cost
3389       if not FA_UTILS_PKG.faxfloor(px_asset_fin_rec_new.adjusted_recoverable_cost,
3390                                    p_asset_hdr_rec.book_type_code,
3391                                    p_asset_hdr_rec.set_of_books_id,
3392                                    p_log_level_rec => p_log_level_rec) then
3393          raise calc_err;
3394       end if;
3395 
3396       if (p_log_level_rec.statement_level) then
3397          fa_debug_pkg.add(l_calling_fn,
3398                           'From faxama new allowed_deprn_limit_amount',
3399                           px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
3400          fa_debug_pkg.add(l_calling_fn,
3401                           'new allowed_deprn_limit',
3402                           px_asset_fin_rec_new.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
3403          fa_debug_pkg.add(l_calling_fn,
3404                           'px_asset_fin_rec_new.adjusted_recoverable_cost',
3405                           px_asset_fin_rec_new.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
3406       end if;
3407 
3408       return true;
3409 
3410    end if;
3411    -- Bug 6863138 End
3412 
3413    if (px_asset_fin_rec_new.deprn_limit_type = 'SUM' and
3414        p_asset_type_rec.asset_type <> 'GROUP') then
3415       fa_srvr_msg.add_message(
3416          calling_fn => l_calling_fn,
3417          name       => '***FA_NO_SUM_NO_GROUP***',
3418                    p_log_level_rec => p_log_level_rec);
3419       raise calc_err;
3420    elsif (px_asset_fin_rec_new.deprn_limit_type = 'AMT' and
3421        p_asset_type_rec.asset_type = 'GROUP') then
3422       fa_srvr_msg.add_message(
3423          calling_fn => l_calling_fn,
3424          name       => '***FA_NO_LIM_AMT_FOR_GROUP***',
3425                    p_log_level_rec => p_log_level_rec);
3426       raise calc_err;
3427    elsif (px_asset_fin_rec_new.deprn_limit_type <> 'AMT' and
3428           px_asset_fin_rec_new.deprn_limit_type <> 'PCT' and
3429           px_asset_fin_rec_new.deprn_limit_type <> 'SUM' and
3430           px_asset_fin_rec_new.deprn_limit_type <> 'NONE') then
3431       fa_srvr_msg.add_message(
3432          calling_fn => l_calling_fn,
3433          name       => 'FA_INVALID_PARAMETER',
3434          token1     => 'VALUE',
3435          value1     => px_asset_fin_rec_new.deprn_limit_type,
3436          token2     => 'PARAM',
3437          value2     => 'DEPRN_LIMIT_TYPE', p_log_level_rec => p_log_level_rec);
3438       raise calc_err;
3439    end if;
3440 
3441 
3442 
3443    -- enhancing for group and core to allow direct percentage
3444    -- entry for the assets and not just defaults from category
3445    -- note that we initially set the new value for the salvage %
3446    -- in calc_new_amounts and use that here.
3447    --
3448    -- NOTE: we loaded the "new.deprn_limit_type" value previously
3449    -- NOTE2: limit amount must be truncated
3450    --
3451    if (px_asset_fin_rec_new.deprn_limit_type = 'PCT') then
3452       -- use the percentage
3453       px_asset_fin_rec_new.allowed_deprn_limit := (nvl(p_asset_fin_rec_adj.allowed_deprn_limit, 0) +
3454                                                    nvl(p_asset_fin_rec_old.allowed_deprn_limit, 0));
3455 
3456       px_asset_fin_rec_new.allowed_deprn_limit_amount := px_asset_fin_rec_new.cost -
3457                                             (px_asset_fin_rec_new.cost *
3458                                              px_asset_fin_rec_new.allowed_deprn_limit);
3459 
3460       -- BUG# 3092066
3461       -- use ceiling here, not round
3462       -- this results in a floor on the final amount
3463       if not FA_UTILS_PKG.faxceil(px_asset_fin_rec_new.allowed_deprn_limit_amount,
3464                                    p_asset_hdr_rec.book_type_code,
3465                                    p_asset_hdr_rec.set_of_books_id,
3466                                    p_log_level_rec => p_log_level_rec) then
3467          raise calc_err;
3468       end if;
3469 
3470       px_asset_fin_rec_new.adjusted_recoverable_cost :=
3471               px_asset_fin_rec_new.cost - px_asset_fin_rec_new.allowed_deprn_limit_amount;
3472 
3473    elsif (px_asset_fin_rec_new.deprn_limit_type = 'SUM') then
3474       -- this is used only for group assets
3475       -- performance may not be too great here
3476 
3477 
3478       -- BUG# 3198440
3479       -- for additions (old rec is null) just set to 0
3480 
3481       px_asset_fin_rec_new.allowed_deprn_limit := null;
3482 
3483       if (p_asset_fin_rec_old.deprn_limit_type is null) then
3484          px_asset_fin_rec_new.allowed_deprn_limit_amount := 0;
3485       elsif (p_asset_fin_rec_old.deprn_limit_type <> 'SUM') then
3486          if (p_mrc_sob_type_code <> 'R') then
3487             select nvl(sum(allowed_deprn_limit_amount), 0)
3488               into px_asset_fin_rec_new.allowed_deprn_limit_amount
3489               from fa_books bk,
3490                    fa_additions_b ad
3491              where bk.transaction_header_id_out is null
3492                and bk.group_asset_id = p_asset_hdr_rec.asset_id
3493                and bk.asset_id = ad.asset_id
3494                and bk.book_type_code = p_asset_hdr_rec.book_type_code
3495                and ad.asset_type = 'CAPITALIZED';
3496          else
3497             select nvl(sum(allowed_deprn_limit_amount), 0)
3498               into px_asset_fin_rec_new.allowed_deprn_limit_amount
3499               from fa_mc_books bk,
3500                    fa_additions_b ad
3501              where bk.transaction_header_id_out is null
3502                and bk.group_asset_id = p_asset_hdr_rec.asset_id
3503                and bk.asset_id = ad.asset_id
3504                and bk.book_type_code = p_asset_hdr_rec.book_type_code
3505                and ad.asset_type = 'CAPITALIZED'
3506                and bk.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3507          end if;
3508 
3509       else
3510          px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3511                nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) +
3512                nvl(p_asset_fin_rec_old.allowed_deprn_limit_amount, 0);
3513       end if;
3514 
3515       -- validation
3516       if (px_asset_fin_rec_new.allowed_deprn_limit_amount = 0) then
3517           px_asset_fin_rec_new.adjusted_recoverable_cost :=
3518              px_asset_fin_rec_new.recoverable_cost;
3519       else
3520          px_asset_fin_rec_new.adjusted_recoverable_cost :=
3521             px_asset_fin_rec_new.cost - px_asset_fin_rec_new.allowed_deprn_limit_amount;
3522       end if;
3523    elsif (px_asset_fin_rec_new.deprn_limit_type = 'AMT') then
3524       px_asset_fin_rec_new.allowed_deprn_limit := null;
3525 
3526       -- delta salvage amount may or may not be null
3527       -- use it or 0 for the delta
3528       if (p_mrc_sob_type_code <> 'R') then
3529 
3530          -- BUG# 3516255
3531          -- when changing types, the delta is treated as the new amount
3532          -- we will not add to the prior value that may have been
3533          -- existed/calculated from previous type of PCT or SUM
3534          -- Bug 6705332 While extending assets
3535          -- p_asset_fin_rec_adj.allowed_deprn_limit_amount contains the final value.
3536          -- BUG 6806294 added the another 'OR' condition to check for ext deprn flag change
3537          if (p_asset_fin_rec_old.deprn_limit_type <> 'AMT') or
3538             ((nvl(p_asset_fin_rec_old.extended_deprn_flag,'N') <> 'Y') and
3539              (nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') = 'Y'))
3540              or
3541              ((nvl(p_asset_fin_rec_old.extended_deprn_flag,'N') = 'Y') and
3542               (nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') <> 'Y')) then
3543             px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3544                nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0);
3545 
3546          else
3547             px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3548                nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) +
3549                   nvl(p_asset_fin_rec_old.allowed_deprn_limit_amount, 0);
3550          end if;
3551 
3552          -- Bug 6604235 The validation need not be executed when
3553          -- calc_deprn_limit_adj_rec_cost is called from faxama
3554          -- (where we are recalculating from beginning).
3555          if (not p_called_from_faxama) and
3556             ((px_asset_fin_rec_new.cost > 0 and
3557               px_asset_fin_rec_new.allowed_deprn_limit_amount < 0) or
3558              (px_asset_fin_rec_new.cost < 0 and
3559               px_asset_fin_rec_new.allowed_deprn_limit_amount > 0)) then
3560             fa_srvr_msg.add_message(
3561                 calling_fn => l_calling_fn,
3562                 name       => '***FA_DIFF_SIGN_LIMIT***',
3563                    p_log_level_rec => p_log_level_rec);
3564             raise calc_err;
3565          elsif (px_asset_fin_rec_new.cost = 0) then
3566             px_asset_fin_rec_new.allowed_deprn_limit_amount  := 0;
3567          end if;
3568 
3569          G_primary_deprn_limit_amount := px_asset_fin_rec_new.allowed_deprn_limit_amount;
3570 
3571       else
3572           -- Fix for Bug #2914328.  Need to also make sure that
3573           -- G_primary_new_cost is not zero to avoid zero divide error.
3574          if (px_asset_fin_rec_new.cost <> 0) and
3575             (G_primary_new_cost <> 0) then
3576             px_asset_fin_rec_new.allowed_deprn_limit_amount :=
3577                G_primary_deprn_limit_amount *
3578                   (px_asset_fin_rec_new.cost / G_primary_new_cost);
3579          else
3580             px_asset_fin_rec_new.allowed_deprn_limit_amount  := 0;
3581          end if;
3582 
3583       end if;
3584 
3585       -- round the limit
3586       if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.allowed_deprn_limit_amount,
3587                                    p_asset_hdr_rec.book_type_code,
3588                                    p_asset_hdr_rec.set_of_books_id,
3589                                    p_log_level_rec => p_log_level_rec) then
3590          raise calc_err;
3591       end if;
3592 
3593       px_asset_fin_rec_new.adjusted_recoverable_cost :=
3594          px_asset_fin_rec_new.cost - px_asset_fin_rec_new.allowed_deprn_limit_amount;
3595 
3596    else -- NONE
3597       px_asset_fin_rec_new.allowed_deprn_limit_amount := NULL;
3598       px_asset_fin_rec_new.allowed_deprn_limit        := NULL;
3599 
3600       px_asset_fin_rec_new.adjusted_recoverable_cost :=
3601          px_asset_fin_rec_new.recoverable_cost;
3602 
3603    end if;
3604 
3605    -- round the  adj_rec_cost
3606    if not FA_UTILS_PKG.faxfloor(px_asset_fin_rec_new.adjusted_recoverable_cost,
3607                                 p_asset_hdr_rec.book_type_code,
3608                                 p_asset_hdr_rec.set_of_books_id,
3609                                 p_log_level_rec => p_log_level_rec) then
3610       raise calc_err;
3611    end if;
3612 
3613    if (p_log_level_rec.statement_level) then
3614       fa_debug_pkg.add(l_calling_fn,
3615                        'new allowed_deprn_limit_amount',
3616                        px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
3617       fa_debug_pkg.add(l_calling_fn,
3618                        'px_asset_fin_rec_new.adjusted_recoverable_cost',
3619                        px_asset_fin_rec_new.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
3620    end if;
3621 
3622    return true;
3623 
3624 EXCEPTION
3625    when calc_err then
3626       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3627       return false;
3628 
3629    when others then
3630       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3631       return false;
3632 
3633 END calc_deprn_limit_adj_rec_cost;
3634 
3635 
3636 FUNCTION calc_itc_info
3637    (p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
3638     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
3639     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type
3640    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3641 
3642 
3643    l_itc_amount_rate            number;
3644    l_basis_reduction_rate       number;
3645    l_itc_basis                  number;
3646    l_itc_basis_reduction_amount number;
3647    l_ceiling_limit              number := 0;
3648    l_calling_fn                 varchar2(40) := 'fa_asset_calc_pvt.calc_itc_info';
3649    calc_err                     EXCEPTION;
3650 
3651 BEGIN
3652 
3653    select itc_amount_rate,
3654           basis_reduction_rate
3655      into l_itc_amount_rate,
3656           l_basis_reduction_rate
3657      from fa_itc_rates
3658     where itc_amount_id = px_asset_fin_rec_new.itc_amount_id;
3659 
3660    if (px_asset_fin_rec_new.ceiling_name is not null) then
3661       select limit
3662         into l_ceiling_limit
3663         from fa_ceilings
3664        where ceiling_name = px_asset_fin_rec_new.ceiling_name
3665          and px_asset_fin_rec_new.date_placed_in_service between
3666                start_date and nvl(end_date, px_asset_fin_rec_new.date_placed_in_service);
3667    end if;
3668 
3669    if (nvl(l_ceiling_limit, 0) = 0) then
3670       px_asset_fin_rec_new.itc_basis := px_asset_fin_rec_new.cost;
3671    else
3672       px_asset_fin_rec_new.itc_basis := least(px_asset_fin_rec_new.cost, l_ceiling_limit);
3673    end if;
3674 
3675 
3676    px_asset_fin_rec_new.itc_amount := px_asset_fin_rec_new.itc_basis * l_itc_amount_rate;
3677 
3678    -- ????
3679 
3680    -- round the amounts
3681    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.itc_amount,
3682                               p_asset_hdr_rec.book_type_code,
3683                               p_asset_hdr_rec.set_of_books_id,
3684                               p_log_level_rec => p_log_level_rec) then
3685       raise calc_err;
3686    end if;
3687 
3688    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.itc_basis,
3689                               p_asset_hdr_rec.book_type_code,
3690                               p_asset_hdr_rec.set_of_books_id,
3691                               p_log_level_rec => p_log_level_rec) then
3692       raise calc_err;
3693    end if;
3694 
3695 
3696    return true;
3697 
3698 EXCEPTION
3699    when calc_err then
3700       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3701       return false;
3702 
3703    when others then
3704       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3705       return false;
3706 
3707 END calc_itc_info;
3708 
3709 FUNCTION calc_salvage_value
3710    (p_trans_rec               IN     FA_API_TYPES.trans_rec_type,
3711     p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
3712     p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
3713     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
3714     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
3715     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3716     p_mrc_sob_type_code       IN     VARCHAR2
3717    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3718 
3719    calc_err         EXCEPTION;
3720    l_calling_fn     VARCHAR2(40) := 'fa_asset_calc_pvt.calc_salvage_value';
3721 
3722 BEGIN
3723 
3724    if (p_log_level_rec.statement_level) then
3725       fa_debug_pkg.add(l_calling_fn,
3726                        'old salvage type',
3727                        p_asset_fin_rec_old.salvage_type, p_log_level_rec => p_log_level_rec);
3728       fa_debug_pkg.add(l_calling_fn,
3729                        'adj salvage type',
3730                        p_asset_fin_rec_adj.salvage_type, p_log_level_rec => p_log_level_rec);
3731       fa_debug_pkg.add(l_calling_fn,
3732                        'delta salvage',
3733                        p_asset_fin_rec_adj.salvage_value, p_log_level_rec => p_log_level_rec);
3734       fa_debug_pkg.add(l_calling_fn,
3735                        'delta percent salvage',
3736                        p_asset_fin_rec_adj.percent_salvage_value, p_log_level_rec => p_log_level_rec);
3737    end if;
3738 
3739    -- note that the addition api will already derive the type
3740    -- so it should never be null here, but placing just in case
3741 
3742    if (p_asset_type_rec.asset_type = 'GROUP') then
3743       px_asset_fin_rec_new.salvage_type :=
3744          nvl(p_asset_fin_rec_adj.salvage_type,
3745             nvl(p_asset_fin_rec_old.salvage_type, 'PCT'));
3746    else
3747       px_asset_fin_rec_new.salvage_type :=
3748          nvl(p_asset_fin_rec_adj.salvage_type,
3749             nvl(p_asset_fin_rec_old.salvage_type, 'AMT'));
3750    end if;
3751 
3752    if (p_log_level_rec.statement_level) then
3753       fa_debug_pkg.add(l_calling_fn,
3754                        'salvage type',
3755                        px_asset_fin_rec_new.salvage_type, p_log_level_rec => p_log_level_rec);
3756    end if;
3757 
3758    if (px_asset_fin_rec_new.salvage_type = 'SUM' and
3759        p_asset_type_rec.asset_type <> 'GROUP') then
3760       fa_srvr_msg.add_message(
3761          calling_fn => l_calling_fn,
3762          name       => '***FA_NO_SUM_NO_GROUP***',
3763                    p_log_level_rec => p_log_level_rec);
3764       raise calc_err;
3765    elsif (px_asset_fin_rec_new.salvage_type = 'AMT' and
3766        p_asset_type_rec.asset_type = 'GROUP') then
3767       fa_srvr_msg.add_message(
3768          calling_fn => l_calling_fn,
3769          name       => '***FA_NO_SAL_AMT_FOR_GROUP***',
3770                    p_log_level_rec => p_log_level_rec);
3771       raise calc_err;
3772    elsif (px_asset_fin_rec_new.salvage_type <> 'AMT' and
3773           px_asset_fin_rec_new.salvage_type <> 'PCT' and
3774           px_asset_fin_rec_new.salvage_type <> 'SUM') then
3775       fa_srvr_msg.add_message(
3776          calling_fn => l_calling_fn,
3777          name       => 'FA_INVALID_PARAMETER',
3778          token1     => 'VALUE',
3779          value1     => px_asset_fin_rec_new.salvage_type,
3780          token2     => 'PARAM',
3781          value2     => 'SALVAGE_TYPE', p_log_level_rec => p_log_level_rec);
3782       raise calc_err;
3783    end if;
3784 
3785 
3786 
3787    -- enhancing for group and core to allow direct percentage
3788    -- entry for the assets and not just defaults from category
3789    -- note that we initially set the new value for the salvage %
3790    -- in calc_new_amounts and use that here.
3791    --
3792    -- NOTE: we loaded the "new.type" value previously
3793 
3794    if (px_asset_fin_rec_new.salvage_type = 'PCT') then
3795 
3796       px_asset_fin_rec_new.percent_salvage_value := (nvl(p_asset_fin_rec_adj.percent_salvage_value, 0) +
3797                                                      nvl(p_asset_fin_rec_old.percent_salvage_value, 0));
3798 
3799       px_asset_fin_rec_new.salvage_value := (px_asset_fin_rec_new.cost *
3800                                              px_asset_fin_rec_new.percent_salvage_value);
3801 
3802       if not FA_UTILS_PKG.faxceil(px_asset_fin_rec_new.salvage_value,
3803                                   p_asset_hdr_rec.book_type_code,
3804                                   p_asset_hdr_rec.set_of_books_id,
3805                                   p_log_level_rec => p_log_level_rec) then
3806          raise calc_err;
3807       end if;
3808 
3809    elsif (px_asset_fin_rec_new.salvage_type = 'SUM') then
3810       -- this is used only for group assets
3811       -- performance may not be too great here
3812 
3813       -- BUG# 3198440
3814       -- for additions (old rec is null) just set to 0
3815       px_asset_fin_rec_new.percent_salvage_value := null;
3816 
3817       if (p_asset_fin_rec_old.salvage_type is null) then
3818          px_asset_fin_rec_new.salvage_value := 0;
3819       elsif (p_asset_fin_rec_old.salvage_type <> 'SUM') then
3820          if (p_mrc_sob_type_code <> 'R') then
3821             select nvl(sum(salvage_value), 0)
3822               into px_asset_fin_rec_new.salvage_value
3823               from fa_books bk,
3824                    fa_additions_b ad
3825              where bk.transaction_header_id_out is null
3826                and bk.group_asset_id = p_asset_hdr_rec.asset_id
3827                and bk.asset_id = ad.asset_id
3828                and bk.book_type_code = p_asset_hdr_rec.book_type_code
3829                and ad.asset_type = 'CAPITALIZED';
3830          else
3831             select nvl(sum(salvage_value), 0)
3832               into px_asset_fin_rec_new.salvage_value
3833               from fa_mc_books bk,
3834                    fa_additions_b ad
3835              where bk.transaction_header_id_out is null
3836                and bk.group_asset_id = p_asset_hdr_rec.asset_id
3837                and bk.asset_id = ad.asset_id
3838                and bk.book_type_code = p_asset_hdr_rec.book_type_code
3839                and ad.asset_type = 'CAPITALIZED'
3840                and bk.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3841          end if;
3842       else
3843          px_asset_fin_rec_new.salvage_value :=
3844                             nvl(p_asset_fin_rec_adj.salvage_value, 0) +
3845                             nvl(p_asset_fin_rec_old.salvage_value, 0);
3846       end if;
3847 
3848    else -- AMT
3849 
3850       px_asset_fin_rec_new.percent_salvage_value := null;
3851 
3852       if (p_mrc_sob_type_code <> 'R') then
3853          -- delta salvage amount may or may not be null
3854          -- use it or 0 for the delta
3855 
3856          -- NOTE: when changing types, the delta is treated as the new amount
3857          -- we will not add to the prior value that may have been
3858          -- existed/calculated from previous type of PCT or SUM
3859 
3860          if (nvl(p_asset_fin_rec_old.salvage_type, 'AMT') <> 'AMT') then
3861             px_asset_fin_rec_new.salvage_value := nvl(p_asset_fin_rec_adj.salvage_value, 0);
3862          else
3863             px_asset_fin_rec_new.salvage_value := nvl(p_asset_fin_rec_adj.salvage_value, 0) +
3864                                                   nvl(p_asset_fin_rec_old.salvage_value, 0);
3865          end if;
3866 
3867          -- BUG# 3873652
3868          if (px_asset_fin_rec_new.cost = 0) then
3869             px_asset_fin_rec_new.salvage_value := 0;
3870          end if;
3871 
3872          G_primary_salvage_value := px_asset_fin_rec_new.salvage_value;
3873 
3874       else
3875          if (G_primary_new_cost <> 0) then
3876             px_asset_fin_rec_new.salvage_value := G_primary_salvage_value *
3877                                                   (px_asset_fin_rec_new.cost / G_primary_new_cost);
3878          else
3879             px_asset_fin_rec_new.salvage_value := 0;
3880          end if;
3881       end if;
3882    end if;
3883 
3884    -- round the amount
3885    if not FA_UTILS_PKG.faxrnd(px_asset_fin_rec_new.salvage_value,
3886                               p_asset_hdr_rec.book_type_code,
3887                               p_asset_hdr_rec.set_of_books_id,
3888                               p_log_level_rec => p_log_level_rec) then
3889       raise calc_err;
3890    end if;
3891 
3892    if (p_log_level_rec.statement_level) then
3893       fa_debug_pkg.add(l_calling_fn,
3894                        'new salvage',
3895                        px_asset_fin_rec_new.salvage_value, p_log_level_rec => p_log_level_rec);
3896    end if;
3897 
3898    return true;
3899 
3900 EXCEPTION
3901    when calc_err then
3902       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3903       return false;
3904    when others then
3905       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3906       return false;
3907 
3908 END calc_salvage_value;
3909 
3910 
3911 FUNCTION calc_subcomp_life
3912   (p_trans_rec                IN     FA_API_TYPES.trans_rec_type,
3913    p_asset_hdr_rec            IN     FA_API_TYPES.asset_hdr_rec_type,
3914    p_asset_cat_rec            IN     FA_API_TYPES.asset_cat_rec_type,
3915    p_asset_desc_rec           IN     FA_API_TYPES.asset_desc_rec_type,
3916    p_period_rec               IN     FA_API_TYPES.period_rec_type,
3917    px_asset_fin_rec           IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3918    p_calling_fn               IN     VARCHAR2
3919   , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3920 
3921    l_asset_type_rec FA_API_TYPES.asset_type_rec_type;
3922    l_calling_fn     varchar2(40) := 'fa_asset_calc_pvt.calc_subcomp_life';
3923 
3924    CURSOR RATE_DEF IS
3925    SELECT DISTINCT RATE_SOURCE_RULE
3926      FROM FA_METHODS
3927     WHERE METHOD_CODE = px_asset_fin_rec.deprn_method_code;
3928 
3929    l_rate_source_rule   varchar2(10);
3930 
3931    l_cat_bk_lim              number;
3932    l_min_life_in_months      number;
3933    l_sub_life_rule           varchar2(13);
3934 
3935    CURSOR LIFE1_DEF IS
3936    select nvl(life_in_months,0),
3937           nvl(life_in_months,0),
3938           prorate_date
3939      from fa_books
3940     where book_type_code   = p_asset_hdr_rec.book_type_code
3941       and asset_id         = p_asset_desc_rec.parent_asset_id
3942       and transaction_header_id_out is null;
3943 
3944    l_lim                       number;
3945    l_parent_life               number;
3946    l_parent_prorate_date       date;
3947 
3948    -- can cache bc, ct, use dep_rec fpr fy
3949    CURSOR FY_DEF IS
3950    select round
3951           (nvl(sum
3952                (decode (bc.deprn_allocation_code,'E',
3953                 1/ct.number_per_fiscal_year,
3954                 (cp.end_date + 1 - cp.start_date) /
3955                 (fy.end_date + 1 - fy.start_date))),0) * 12, 0)
3956      from fa_calendar_periods cp,
3957           fa_calendar_types ct,
3958           fa_book_controls bc,
3959           fa_fiscal_year fy
3960     where bc.book_type_code   = p_asset_hdr_rec.book_type_code
3961       and bc.date_ineffective is null
3962       and ct.calendar_type    = bc.prorate_calendar
3963       and ct.fiscal_year_name = bc.fiscal_year_name
3964       and cp.calendar_type    = ct.calendar_type
3965       and ((cp.start_date    >= l_parent_prorate_date and
3966             cp.end_date      <= px_asset_fin_rec.prorate_date) )
3967       and fy.fiscal_year_name = bc.fiscal_year_name
3968       and fy.start_date      <= cp.start_date
3969       and fy.end_date        >= cp.end_date;
3970 
3971 -- excluded due to bug 3872361
3972 /*
3973 or
3974            (cp.start_date    <= l_parent_prorate_date and
3975             cp.end_date      >= l_parent_prorate_date and
3976             cp.start_date    <= px_asset_fin_rec.prorate_date and
3977             cp.end_date      <= px_asset_fin_rec.prorate_date)
3978 */
3979 
3980    l_fy                        number;
3981    l_new_life                  number;
3982 
3983    calc_err                    EXCEPTION;
3984 
3985 BEGIN
3986 
3987    if (p_log_level_rec.statement_level) then
3988       fa_debug_pkg.add(l_calling_fn, 'entering', 'subcomponent life logic', p_log_level_rec => p_log_level_rec);
3989    end if;
3990 
3991    OPEN RATE_DEF;
3992    FETCH RATE_DEF INTO
3993       l_rate_source_rule;
3994 
3995    if (RATE_DEF%NOTFOUND) then
3996       CLOSE RATE_DEF;
3997       fa_srvr_msg.add_message(
3998                 CALLING_FN => l_calling_fn,
3999                 NAME => 'FA_SHARED_OBJECT_NOT_DEF',
4000                 TOKEN1 => 'OBJECT',
4001                 VALUE1 => 'Method', p_log_level_rec => p_log_level_rec);
4002       raise calc_err;
4003    else
4004       CLOSE RATE_DEF;
4005    end if;
4006 
4007    if (l_rate_source_rule in ('FLAT', 'PRODUCTION')) then
4008       fa_srvr_msg.add_message(
4009           CALLING_FN => l_calling_fn,
4010           NAME => 'FA_MTH_LFR_INCOMPAT', p_log_level_rec => p_log_level_rec);
4011       raise calc_err;
4012    end if;
4013 
4014    if not fa_cache_pkg.fazccbd
4015             (X_book    => p_asset_hdr_rec.book_type_code,
4016              X_cat_id  => p_asset_cat_rec.category_id,
4017              X_jdpis   => to_number(to_char(px_asset_fin_rec.date_placed_in_service, 'J')),
4018              p_log_level_rec => p_log_level_rec
4019             ) then
4020       raise calc_err;
4021    else
4022       l_cat_bk_lim              := nvl(fa_cache_pkg.fazccbd_record.life_in_months, 0);
4023       l_min_life_in_months      := nvl(fa_cache_pkg.fazccbd_record.minimum_life_in_months, 0);
4024       l_sub_life_rule           := fa_cache_pkg.fazccbd_record.subcomponent_life_rule;
4025    end if;
4026 
4027    -- get the parents info
4028    OPEN LIFE1_DEF;
4029    FETCH LIFE1_DEF INTO
4030          l_lim,
4031          l_parent_life,
4032          l_parent_prorate_date;
4033 
4034    if (LIFE1_DEF%NOTFOUND) then
4035       CLOSE LIFE1_DEF;
4036       fa_srvr_msg.add_message(
4037                CALLING_FN => l_calling_fn,
4038                NAME => 'FA_PARENT_BKS_NOT_EXIST', p_log_level_rec => p_log_level_rec);
4039       raise calc_err;
4040    else
4041       CLOSE LIFE1_DEF;
4042    end if;
4043 
4044    if (p_log_level_rec.statement_level) then
4045       fa_debug_pkg.add(l_calling_fn, 'l_cat_bk_lim',          l_cat_bk_lim, p_log_level_rec => p_log_level_rec);
4046       fa_debug_pkg.add(l_calling_fn, 'l_min_life_in_months',  l_min_life_in_months, p_log_level_rec => p_log_level_rec);
4047       fa_debug_pkg.add(l_calling_fn, 'l_sub_life_rule',       l_sub_life_rule, p_log_level_rec => p_log_level_rec);
4048       fa_debug_pkg.add(l_calling_fn, 'l_lim',                 l_lim, p_log_level_rec => p_log_level_rec);
4049       fa_debug_pkg.add(l_calling_fn, 'l_parent_life',         l_parent_life, p_log_level_rec => p_log_level_rec);
4050       fa_debug_pkg.add(l_calling_fn, 'l_parent_prorate_date', l_parent_prorate_date, p_log_level_rec => p_log_level_rec);
4051       fa_debug_pkg.add(l_calling_fn, 'l_rate_source_rule',    l_rate_source_rule, p_log_level_rec => p_log_level_rec);
4052    end if;
4053 
4054    if (l_sub_life_rule = 'SAME LIFE') then
4055       if (l_lim  = 0) then
4056          l_lim := l_cat_bk_lim;
4057          fa_srvr_msg.add_message(
4058                CALLING_FN => l_calling_fn,
4059                NAME       => 'FA_PARENT_LIFE_NOT_SETUP', p_log_level_rec => p_log_level_rec);
4060          raise calc_err;
4061       end if;
4062    elsif (l_sub_life_rule = 'SAME END DATE') then
4063       if (l_parent_life = 0) then
4064          l_lim := l_cat_bk_lim;
4065          fa_srvr_msg.add_message(
4066                CALLING_FN => l_calling_fn,
4067                NAME       => 'FA_PARENT_LIFE_NOT_SETUP', p_log_level_rec => p_log_level_rec);
4068          raise calc_err;
4069       else
4070 
4071          -- need to derive the prorate convention and date if
4072          -- needed here as this is being called before
4073          -- the calc engine for an addition and cursor will
4074          -- return 0
4075 
4076          if (px_asset_fin_rec.prorate_convention_code is null) then
4077             px_asset_fin_rec.prorate_convention_code   :=
4078                fa_cache_pkg.fazccbd_record.prorate_convention_code;
4079          end if;
4080 
4081          -- just needs to be <> GROUP
4082          l_asset_type_rec.asset_type := 'CAPITALIZED';
4083 
4084          if not calc_prorate_date
4085               (p_asset_hdr_rec           => p_asset_hdr_rec,
4086                p_asset_type_rec          => l_asset_type_rec,
4087                p_asset_fin_rec_adj       => px_asset_fin_rec,
4088                px_asset_fin_rec_new      => px_asset_fin_rec,
4089                p_period_rec              => p_period_rec,
4090                p_log_level_rec           => p_log_level_rec
4091               ) then
4092             raise calc_err;
4093          end if;
4094 
4095          if (p_log_level_rec.statement_level) then
4096             fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec.prorate_date ', px_asset_fin_rec.prorate_date , p_log_level_rec => p_log_level_rec);
4097          end if;
4098 
4099 
4100          l_fy := 0;
4101          OPEN FY_DEF;
4102          FETCH FY_DEF INTO l_fy;
4103          if (FY_DEF%NOTFOUND) then
4104             CLOSE FY_DEF;
4105             fa_srvr_msg.add_message(
4106                CALLING_FN => l_calling_fn,
4107                NAME => 'FA_SHARED_OBJECT_NOT_DEF',
4108                TOKEN1 => 'OBJECT',
4109                VALUE1 => 'Fiscal Year or Calendar Period', p_log_level_rec => p_log_level_rec);
4110             raise calc_err;
4111          end if;
4112          CLOSE FY_DEF;
4113 
4114          if (p_log_level_rec.statement_level) then
4115             fa_debug_pkg.add(l_calling_fn, 'l_fy', l_fy, p_log_level_rec => p_log_level_rec);
4116          end if;
4117 
4118          -- If the parent asset is fully reserved i.e it's remaining life as
4119          -- computed here is <= 0 then the life of the subcomponent asset
4120          -- is one month.
4121 
4122          if (l_fy >= l_parent_life) then
4123             -- If the parent asset is fully rsvd
4124             l_lim := 1;
4125          else
4126             -- The life is the lesser of the Category's life and parent's remaining life
4127             -- BUG# 1898874 - correcting the check to use l_cat_bk_lim instead of l_lim
4128             -- so that this is actually what happens.  Previously, the same end date
4129             -- was always implemented no matter how much the child's life was inflated.
4130             --     bridgway   07/24/01
4131 
4132             if ((l_parent_life - l_fy) < l_cat_bk_lim) then
4133                l_lim := l_parent_life - l_fy;
4134             else
4135                l_lim := l_cat_bk_lim;
4136             end if;
4137 
4138             if (l_lim < l_min_life_in_months) then
4139                if (l_cat_bk_lim < l_min_life_in_months) then
4140                   l_lim := l_min_life_in_months;
4141                else
4142                   l_lim := l_cat_bk_lim;
4143                end if;
4144             end if;
4145 
4146          end if;  -- If the parent asset is fully reserved
4147 
4148       end if;  -- If parent's life is not setup
4149 
4150    else
4151 
4152       l_lim := l_cat_bk_lim;
4153 
4154    end if;
4155 
4156    --  l_new_life := 0;  -- Change to l_lim to fix bug 737503
4157    l_new_life := l_lim;
4158 
4159    if (p_log_level_rec.statement_level) then
4160       fa_debug_pkg.add(l_calling_fn, 'calling',        'validate_life', p_log_level_rec => p_log_level_rec);
4161       fa_debug_pkg.add(l_calling_fn, 'p_deprn_method', px_asset_fin_rec.deprn_method_code, p_log_level_rec => p_log_level_rec);
4162       fa_debug_pkg.add(l_calling_fn, 'l_cat_bk_lim',   l_cat_bk_lim, p_log_level_rec => p_log_level_rec);
4163       fa_debug_pkg.add(l_calling_fn, 'l_lim',          l_lim, p_log_level_rec => p_log_level_rec);
4164       fa_debug_pkg.add(l_calling_fn, 'l_new_life',     l_new_life, p_log_level_rec => p_log_level_rec);
4165    end if;
4166 
4167    if not fa_asset_val_pvt.validate_life
4168             (p_deprn_method      => px_asset_fin_rec.deprn_method_code,
4169              p_rate_source_rule  => l_rate_source_rule,
4170              p_life_in_months    => l_cat_bk_lim,
4171              p_lim               => l_lim,
4172              p_user_id           => p_trans_rec.who_info.last_updated_by,
4173              p_curr_date         => p_trans_rec.who_info.last_update_date,
4174              px_new_life         => l_new_life,
4175              p_calling_fn        => l_calling_fn
4176             , p_log_level_rec => p_log_level_rec) then
4177       raise calc_err;
4178    else
4179 
4180       if (l_new_life <> 0) then
4181          px_asset_fin_rec.life_in_months := l_new_life;
4182       end if;
4183 
4184    end if;
4185 
4186    return TRUE;
4187 
4188 
4189 EXCEPTION
4190    when calc_err then
4191       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4192       return false;
4193 
4194    when others then
4195       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4196       return false;
4197 
4198 END calc_subcomp_life;
4199 
4200 
4201 
4202 FUNCTION calc_flags
4203   (p_trans_rec               IN     FA_API_TYPES.trans_rec_type,
4204    p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
4205    p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
4206    p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
4207    px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
4208    p_asset_deprn_rec         IN     FA_API_TYPES.asset_deprn_rec_type,
4209    p_period_rec              IN     FA_API_TYPES.period_rec_type
4210    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
4211 
4212    l_first_period number := 0;
4213 
4214    l_current_fiscal_year number;
4215    l_fiscal_year_name    varchar2(30);
4216 
4217    l_rate_source_rule      varchar2(10);
4218    l_deprn_basis_rule      varchar2(4);
4219 
4220    l_depreciate_flag       varchar2(3);
4221    l_dep_flag_thid         number;
4222    l_count_dep_flag        number;
4223 
4224    l_sty_success           varchar2(3) := 'NO';
4225    l_calling_fn            varchar2(40) := 'fa_asset_calc_pvt.calc_flags';
4226 
4227    calc_err                EXCEPTION;
4228 
4229 BEGIN
4230 
4231    -- this logic needs verification - ref faxfa2b.pls
4232 
4233    l_current_fiscal_year := fa_cache_pkg.fazcbc_record.current_fiscal_year;
4234    l_fiscal_year_name    := fa_cache_pkg.fazcbc_record.fiscal_year_name;
4235 
4236    if not fa_cache_pkg.fazccmt
4237           ( X_method                => px_asset_fin_rec_new.Deprn_Method_Code
4238            ,X_life                  => px_asset_fin_rec_new.Life_In_Months, p_log_level_rec => p_log_level_rec) then
4239       raise calc_err;
4240    end if;
4241 
4242       l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
4243       l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
4244 
4245 
4246    px_asset_fin_rec_new.cost_change_flag        := 'NO';
4247    px_asset_fin_rec_new.retirement_pending_flag := 'NO';
4248 
4249 
4250    if (p_asset_type_rec.asset_type = 'CAPITALIZED' or
4251        p_asset_type_rec.asset_type = 'CIP' or
4252        p_asset_type_rec.asset_type = 'GROUP') then
4253 
4254       px_asset_fin_rec_new.capitalize_flag := 'YES';
4255       --  changed the following logic to mirror the forms
4256       --  though there discrepancies between faxfa1b.pls
4257 
4258       -- SLA Uptake
4259       -- since we're taking the catchup here,
4260       -- reset flags as if no catchup is needed
4261 
4262       if ((p_asset_hdr_rec.period_of_addition = 'Y') or
4263           (p_asset_hdr_rec.period_of_addition = 'N' and
4264            p_trans_rec.transaction_type_code = 'ADDITION')) then
4265 
4266          if (p_asset_deprn_rec.deprn_reserve <> 0) then     -- reserve
4267                /* Bug 8408871 - when reserve supplied no catchup required for any asset type */
4268                px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4269                px_asset_fin_rec_new.annual_deprn_rounding_flag := 'RES';
4270          else
4271 
4272             if (px_asset_fin_rec_new.date_placed_in_service >= p_period_rec.calendar_period_open_date and
4273                 px_asset_fin_rec_new.date_placed_in_service <=  p_period_rec.calendar_period_close_date) then
4274                px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4275                px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4276             else -- not a current period addition
4277 
4278                if (px_asset_fin_rec_new.date_placed_in_service >= p_period_rec.fy_start_date and
4279                    px_asset_fin_rec_new.date_placed_in_service <= p_period_rec.fy_end_date ) then
4280                   px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4281                   px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4282                else -- backdated addition to prior year
4283                   px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADD';
4284                   px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4285                end if;
4286             end if;
4287 
4288             -- BUG# 2522675
4289             -- when asset is set to amortize nbv, the adj_req flag must be
4290             -- set to none to avoid any additional catchup
4291             if ((p_trans_rec.transaction_subtype = 'AMORTIZED' and
4292                  p_asset_type_rec.asset_type = 'CAPITALIZED') or
4293                 (p_asset_type_rec.asset_type = 'GROUP')) then
4294                px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4295             end if;
4296 
4297             -- Bug4401476: Set rounding falg to RES if it is amortize nbv
4298             -- to avoid huge catchup even though entered reserve is 0..
4299             if (p_trans_rec.transaction_subtype = 'AMORTIZED' and
4300                  p_asset_type_rec.asset_type = 'CAPITALIZED') then
4301                px_asset_fin_rec_new.annual_deprn_rounding_flag := 'RES';
4302             end if;
4303 
4304          end if;
4305 
4306       else  -- adjustment
4307 
4308          -- BUG# 3516246
4309          -- when adjustment is performed in period of capitalization
4310          -- we need to set to NONE and avoid catchup.
4311 
4312          if (p_asset_fin_rec_old.adjustment_required_status = 'ADD') then
4313             px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4314          else
4315             px_asset_fin_rec_new.adjustment_required_status :=
4316                p_asset_fin_rec_old.adjustment_required_status;
4317          end if;
4318 
4319          -- Bug#3709494
4320          -- if the asset was added with the depreciate_flag set to NO
4321          -- and this is the FIRST time that we are changing it to YES,
4322          -- then perform catchup by setting adjustment_required_status to
4323          -- ADD.
4324 
4325          -- R12 conditional logic
4326          if (G_release <> 11) then
4327             if (p_asset_fin_rec_old.adjustment_required_status = 'ADD') then
4328 
4329             -- Bug#3709494
4330             -- if the asset was added with the depreciate_flag set to NO
4331             -- and this is the FIRST time that we are changing it to YES,
4332             -- then perform catchup by setting adjustment_required_status to
4333             -- ADD.
4334 
4335             -- SLA: revisit this as catchup must occur at time of trx now!!!!
4336             -- ****
4337 
4338                if (nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'NO') then
4339                   --SLA: no need for flag, take catchup now
4340                   -- catchup
4341                   px_asset_fin_rec_new.adjustment_required_status :=
4342                      p_asset_fin_rec_old.adjustment_required_status;
4343 
4344                else
4345                   -- No catchup
4346                   px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4347                end if;
4348             else
4349                px_asset_fin_rec_new.adjustment_required_status :=
4350                   p_asset_fin_rec_old.adjustment_required_status;
4351             end if;
4352 
4353          elsif ((nvl(p_asset_fin_rec_old.depreciate_flag, 'YES') = 'NO') and
4354              (nvl(px_asset_fin_rec_new.depreciate_flag, 'YES') = 'YES')) then
4355 
4356             -- We confirmed that we have changed the depreciate_flag from
4357             -- NO to YES.  Now we need to check if this is the asset were
4358             -- originally NO, and this is the first time it was changed to YES.
4359 
4360             begin
4361 
4362                select bk.depreciate_flag,
4363                       bk.transaction_header_id_in
4364                into   l_depreciate_flag,
4365                       l_dep_flag_thid
4366                from   fa_books bk,
4367                       fa_transaction_headers th
4368                where  th.asset_id = p_asset_hdr_rec.asset_id
4369                and    th.book_type_code = p_asset_hdr_rec.book_type_code
4370                and    th.transaction_type_code = 'ADDITION'
4371                and    th.transaction_header_id = bk.transaction_header_id_in;
4372             exception
4373                when others then
4374                   l_depreciate_flag := 'YES';
4375             end;
4376 
4377             if (l_depreciate_flag = 'NO') then
4378 
4379                -- The flag was originally NO.   Now is this the first change?
4380                begin
4381 
4382                   select count(*)
4383                   into   l_count_dep_flag
4384                   from   fa_books
4385                   where  asset_id = p_asset_hdr_rec.asset_id
4386                   and    book_type_code = p_asset_hdr_rec.book_type_code
4387                   and    depreciate_flag = 'YES'
4388                   and    transaction_header_id_in >= l_dep_flag_thid
4389                   and    transaction_header_id_in <> p_trans_rec.transaction_header_id; /*Bug# 8631034 - For MRC */
4390 
4391                exception
4392                   when others then
4393                      l_count_dep_flag := 1;
4394                end;
4395 
4396                if (l_count_dep_flag = 0) then
4397                   -- catchup
4398                   -- Bug:5385123
4399                   if p_trans_rec.transaction_subtype <> 'AMORTIZED' then
4400                       px_asset_fin_rec_new.adjustment_required_status := 'ADD';
4401                   end if;
4402                end if;
4403             end if;
4404          end if;
4405 
4406          -- BUG# 2678718
4407          -- removing prior logic for checking first period
4408          -- of fiscal year and always setting flag to ADJ
4409 
4410          /*
4411          select count(1)
4412            into l_first_period
4413            from fa_fiscal_year fy,
4414                 fa_deprn_periods dp
4415           where l_fiscal_year_name           = fy.fiscal_year_name
4416             and l_current_fiscal_year        = fy.fiscal_year
4417             and dp.book_type_code            = p_asset_hdr_rec.book_type_code
4418             and dp.calendar_period_open_date = fy.start_date
4419             and p_trans_rec.transaction_date_entered   between
4420                      dp.calendar_period_open_date and
4421                      dp.calendar_period_close_date
4422             and rownum < 2;
4423 
4424          if (l_first_period = 0) then
4425              px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADJ';
4426          else
4427 
4428             if l_rate_source_rule = 'FLAT' then
4429                px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADJ';
4430             else
4431                px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4432             end if;
4433 
4434          end if;
4435 
4436          */
4437 
4438          px_asset_fin_rec_new.annual_deprn_rounding_flag := 'ADJ';
4439 
4440       end if;
4441 
4442    else -- expensed asset
4443 
4444       px_asset_fin_rec_new.adjustment_required_status := 'NONE';
4445       px_asset_fin_rec_new.annual_deprn_rounding_flag := NULL;
4446       px_asset_fin_rec_new.capitalize_flag            := 'NO';
4447 
4448    end if;
4449 
4450 /*
4451    -- calculate the short tax and formula info
4452    if (l_Rate_Source_Rule = 'FORMULA') then
4453 
4454       -- Get current fiscal year start and end dates.
4455 
4456       fa_short_tax_years_pkg.calculate_short_tax_vals(
4457                 X_Asset_Id                      => p_asset_hdr_rec.Asset_Id,
4458                 X_Book_Type_Code                => p_asset_hdr_rec.Book_type_Code,
4459                 -- new columns
4460                 X_Short_Fiscal_Year_Flag        => px_asset_fin_rec_new.Short_Fiscal_Year_Flag,
4461                 X_Date_Placed_In_Service        => px_asset_fin_rec_new.Date_Placed_In_Service,
4462                 X_Deprn_Start_Date              => px_asset_fin_rec_new.Deprn_Start_Date,
4463                 X_Prorate_Date                  => px_asset_fin_rec_new.Prorate_Date,
4464                 X_Conversion_Date               => px_asset_fin_rec_new.Conversion_Date,
4465                 X_Orig_Deprn_Start_Date         => px_asset_fin_rec_new.Orig_Deprn_Start_Date,
4466                 X_Curr_Fy_Start_Date            => p_period_rec.fy_start_date,
4467                 X_Curr_Fy_End_Date              => p_period_rec.fy_end_date,
4468                 X_Life_In_Months                => px_asset_fin_rec_new.Life_In_Months,
4469                 X_Rate_Source_Rule              => l_Rate_Source_Rule,  -- BUG# 2016824
4470                 X_Remaining_Life1               => px_asset_fin_rec_new.remaining_life1,
4471                 X_Remaining_Life2               => px_asset_fin_rec_new.remaining_life2,
4472                 X_Success                       => l_sty_success, p_log_level_rec => p_log_level_rec);
4473 
4474         if (l_sty_success = 'NO') then
4475            raise calc_err;
4476         end if;
4477 
4478    end if;
4479 */
4480 
4481    return true;
4482 
4483 EXCEPTION
4484    when calc_err then
4485       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4486       return false;
4487 
4488    when others then
4489       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4490       return false;
4491 
4492 END calc_flags;
4493 
4494 
4495 FUNCTION calc_deprn_info
4496    (p_trans_rec               IN     FA_API_TYPES.trans_rec_type,
4497     p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
4498     p_asset_desc_rec          IN     FA_API_TYPES.asset_desc_rec_type,
4499     p_asset_cat_rec           IN     FA_API_TYPES.asset_cat_rec_type,
4500     p_asset_type_rec          IN     FA_API_TYPES.asset_type_rec_type,
4501     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
4502     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
4503     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
4504     p_asset_deprn_rec_adj     IN     FA_API_TYPES.asset_deprn_rec_type,
4505     p_asset_deprn_rec_new     IN     FA_API_TYPES.asset_deprn_rec_type,
4506     p_period_rec              IN     FA_API_TYPES.period_rec_type
4507    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
4508 
4509    l_count                       number;
4510    l_result                      boolean;
4511    l_unit_of_measure             FA_BOOKS.UNIT_OF_MEASURE%TYPE;
4512 
4513    l_method_id                   number;
4514    l_rate_source_rule            FA_METHODS.rate_source_rule%TYPE;
4515    l_deprn_basis_rule            FA_METHODS.deprn_basis_rule%TYPE;
4516 
4517    l_last_period_counter         number;
4518    l_calendar_period_open_date   date;
4519    l_calendar_period_close_date  date;
4520    h_prod_method                 number;  -- added this for bug 3245984
4521 
4522    CURSOR unit_of_measure IS
4523           select unit_of_measure
4524             from fa_books
4525            where asset_id           = p_asset_hdr_rec.asset_id
4526              and book_type_code     = fa_cache_pkg.fazcbc_record.distribution_source_book
4527              and transaction_header_id_out  is NULL;
4528 
4529    l_calling_fn                  VARCHAR2(40) := 'fa_asset_calc_pvt.calc_deprn_info';
4530    calc_err                      EXCEPTION;
4531 
4532 BEGIN
4533 
4534    l_last_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter;
4535 
4536    -- NOTE: moved additions defaulting to the private additions apit's init procedure
4537    -- as part of group project...
4538 
4539    -- Set deprn info - "all or nothing"  - this means that if you are changing the
4540    -- method you must provide the other info (life or rates for instance).
4541    -- the semi exception is production capacity which is done above based on delta
4542    if (p_asset_fin_rec_adj.deprn_method_code is not null) then
4543       px_asset_fin_rec_new.deprn_method_code   := p_asset_fin_rec_adj.deprn_method_code;
4544       px_asset_fin_rec_new.life_in_months      := p_asset_fin_rec_adj.life_in_months;
4545       px_asset_fin_rec_new.basic_rate          := p_asset_fin_rec_adj.basic_rate;
4546       px_asset_fin_rec_new.adjusted_rate       := p_asset_fin_rec_adj.adjusted_rate;
4547       px_asset_fin_rec_new.unit_of_measure     := p_asset_fin_rec_adj.unit_of_measure;
4548    else
4549 
4550       if (p_asset_fin_rec_adj.life_in_months      is not null OR
4551           p_asset_fin_rec_adj.basic_rate          is not null OR
4552           p_asset_fin_rec_adj.adjusted_rate       is not null) then
4553           -- nvl(p_asset_fin_rec_adj.production_capacity, 0) <> 0) then
4554          fa_srvr_msg.add_message(
4555              calling_fn => l_calling_fn,
4556              name       => 'FA_EXP_GET_METHOD_INFO', p_log_level_rec => p_log_level_rec);
4557          raise calc_err;
4558       end if;
4559 
4560       if (p_asset_fin_rec_old.deprn_method_code is not null) then
4561          px_asset_fin_rec_new.deprn_method_code   := p_asset_fin_rec_old.deprn_method_code;
4562          px_asset_fin_rec_new.life_in_months      := p_asset_fin_rec_old.life_in_months;
4563          px_asset_fin_rec_new.basic_rate          := p_asset_fin_rec_old.basic_rate;
4564          px_asset_fin_rec_new.adjusted_rate       := p_asset_fin_rec_old.adjusted_rate;
4565          px_asset_fin_rec_new.unit_of_measure     := p_asset_fin_rec_old.unit_of_measure;
4566       end if;
4567 
4568    end if;
4569 
4570 
4571    -- do not allow method change is unplanned has been entered
4572    -- needed to check the methods per BUG# 2435403
4573 --fix for bug no.2536674
4574   /* if (p_trans_rec.transaction_type_code <> 'ADDITION' and
4575        p_trans_rec.transaction_type_code <> 'CIP ADDITION' and
4576        p_trans_rec.transaction_type_code <> 'GROUP ADDITION' and
4577        (p_asset_fin_rec_old.deprn_method_code <>
4578         p_asset_fin_rec_adj.deprn_method_code)) then
4579       if fa_asset_val_pvt.validate_unplanned_exists
4580                (p_book     => p_asset_hdr_rec.book_type_code,
4581                 p_asset_id => p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec) then
4582          fa_srvr_msg.add_message(
4583              calling_fn => 'l_calling_fn',
4584              name       => '***FA_NO_METHOD_CHG_UNP***');
4585          raise calc_err;
4586       end if;
4587    end if;
4588  */
4589 
4590    -- verify deprn information is valid by calling the method
4591    -- cache function - modified from STYR to handle all types.
4592    -- FYI: we MUST call the cache even when there is no method change
4593    -- because of potential impact of the flags on the depreciable
4594    -- basis, deprn_start_date and on adjusted_cost for nbv methods
4595    if not FA_CACHE_PKG.fazccmt(
4596                   X_method                 => px_asset_fin_rec_new.deprn_method_code,
4597                   X_life                   => px_asset_fin_rec_new.life_in_months
4598                  , p_log_level_rec => p_log_level_rec) then
4599       raise calc_err;
4600    end if;
4601 
4602 
4603    l_method_id        := fa_cache_pkg.fazccmt_record.method_id;
4604    l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
4605    l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
4606 
4607    -- verify that basic rate and adj_rate are valid for flat
4608    -- rate methods and that production info is correct
4609 
4610    if (px_asset_fin_rec_new.deprn_method_code is not null) then
4611       if (l_rate_source_rule = 'FLAT') then
4612 
4613          select count(*)
4614            into l_count
4615            from fa_flat_rates
4616           where method_id     = l_method_id
4617             and basic_rate    = px_asset_fin_rec_new.basic_rate
4618             and adjusted_rate = px_asset_fin_rec_new.adjusted_rate;
4619 
4620          if (l_count = 0) then
4621             fa_srvr_msg.add_message(
4622                 calling_fn => l_calling_fn,
4623                 name       => 'FA_SHARED_INVALID_METHOD_RATE', p_log_level_rec => p_log_level_rec);
4624             raise calc_err;
4625          else
4626             px_asset_fin_rec_new.life_in_months      := NULL;
4627             px_asset_fin_rec_new.production_capacity := NULL;
4628             px_asset_fin_rec_new.unit_of_measure     := NULL;
4629          end if;
4630 
4631       elsif (l_rate_source_rule  = 'PRODUCTION') then
4632 
4633          if (px_asset_fin_rec_new.production_capacity is null) then
4634             fa_srvr_msg.add_message(
4635                 calling_fn => l_calling_fn,
4636                 name       => 'FA_BOOKS_NULL_PROD', p_log_level_rec => p_log_level_rec);
4637             raise calc_err;
4638          else
4639             px_asset_fin_rec_new.life_in_months    := NULL;
4640             px_asset_fin_rec_new.adjusted_rate     := NULL;
4641             px_asset_fin_rec_new.basic_rate        := NULL;
4642          end if;
4643 
4644          -- verify corp asset is UOP and get unit of measure
4645          -- Depreciate flag may not be 'NO'
4646          if ( /* (nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ')  <> 'ENERGY PERIOD END BALANCE'
4647               OR p_asset_type_rec.asset_type = 'GROUP') and     Commented for ENH 12600386 */
4648              px_asset_fin_rec_new.depreciate_flag <> 'YES') then    -- Added for bug8584206
4649             fa_srvr_msg.add_message(calling_fn      => l_calling_fn,
4650                                     name            => 'FA_BOOK_INVALID_DEPRN_FLAG',
4651                                     p_log_level_rec => p_log_level_rec);
4652             raise calc_err;
4653          end if;
4654 
4655          if (fa_cache_pkg.fazcbc_record.book_class = 'TAX') then
4656 
4657             select count(1)
4658             into l_count
4659             from fa_books bk,
4660                  fa_methods me
4661             where bk.book_type_code    = fa_cache_pkg.fazcbc_record.distribution_source_book
4662             and bk.asset_id          = p_asset_hdr_rec.asset_id
4663             and bk.transaction_header_id_out is null
4664             and me.method_code       = bk.deprn_method_code
4665             and me.rate_source_rule = 'PRODUCTION';
4666 
4667             if (l_count = 0) then
4668                fa_srvr_msg.add_message(
4669                    calling_fn => l_calling_fn,
4670                    name       => 'FA_MASSCHG_NOT_PROD_IN_CORP', p_log_level_rec => p_log_level_rec);
4671                raise calc_err;
4672             end if;
4673 
4674             OPEN unit_of_measure;
4675             FETCH unit_of_measure INTO px_asset_fin_rec_new.unit_of_measure;
4676             CLOSE unit_of_measure;
4677 
4678          end if;
4679 
4680       elsif (l_rate_source_rule  = 'TABLE') then
4681          px_asset_fin_rec_new.adjusted_rate        := NULL;
4682          px_asset_fin_rec_new.basic_rate           := NULL;
4683          px_asset_fin_rec_new.production_capacity  := NULL;
4684          px_asset_fin_rec_new.unit_of_measure      := NULL;
4685       elsif (l_rate_source_rule  = 'FORMULA') then
4686          px_asset_fin_rec_new.adjusted_rate        := NULL;
4687          px_asset_fin_rec_new.basic_rate           := NULL;
4688 
4689          -- added this for bug 3245984
4690          h_prod_method := instr (fa_cache_pkg.fazcfor_record.formula_actual,'CAPACITY');
4691          -- if the formula has 'CAPACITY' in it, then it is a Production method
4692          -- otherwise, it is a Life method.
4693          if (h_prod_method = 0) then
4694              px_asset_fin_rec_new.production_capacity  := NULL;
4695              px_asset_fin_rec_new.unit_of_measure      := NULL;
4696          end if;
4697 
4698       else
4699          px_asset_fin_rec_new.production_capacity  := NULL;
4700          px_asset_fin_rec_new.unit_of_measure      := NULL;
4701       end if;
4702 
4703    end if; -- new method code is not null
4704 
4705    px_asset_fin_rec_new.adjusted_capacity       := px_asset_fin_rec_new.production_capacity;
4706 
4707 
4708 -- BUG# 4676908
4709    -- make sure the proate period match the method
4710    if (fa_cache_pkg.fazccmt_record.prorate_periods_per_year is not null) then
4711       if not fa_cache_pkg.fazcct
4712                (X_calendar => fa_cache_pkg.fazcbc_record.prorate_calendar, p_log_level_rec => p_log_level_rec) then
4713          raise calc_err;
4714       end if;
4715 
4716       if (fa_cache_pkg.fazccmt_record.prorate_periods_per_year <>
4717           fa_cache_pkg.fazcct_record.number_per_fiscal_year) then
4718          fa_srvr_msg.add_message(
4719              calling_fn => l_calling_fn,
4720              name       => 'FA_INVALID_DEPRN_METHOD', p_log_level_rec => p_log_level_rec);
4721          raise calc_err;
4722       end if;
4723    end if;
4724 
4725    -- verify reserve and ytd = 0 for UOP
4726 
4727    if (p_log_level_rec.statement_level) then
4728       fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.deprn_reserve',
4729                        p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec);
4730       fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.ytd_deprn',
4731                        p_asset_deprn_rec_adj.ytd_deprn, p_log_level_rec);
4732       fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.ltd_prod',
4733                        p_asset_deprn_rec_adj.ltd_production, p_log_level_rec);
4734       fa_debug_pkg.add('calc_fin_info', 'p_asset_deprn_rec_adj.ytd_prod',
4735                        p_asset_deprn_rec_adj.ytd_production, p_log_level_rec);
4736       fa_debug_pkg.add('calc_fin_info', 'px_asset_fin_rec_new.short_fiscal_year_flag',
4737                        px_asset_fin_rec_new.short_fiscal_year_flag, p_log_level_rec);
4738    end if;
4739 
4740    -- modified for bug 8584206
4741    if (l_rate_source_rule  = 'PRODUCTION') and
4742       ( ((nvl(p_trans_rec.transaction_key, 'XX') not in ('MR', 'MS','GC')) and  p_asset_type_rec.asset_type = 'GROUP')
4743         OR
4744          (p_asset_type_rec.asset_type = 'CAPITALIZED' and
4745          ((px_asset_fin_rec_new.depreciate_flag = 'YES'  AND Nvl(fa_cache_pkg.fazcdbr_record.rule_name, 'ZZ')  <> 'ENERGY PERIOD END BALANCE' ) OR
4746           nvl(px_asset_fin_rec_new.group_asset_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM /* OR   Commented and added above for ENH 12600386
4747           fa_cache_pkg.fazcdbr_record.rule_name  <> 'ENERGY PERIOD END BALANCE' */ )) )  then
4748 
4749       if (nvl(p_asset_deprn_rec_adj.deprn_reserve,0) <> 0 OR
4750           nvl(p_asset_deprn_rec_adj.ytd_deprn,0) <> 0) then
4751          fa_srvr_msg.add_message(
4752              calling_fn => l_calling_fn,
4753              name       => 'FA_NO_RESERVE_FOR_PROD', p_log_level_rec => p_log_level_rec);
4754          raise calc_err;
4755       end if;
4756    end if;
4757 
4758    -- verify STY information is valid
4759    if not fa_asset_val_pvt.validate_short_tax_year
4760             (p_book_type_code            => p_asset_hdr_rec.book_type_code,
4761              p_transaction_type_code     => p_trans_rec.transaction_type_code,
4762              p_asset_type                => p_asset_type_rec.asset_type,
4763              p_short_fiscal_year_flag    => px_asset_fin_rec_new.short_fiscal_year_flag,
4764              p_conversion_date           => px_asset_fin_rec_new.conversion_date,
4765              px_orig_deprn_start_date    => px_asset_fin_rec_new.orig_deprn_start_date,
4766              p_date_placed_in_service    => px_asset_fin_rec_new.date_placed_in_service,
4767              p_ytd_deprn                 => p_asset_deprn_rec_new.ytd_deprn,
4768              p_deprn_reserve             => p_asset_deprn_rec_new.deprn_reserve,
4769              p_period_rec                => p_period_rec,
4770              p_calling_fn                => l_calling_fn
4771             , p_log_level_rec => p_log_level_rec) then
4772       raise calc_err;
4773    end if;
4774 
4775    -- Check Bonus Rule
4776 
4777    if (px_asset_fin_rec_new.bonus_rule IS NOT NULL) then
4778       select count(*)
4779         into l_count
4780         from fa_bonus_rules
4781        where bonus_rule = px_asset_fin_rec_new.bonus_rule;
4782 
4783       if (l_count = 0) then
4784          fa_srvr_msg.add_message(
4785              calling_fn => l_calling_fn,
4786              name       => 'FA_INVALID_BONUS_RULE', p_log_level_rec => p_log_level_rec);
4787          raise calc_err;
4788       end if;
4789    end if;
4790 
4791 
4792    -- check super group
4793    if (l_rate_source_rule <> 'FLAT' and
4794        px_asset_fin_rec_new.super_group_id is not null) then
4795       fa_srvr_msg.add_message(
4796           calling_fn => l_calling_fn,
4797           name       => '***FA_NO_SUPER_NO_FLAT***',
4798                    p_log_level_rec => p_log_level_rec);
4799       raise calc_err;
4800    end if;
4801 
4802    return true;
4803 
4804 EXCEPTION
4805    when calc_err then
4806       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4807       return false;
4808 
4809    when others then
4810       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4811       return false;
4812 
4813 END calc_deprn_info;
4814 
4815 
4816 FUNCTION calc_group_info
4817    (p_trans_rec               IN     FA_API_TYPES.trans_rec_type,
4818     p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
4819     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
4820     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
4821     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
4822     p_asset_deprn_rec_old     IN     FA_API_TYPES.asset_deprn_rec_type
4823    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean IS
4824 
4825   CURSOR c_find_member_asset IS
4826    SELECT 'Y'
4827      FROM FA_BOOKS
4828     WHERE GROUP_ASSET_ID = p_asset_hdr_rec.asset_id
4829       AND BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
4830       AND TRANSACTION_HEADER_ID_OUT is NULL;
4831 
4832    l_calling_fn                  VARCHAR2(40) := 'fa_asset_calc_pvt.calc_group_info';
4833 
4834    l_member_exists               VARCHAR2(1) := null;
4835 
4836    calc_err                      EXCEPTION;
4837 
4838 BEGIN
4839 
4840    -- this will validate/set all the new group asset flags
4841    -- note that  the addition api has already defaulted the
4842    -- values if they weren't specified.  here we need to
4843    -- check for changes and validate the values
4844 
4845    -- +++++ Reduction Rate +++++
4846 
4847    px_asset_fin_rec_new.reduction_rate :=
4848          nvl(p_asset_fin_rec_adj.reduction_rate, 0) +
4849          nvl(p_asset_fin_rec_old.reduction_rate, 0);
4850 
4851    --
4852    -- Function call fazccmt is mandatory before calling this function.
4853    -- Currently fazccmt is called in calc_deprn_info and calc_flag which
4854    -- is called from calc_derived_amounts.
4855    -- If calc_deprn_info is called before this function, then I can simply use
4856    -- new so don't need this much of the code.
4857    if (p_asset_fin_rec_adj.deprn_method_code is not null) then
4858       if not fa_cache_pkg.fazccmt
4859                  (X_method => p_asset_fin_rec_adj.Deprn_Method_Code,
4860                   X_life   => p_asset_fin_rec_adj.Life_In_Months
4861                  , p_log_level_rec => p_log_level_rec) then
4862          raise calc_err;
4863       end if;
4864    else
4865       if not fa_cache_pkg.fazccmt
4866                  (X_method => p_asset_fin_rec_old.Deprn_Method_Code,
4867                   X_life   => p_asset_fin_rec_old.Life_In_Months
4868                  , p_log_level_rec => p_log_level_rec) then
4869          raise calc_err;
4870       end if;
4871    end if;
4872 
4873    if (nvl(fa_cache_pkg.fazcdrd_record.allow_reduction_rate_flag, 'N') = 'N') then
4874       px_asset_fin_rec_new.reduction_rate := to_number(null);
4875    end if;
4876 
4877 
4878    FA_UTIL_PVT.load_char_value
4879         (p_char_old  => p_asset_fin_rec_old.over_depreciate_option,
4880          p_char_adj  => p_asset_fin_rec_adj.over_depreciate_option,
4881          x_char_new  => px_asset_fin_rec_new.over_depreciate_option
4882         , p_log_level_rec => p_log_level_rec);
4883 
4884    --
4885    -- Set Over Depreciate to 'NO'
4886    --  1. If it is set to DEPRN and FLAT-NBV method
4887    --  2. If it is not NO and there is some deprn limit
4888    --
4889    if (fa_cache_pkg.fazcbc_record.book_class = 'TAX') then
4890 
4891       if (px_asset_fin_rec_new.over_depreciate_option =
4892           fa_std_types.FA_OVER_DEPR_DEPRN) and
4893          (fa_cache_pkg.fazccmt_record.rate_source_rule = 'FLAT' and
4894           fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'NBV') then
4895          px_asset_fin_rec_new.over_depreciate_option :=
4896             fa_std_types.FA_OVER_DEPR_NO;
4897       end if;
4898 
4899    end if;
4900 
4901    -- +++++ Over Depreciate +++++
4902    -- Validation moved to fa_asset_val_pvt.validate_over_depreciate
4903 
4904    -- +++++ Reduction Flags +++++
4905    if (px_asset_fin_rec_new.reduction_rate is null) then
4906       px_asset_fin_rec_new.reduce_addition_flag := null;
4907       px_asset_fin_rec_new.reduce_adjustment_flag := null;
4908       px_asset_fin_rec_new.reduce_retirement_flag := null;
4909    else
4910      FA_UTIL_PVT.load_char_value
4911           (p_char_old  => p_asset_fin_rec_old.reduce_addition_flag,
4912            p_char_adj  => p_asset_fin_rec_adj.reduce_addition_flag,
4913            x_char_new  => px_asset_fin_rec_new.reduce_addition_flag
4914           , p_log_level_rec => p_log_level_rec);
4915      FA_UTIL_PVT.load_char_value
4916           (p_char_old  => p_asset_fin_rec_old.reduce_adjustment_flag,
4917            p_char_adj  => p_asset_fin_rec_adj.reduce_adjustment_flag,
4918            x_char_new  => px_asset_fin_rec_new.reduce_adjustment_flag
4919           , p_log_level_rec => p_log_level_rec);
4920      FA_UTIL_PVT.load_char_value
4921           (p_char_old  => p_asset_fin_rec_old.reduce_retirement_flag,
4922            p_char_adj  => p_asset_fin_rec_adj.reduce_retirement_flag,
4923            x_char_new  => px_asset_fin_rec_new.reduce_retirement_flag
4924           , p_log_level_rec => p_log_level_rec);
4925    end if;
4926 
4927    -- +++++ Retirement and Tracking Options +++++
4928    -- From here, these values are not updateable
4929    -- once depreciation is run or first member asset
4930    -- is added.
4931 
4932    if (p_asset_hdr_rec.period_of_addition = 'Y') then
4933       OPEN c_find_member_asset;
4934       FETCH c_find_member_asset INTO l_member_exists;
4935 
4936       if (c_find_member_asset%NOTFOUND) then
4937         l_member_exists := 'N';
4938       end if;
4939 
4940       CLOSE c_find_member_asset;
4941 
4942    end if;
4943 
4944    if (p_asset_hdr_rec.period_of_addition <> 'Y') or
4945       (l_member_exists = 'Y') then
4946 
4947       px_asset_fin_rec_new.recognize_gain_loss :=
4948                   p_asset_fin_rec_old.recognize_gain_loss;
4949 
4950       px_asset_fin_rec_new.recapture_reserve_flag :=
4951                   p_asset_fin_rec_old.recapture_reserve_flag;
4952 
4953       px_asset_fin_rec_new.limit_proceeds_flag :=
4954                   p_asset_fin_rec_old.limit_proceeds_flag;
4955 
4956       px_asset_fin_rec_new.terminal_gain_loss :=
4957                   p_asset_fin_rec_old.terminal_gain_loss;
4958 
4959       px_asset_fin_rec_new.exclude_proceeds_from_basis :=
4960                   p_asset_fin_rec_old.exclude_proceeds_from_basis;
4961 
4962       px_asset_fin_rec_new.retirement_deprn_option :=
4963                   p_asset_fin_rec_old.retirement_deprn_option;
4964 
4965       px_asset_fin_rec_new.tracking_method :=
4966                   p_asset_fin_rec_old.tracking_method;
4967 
4968       px_asset_fin_rec_new.allocate_to_fully_rsv_flag :=
4969                   p_asset_fin_rec_old.allocate_to_fully_rsv_flag;
4970 
4971       px_asset_fin_rec_new.allocate_to_fully_ret_flag :=
4972                   p_asset_fin_rec_old.allocate_to_fully_ret_flag;
4973 
4974       px_asset_fin_rec_new.excess_allocation_option :=
4975                   p_asset_fin_rec_old.excess_allocation_option;
4976 
4977       px_asset_fin_rec_new.depreciation_option :=
4978                   p_asset_fin_rec_old.depreciation_option;
4979 
4980       px_asset_fin_rec_new.member_rollup_flag :=
4981                   p_asset_fin_rec_old.member_rollup_flag;
4982 
4983    else -- No member asset in this group and still in period of addition
4984 
4985       FA_UTIL_PVT.load_char_value
4986            (p_char_old  => p_asset_fin_rec_old.recognize_gain_loss,
4987             p_char_adj  => p_asset_fin_rec_adj.recognize_gain_loss,
4988             x_char_new  => px_asset_fin_rec_new.recognize_gain_loss
4989            , p_log_level_rec => p_log_level_rec);
4990 
4991       FA_UTIL_PVT.load_char_value
4992            (p_char_old  => p_asset_fin_rec_old.recapture_reserve_flag,
4993             p_char_adj  => p_asset_fin_rec_adj.recapture_reserve_flag,
4994             x_char_new  => px_asset_fin_rec_new.recapture_reserve_flag
4995            , p_log_level_rec => p_log_level_rec);
4996 
4997       FA_UTIL_PVT.load_char_value
4998            (p_char_old  => p_asset_fin_rec_old.limit_proceeds_flag,
4999             p_char_adj  => p_asset_fin_rec_adj.limit_proceeds_flag,
5000             x_char_new  => px_asset_fin_rec_new.limit_proceeds_flag
5001            , p_log_level_rec => p_log_level_rec);
5002 
5003       FA_UTIL_PVT.load_char_value
5004            (p_char_old  => p_asset_fin_rec_old.terminal_gain_loss,
5005             p_char_adj  => p_asset_fin_rec_adj.terminal_gain_loss,
5006             x_char_new  => px_asset_fin_rec_new.terminal_gain_loss
5007            , p_log_level_rec => p_log_level_rec);
5008 
5009       FA_UTIL_PVT.load_char_value
5010            (p_char_old  => p_asset_fin_rec_old.exclude_proceeds_from_basis,
5011             p_char_adj  => p_asset_fin_rec_adj.exclude_proceeds_from_basis,
5012             x_char_new  => px_asset_fin_rec_new.exclude_proceeds_from_basis
5013            , p_log_level_rec => p_log_level_rec);
5014 
5015       FA_UTIL_PVT.load_char_value
5016            (p_char_old  => p_asset_fin_rec_old.retirement_deprn_option,
5017             p_char_adj  => p_asset_fin_rec_adj.retirement_deprn_option,
5018             x_char_new  => px_asset_fin_rec_new.retirement_deprn_option
5019            , p_log_level_rec => p_log_level_rec);
5020 
5021       --
5022       -- Retirement Option Validations
5023       --
5024       if (nvl(px_asset_fin_rec_new.recognize_gain_loss, 'XXX')
5025                                       not in ('NO', 'YES')) then
5026          px_asset_fin_rec_new.recognize_gain_loss := 'NO';
5027       end if;
5028 
5029       if (px_asset_fin_rec_new.over_depreciate_option <>
5030              fa_std_types.FA_OVER_DEPR_NO) and
5031          (nvl(px_asset_fin_rec_new.recapture_reserve_flag, 'N') <> 'N') then
5032          px_asset_fin_rec_new.recapture_reserve_flag := 'N';
5033       elsif (nvl(px_asset_fin_rec_new.recapture_reserve_flag, 'N') not in ('N', 'Y')) then
5034          px_asset_fin_rec_new.recapture_reserve_flag := 'N';
5035       end if;
5036 
5037       if (px_asset_fin_rec_new.recognize_gain_loss = 'YES') and
5038          (nvl(px_asset_fin_rec_new.limit_proceeds_flag, 'N') <> 'Y') then
5039          px_asset_fin_rec_new.limit_proceeds_flag := 'N';
5040       elsif (nvl(px_asset_fin_rec_new.limit_proceeds_flag, 'N') not in ('N', 'Y')) then
5041          px_asset_fin_rec_new.limit_proceeds_flag := 'N';
5042       end if;
5043 
5044       if (nvl(px_asset_fin_rec_new.terminal_gain_loss, 'XXX')
5045                                  not in ('NO', 'YES', 'END_OF_YEAR')) then
5046          px_asset_fin_rec_new.terminal_gain_loss := 'YES';
5047       end if;
5048 
5049       FA_UTIL_PVT.load_char_value
5050            (p_char_old  => p_asset_fin_rec_old.tracking_method,
5051             p_char_adj  => p_asset_fin_rec_adj.tracking_method,
5052             x_char_new  => px_asset_fin_rec_new.tracking_method
5053            , p_log_level_rec => p_log_level_rec);
5054 
5055       FA_UTIL_PVT.load_char_value
5056            (p_char_old  => p_asset_fin_rec_old.allocate_to_fully_rsv_flag,
5057             p_char_adj  => p_asset_fin_rec_adj.allocate_to_fully_rsv_flag,
5058             x_char_new  => px_asset_fin_rec_new.allocate_to_fully_rsv_flag
5059            , p_log_level_rec => p_log_level_rec);
5060 
5061       FA_UTIL_PVT.load_char_value
5062            (p_char_old  => p_asset_fin_rec_old.allocate_to_fully_ret_flag,
5063             p_char_adj  => p_asset_fin_rec_adj.allocate_to_fully_ret_flag,
5064             x_char_new  => px_asset_fin_rec_new.allocate_to_fully_ret_flag
5065            , p_log_level_rec => p_log_level_rec);
5066 
5067       FA_UTIL_PVT.load_char_value
5068            (p_char_old  => p_asset_fin_rec_old.excess_allocation_option,
5069             p_char_adj  => p_asset_fin_rec_adj.excess_allocation_option,
5070             x_char_new  => px_asset_fin_rec_new.excess_allocation_option
5071            , p_log_level_rec => p_log_level_rec);
5072 
5073       FA_UTIL_PVT.load_char_value
5074            (p_char_old  => p_asset_fin_rec_old.depreciation_option,
5075             p_char_adj  => p_asset_fin_rec_adj.depreciation_option,
5076             x_char_new  => px_asset_fin_rec_new.depreciation_option
5077            , p_log_level_rec => p_log_level_rec);
5078 
5079       FA_UTIL_PVT.load_char_value
5080            (p_char_old  => p_asset_fin_rec_old.member_rollup_flag,
5081             p_char_adj  => p_asset_fin_rec_adj.member_rollup_flag,
5082             x_char_new  => px_asset_fin_rec_new.member_rollup_flag
5083            , p_log_level_rec => p_log_level_rec);
5084 
5085       --
5086       -- Tracking Option Validations
5087        --HH check allow_member_tracking_flag too.
5088       --
5089       if (px_asset_fin_rec_new.tracking_method is null) OR
5090          (nvl(fa_cache_pkg.fazcbc_record.allow_member_tracking_flag,'N') <> 'Y')then
5091 
5092          px_asset_fin_rec_new.allocate_to_fully_rsv_flag := null;
5093          px_asset_fin_rec_new.allocate_to_fully_ret_flag := null;
5094          px_asset_fin_rec_new.excess_allocation_option   := null;
5095          px_asset_fin_rec_new.depreciation_option        := null;
5096          px_asset_fin_rec_new.member_rollup_flag         := null;
5097 
5098       elsif (px_asset_fin_rec_new.tracking_method = 'ALLOCATE') then
5099 
5100          if (px_asset_fin_rec_new.allocate_to_fully_rsv_flag = 'Y') then
5101             px_asset_fin_rec_new.allocate_to_fully_ret_flag := 'Y';
5102             px_asset_fin_rec_new.excess_allocation_option   := null;
5103          elsif (px_asset_fin_rec_new.allocate_to_fully_rsv_flag = 'N') then
5104             px_asset_fin_rec_new.allocate_to_fully_ret_flag := 'N';
5105             if (nvl(px_asset_fin_rec_new.excess_allocation_option, 'XXX')
5106                                         not in ('REDUCE', 'DISTRIBUTE')) then
5107                px_asset_fin_rec_new.excess_allocation_option := 'REDUCE';
5108             end if;
5109          else
5110             px_asset_fin_rec_new.allocate_to_fully_rsv_flag := 'N';
5111             px_asset_fin_rec_new.allocate_to_fully_ret_flag := 'N';
5112          end if;
5113 
5114          px_asset_fin_rec_new.depreciation_option         := null;
5115          px_asset_fin_rec_new.member_rollup_flag         := null;
5116 
5117       elsif (px_asset_fin_rec_new.tracking_method = 'CALCULATE') then
5118          if (nvl(px_asset_fin_rec_new.depreciation_option, 'XXX') not in ('GROUP', 'MEMBER')) then
5119             px_asset_fin_rec_new.depreciation_option := 'MEMBER';
5120          end if;
5121 
5122          if (nvl(px_asset_fin_rec_new.member_rollup_flag, 'X') not in ('Y', 'N')) then
5123             px_asset_fin_rec_new.member_rollup_flag := 'N';
5124          end if;
5125 
5126          --
5127          -- Bug5032617:  Following if is just to ensure to prevent
5128          -- wrong combination of group setup values. (for API)
5129          --
5130          /*bug#15897249 modified the condition*/
5131          if ((px_asset_fin_rec_new.recognize_gain_loss = 'NO') or
5132              (px_asset_fin_rec_new.terminal_gain_loss <> 'YES')) and
5133              ((px_asset_fin_rec_new.member_rollup_flag = 'Y' and
5134                nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') <> 'YEAR END BALANCE WITH POSITIVE REDUCTION AMOUNT')
5135              ) then
5136             fa_srvr_msg.add_message(
5137                   calling_fn => 'fa_asset_calc_pvt.calc_group_info',
5138                   name       => 'FA_INVALID_PARAMETER',
5139                   token1     => 'VALUE',
5140                   value1     => px_asset_fin_rec_new.recognize_gain_loss,
5141                   token2     => 'PARAM',
5142                   value2     => 'RECOGNIZE_GAIN_LOSS',  p_log_level_rec => p_log_level_rec);
5143             fa_srvr_msg.add_message(
5144                   calling_fn => 'fa_asset_calc_pvt.calc_group_info',
5145                   name       => 'FA_INVALID_PARAMETER',
5146                   token1     => 'VALUE',
5147                   value1     => px_asset_fin_rec_new.terminal_gain_loss,
5148                   token2     => 'PARAM',
5149                   value2     => 'TERMINAL_GAIN_LOSS',  p_log_level_rec => p_log_level_rec);
5150             fa_srvr_msg.add_message(
5151                   calling_fn => 'fa_asset_calc_pvt.calc_group_info',
5152                   name       => 'FA_INVALID_PARAMETER',
5153                   token1     => 'VALUE',
5154                   value1     => px_asset_fin_rec_new.member_rollup_flag,
5155                   token2     => 'PARAM',
5156                   value2     => 'MEMBER_ROLLUP_FLAG',  p_log_level_rec => p_log_level_rec);
5157 
5158             raise calc_err;
5159          end if;
5160 
5161 
5162          px_asset_fin_rec_new.allocate_to_fully_rsv_flag := null;
5163          px_asset_fin_rec_new.allocate_to_fully_ret_flag := null;
5164          px_asset_fin_rec_new.excess_allocation_option   := null;
5165 
5166       else
5167          fa_srvr_msg.add_message(
5168                 calling_fn => l_calling_fn,
5169                 name       => 'FA_INVALID_TRACKING_METHOD', p_log_level_rec => p_log_level_rec);
5170          raise calc_err;
5171       end if; -- (px_asset_fin_rec_new.tracking_method is null)
5172 
5173    end if; -- (p_asset_hdr_rec.period_of_addition = 'Y') and
5174 
5175    px_asset_fin_rec_new.ytd_proceeds :=
5176       nvl(p_asset_fin_rec_adj.ytd_proceeds, 0) +
5177       nvl(p_asset_fin_rec_old.ytd_proceeds, 0);
5178 
5179    px_asset_fin_rec_new.ltd_proceeds :=
5180       nvl(p_asset_fin_rec_adj.ltd_proceeds, 0) +
5181       nvl(p_asset_fin_rec_old.ltd_proceeds, 0);
5182 
5183    px_asset_fin_rec_new.eofy_reserve :=
5184       nvl(p_asset_fin_rec_adj.eofy_reserve, 0) +
5185       nvl(p_asset_fin_rec_old.eofy_reserve, 0);
5186 
5187    FA_UTIL_PVT.load_char_value
5188            (p_char_old  => p_asset_fin_rec_old.terminal_gain_loss_flag,
5189             p_char_adj  => p_asset_fin_rec_adj.terminal_gain_loss_flag,
5190             x_char_new  => px_asset_fin_rec_new.terminal_gain_loss_flag, p_log_level_rec => p_log_level_rec);
5191 
5192 
5193    if (px_asset_fin_rec_new.cost <> 0) and
5194       (p_asset_fin_rec_old.terminal_gain_loss_flag = 'Y') then
5195       px_asset_fin_rec_new.terminal_gain_loss_flag := 'N';
5196    end if;
5197 
5198    if (px_asset_fin_rec_new.terminal_gain_loss_flag = 'Y') and
5199       (p_trans_rec.member_transaction_header_id is not null) then
5200       px_asset_fin_rec_new.terminal_gain_loss_flag := 'N';
5201    end if;
5202 
5203    return true;
5204 
5205 EXCEPTION
5206    when calc_err then
5207       if (c_find_member_asset%ISOPEN) then
5208          CLOSE c_find_member_asset;
5209       end if;
5210       fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5211       return false;
5212 
5213    when others then
5214       if (c_find_member_asset%ISOPEN) then
5215          CLOSE c_find_member_asset;
5216       end if;
5217       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5218       return false;
5219 
5220 END calc_group_info;
5221 
5222 FUNCTION calc_member_info
5223    (p_trans_rec               IN     FA_API_TYPES.trans_rec_type,
5224     p_asset_hdr_rec           IN     FA_API_TYPES.asset_hdr_rec_type,
5225     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
5226     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
5227     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
5228     p_asset_deprn_rec_old     IN     FA_API_TYPES.asset_deprn_rec_type
5229    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean IS
5230 
5231   CURSOR c_get_group_values IS
5232    SELECT recognize_gain_loss,
5233           recapture_reserve_flag,
5234           limit_proceeds_flag,
5235           terminal_gain_loss,
5236           exclude_proceeds_from_basis,
5237           retirement_deprn_option,
5238           tracking_method,
5239           allocate_to_fully_rsv_flag,
5240           allocate_to_fully_ret_flag,
5241           excess_allocation_option,
5242           depreciation_option,
5243           member_rollup_flag,
5244           reduction_rate,
5245           reduce_addition_flag,
5246           reduce_adjustment_flag,
5247           reduce_retirement_flag,
5248           disabled_flag, --hh
5249           over_depreciate_option -- hh
5250      FROM FA_BOOKS
5251     WHERE ASSET_ID = px_asset_fin_rec_new.group_asset_id
5252       AND BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
5253       AND transaction_header_id_out is null;
5254 
5255    l_recognize_gain_loss         varchar2(30);
5256    l_recapture_reserve_flag      varchar2(1);
5257    l_limit_proceeds_flag         varchar2(1);
5258    l_terminal_gain_loss          varchar2(30);
5259    l_exclude_proceeds_from_basis varchar2(1);
5260    l_retirement_deprn_option     varchar2(30);
5261    l_tracking_method             varchar2(30);
5262    l_allocate_to_fully_rsv_flag  varchar2(1);
5263    l_allocate_to_fully_ret_flag  varchar2(1);
5264    l_excess_allocation_option    varchar2(30);
5265    l_depreciation_option         varchar2(30);
5266    l_member_rollup_flag          varchar2(1);
5267    l_reduction_rate              number;
5268    l_reduce_addition_flag        varchar2(1);
5269    l_reduce_adjustment_flag      varchar2(1);
5270    l_reduce_retirement_flag      varchar2(1);
5271    l_disabled_flag               varchar2(1); --HH
5272    l_over_depreciate_option      varchar2(30); --hh
5273 
5274    l_calling_fn                  VARCHAR2(40) := 'fa_asset_calc_pvt.calc_member_info';
5275 
5276    calc_member_err               EXCEPTION;
5277 
5278 BEGIN
5279 
5280    -- This function will copy the tracking related columns from old structure
5281    -- to new structure. And if the group assignment is changed,
5282    -- get new tracking related columns from FA_BOOKS instead of copying
5283    -- old to new.
5284 
5285    -- Only when this asset is assigned to group, this module will be available.
5286 
5287    if px_asset_fin_rec_new.group_asset_id is not null then
5288 
5289      --
5290      -- Get group information for reduction rate and tracking related values.
5291      -- If there will be more, this can be replaced with get_asset_fin_rec.
5292      -- User cursor for now since we only need part of fa_books.
5293      --
5294      open c_get_group_values;
5295      fetch c_get_group_values into l_recognize_gain_loss,
5296                                    l_recapture_reserve_flag,
5297                                    l_limit_proceeds_flag,
5298                                    l_terminal_gain_loss,
5299                                    l_exclude_proceeds_from_basis,
5300                                    l_retirement_deprn_option,
5301                                    l_tracking_method,
5302                                    l_allocate_to_fully_rsv_flag,
5303                                    l_allocate_to_fully_ret_flag,
5304                                    l_excess_allocation_option,
5305                                    l_depreciation_option,
5306                                    l_member_rollup_flag,
5307                                    l_reduction_rate,
5308                                    l_reduce_addition_flag,
5309                                    l_reduce_adjustment_flag,
5310                                    l_reduce_retirement_flag,
5311                                    l_disabled_flag,
5312                                    l_over_depreciate_option;
5313 
5314      /*bug#15897249 starts */
5315      if(nvl(p_asset_fin_rec_adj.reduction_rate, 0) <> 0 ) then
5316       If ((p_trans_rec.transaction_type_code = 'ADDITION' and
5317           nvl(l_reduce_addition_flag,'N') = 'N') or
5318          ((p_trans_rec.transaction_type_code = 'ADJUSTMENT') and
5319           nvl(l_reduce_adjustment_flag,'N') = 'N') )then         fa_srvr_msg.add_message(
5320                   calling_fn => 'fa_asset_calc_pvt.calc_member_info',
5321                   name       => 'FA_BOOK_NO_REDUCTION',  p_log_level_rec => p_log_level_rec);
5322          raise calc_member_err;
5323       end if;
5324      end if;
5325      /*bug#15897249 ends */
5326 
5327      --
5328      -- Set reduction rate
5329      -- If this is addition and REDUCE_ADDITION flag is Y or
5330      -- this is adjustment and REDUCE_ADJUSTMENT flag is Y, then
5331      -- set group reduction rate is no value is passed in fin_rec_adj.
5332      -- Otherwise, add fin_rec_adj reduction rate to old one.
5333      --
5334      if (((p_trans_rec.transaction_type_code = 'ADDITION') and
5335          (l_reduce_addition_flag = 'Y')) or
5336          (p_trans_rec.transaction_type_code = 'ADJUSTMENT') and
5337          (l_reduce_adjustment_flag = 'Y')) then
5338         if (p_asset_fin_rec_adj.reduction_rate is null) and
5339            (nvl(p_asset_fin_rec_old.reduction_rate,0) = 0 ) then --bug#15897249
5340            px_asset_fin_rec_new.reduction_rate := nvl(l_reduction_rate, 0);
5341         else
5342            px_asset_fin_rec_new.reduction_rate :=
5343              nvl(p_asset_fin_rec_old.reduction_rate, 0) +
5344              nvl(p_asset_fin_rec_adj.reduction_rate, 0);
5345         end if;
5346      else
5347         px_asset_fin_rec_new.reduction_rate := to_number(null);
5348      end if;
5349 
5350      if px_asset_fin_rec_new.group_asset_id <>
5351         nvl(p_asset_fin_rec_old.group_asset_id,-99) then
5352 
5353         -- In case the group asset is changed, need to replace with new
5354         -- tracking related columns from FA_BOOKS.
5355 
5356         if c_get_group_values%NOTFOUND then
5357 
5358            -- This is a case in which tracking method is not assigned to the group
5359            -- to which this member asset belongs...
5360 
5361            fa_srvr_msg.add_message(
5362                      calling_fn => 'fa_asset_calc_pvt.calc_member_info',
5363                      name       => 'FA_BOOK_INEFFECTIVE_BOOK',  p_log_level_rec => p_log_level_rec);
5364            raise calc_member_err;
5365 
5366         else
5367 
5368            -- New tracking related columns will be set to new structure.
5369 
5370            px_asset_fin_rec_new.recognize_gain_loss        := l_recognize_gain_loss;
5371            px_asset_fin_rec_new.recapture_reserve_flag     := l_recapture_reserve_flag;
5372            px_asset_fin_rec_new.limit_proceeds_flag        := l_limit_proceeds_flag;
5373            px_asset_fin_rec_new.terminal_gain_loss         := l_terminal_gain_loss;
5374            px_asset_fin_rec_new.exclude_proceeds_from_basis := l_exclude_proceeds_from_basis;
5375            px_asset_fin_rec_new.retirement_deprn_option    := l_retirement_deprn_option;
5376            px_asset_fin_rec_new.tracking_method            := l_tracking_method;
5377            px_asset_fin_rec_new.allocate_to_fully_rsv_flag := l_allocate_to_fully_rsv_flag;
5378            px_asset_fin_rec_new.allocate_to_fully_ret_flag := l_allocate_to_fully_ret_flag;
5379            px_asset_fin_rec_new.excess_allocation_option   := l_excess_allocation_option;
5380            px_asset_fin_rec_new.depreciation_option        := l_depreciation_option;
5381            px_asset_fin_rec_new.member_rollup_flag         := l_member_rollup_flag;
5382            px_asset_fin_rec_new.disabled_flag              := l_disabled_flag; --HH
5383            px_asset_fin_rec_new.over_depreciate_option     := l_over_depreciate_option; --hh
5384 
5385         end if;
5386 
5387      else -- group assignment is not changed
5388           -- In this case, just copy from old to new.
5389         if (p_log_level_rec.statement_level) then
5390            fa_debug_pkg.add(l_calling_fn,'group assignment','not changed', p_log_level_rec => p_log_level_rec);
5391            fa_debug_pkg.add(l_calling_fn,'old OD option',p_asset_fin_rec_old.over_depreciate_option, p_log_level_rec => p_log_level_rec);
5392            fa_debug_pkg.add(l_calling_fn,'New OD option',px_asset_fin_rec_new.over_depreciate_option, p_log_level_rec => p_log_level_rec);
5393            fa_debug_pkg.add(l_calling_fn,'selected OD option',l_over_depreciate_option, p_log_level_rec => p_log_level_rec);
5394         end if;
5395 
5396         px_asset_fin_rec_new.recognize_gain_loss :=
5397                   p_asset_fin_rec_old.recognize_gain_loss;
5398 
5399         px_asset_fin_rec_new.recapture_reserve_flag :=
5400                   p_asset_fin_rec_old.recapture_reserve_flag;
5401 
5402         px_asset_fin_rec_new.limit_proceeds_flag :=
5403                   p_asset_fin_rec_old.limit_proceeds_flag;
5404 
5405         px_asset_fin_rec_new.exclude_proceeds_from_basis :=
5406                   p_asset_fin_rec_old.exclude_proceeds_from_basis;
5407 
5408         px_asset_fin_rec_new.retirement_deprn_option :=
5409                   p_asset_fin_rec_old.retirement_deprn_option;
5410 
5411         px_asset_fin_rec_new.terminal_gain_loss :=
5412                   p_asset_fin_rec_old.terminal_gain_loss;
5413 
5414         px_asset_fin_rec_new.tracking_method :=
5415                   p_asset_fin_rec_old.tracking_method;
5416 
5417         px_asset_fin_rec_new.allocate_to_fully_rsv_flag :=
5418                   p_asset_fin_rec_old.allocate_to_fully_rsv_flag;
5419 
5420         px_asset_fin_rec_new.allocate_to_fully_ret_flag :=
5421                   p_asset_fin_rec_old.allocate_to_fully_ret_flag;
5422 
5423         px_asset_fin_rec_new.excess_allocation_option :=
5424                   p_asset_fin_rec_old.excess_allocation_option;
5425 
5426         px_asset_fin_rec_new.depreciation_option :=
5427                   p_asset_fin_rec_old.depreciation_option;
5428 
5429         px_asset_fin_rec_new.member_rollup_flag :=
5430                   p_asset_fin_rec_old.member_rollup_flag;
5431         --HH
5432         px_asset_fin_rec_new.disabled_flag :=
5433                   p_asset_fin_rec_old.disabled_flag;
5434         --make sure there is a value here for cost sign change function
5435         px_asset_fin_rec_new.over_depreciate_option     :=
5436                   nvl(p_asset_fin_rec_old.over_depreciate_option, l_over_depreciate_option);
5437        --eHH
5438 
5439       end if; -- px_asset_fin_rec_new.group_asset_id <> nvl(p_asset_f.....
5440 
5441       close c_get_group_values;
5442 
5443    end if; -- px_asset_fin_rec_new.group_asset_id is not null;
5444 
5445    if p_asset_hdr_rec.period_of_addition = 'Y' then
5446       px_asset_fin_rec_new.eofy_reserve := nvl(p_asset_deprn_rec_old.deprn_reserve, 0) -
5447                                            nvl(p_asset_deprn_rec_old.ytd_deprn, 0);
5448    else
5449       px_asset_fin_rec_new.eofy_reserve :=
5450          nvl(p_asset_fin_rec_adj.eofy_reserve, 0) +
5451          nvl(p_asset_fin_rec_old.eofy_reserve, 0);
5452    end if;
5453 
5454    return true;
5455 
5456 EXCEPTION
5457    when calc_member_err then
5458       if (c_get_group_values%ISOPEN) then
5459          CLOSE c_get_group_values;
5460       end if;
5461 
5462       return false;
5463 
5464    when others then
5465       if (c_get_group_values%ISOPEN) then
5466          CLOSE c_get_group_values;
5467       end if;
5468       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5469       return false;
5470 
5471 END calc_member_info;
5472 
5473 
5474 --RELOCATED
5475 --RELOCATED  Relocated to FAVAMRTB.pls
5476 --RELOCATED
5477 --RELOCATED FUNCTION calc_raf_adj_cost
5478 --RELOCATED    (p_trans_rec           IN            FA_API_TYPES.trans_rec_type,
5479 --RELOCATED     p_asset_hdr_rec       IN            FA_API_TYPES.asset_hdr_rec_type,
5480 --RELOCATED     p_asset_desc_rec      IN            FA_API_TYPES.asset_desc_rec_type,
5481 --RELOCATED     p_asset_type_rec      IN            FA_API_TYPES.asset_type_rec_type,
5482 --RELOCATED     p_asset_fin_rec_old   IN            FA_API_TYPES.asset_fin_rec_type,
5483 --RELOCATED     px_asset_fin_rec_new  IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
5484 --RELOCATED     p_asset_deprn_rec_adj IN            FA_API_TYPES.asset_deprn_rec_type,
5485 --RELOCATED     p_asset_deprn_rec_new IN            FA_API_TYPES.asset_deprn_rec_type,
5486 --RELOCATED     p_period_rec          IN            FA_API_TYPES.period_rec_type,
5487 --RELOCATED     p_mrc_sob_type_code   IN            VARCHAR2
5488 --RELOCATED    ) RETURN BOOLEAN IS
5489 --RELOCATED
5490 --RELOCATED
5491 --RELOCATED BEGIN
5492 --RELOCATED
5493 --RELOCATED return true;
5494 --RELOCATED
5495 --RELOCATED END calc_raf_adj_cost;
5496 --RELOCATED
5497 
5498 
5499 FUNCTION calc_standalone_info
5500    (p_asset_hdr_rec           IN     FA_API_TYPES.asset_Hdr_rec_type,
5501     p_asset_fin_rec_old       IN     FA_API_TYPES.asset_fin_rec_type,
5502     p_asset_fin_rec_adj       IN     FA_API_TYPES.asset_fin_rec_type,
5503     px_asset_fin_rec_new      IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
5504     p_asset_deprn_rec_new     IN     FA_API_TYPES.asset_deprn_rec_type
5505    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean IS
5506 
5507    l_calling_fn                  VARCHAR2(40) := 'fa_asset_calc_pvt.calc_standalone_info';
5508 
5509 BEGIN
5510 
5511    --
5512    -- Setting Group Related variables
5513    px_asset_fin_rec_new.reduction_rate := null;
5514    px_asset_fin_rec_new.reduce_addition_flag := null;
5515    px_asset_fin_rec_new.reduce_adjustment_flag := null;
5516    px_asset_fin_rec_new.reduce_retirement_flag := null;
5517 
5518    px_asset_fin_rec_new.recognize_gain_loss         := null;
5519    px_asset_fin_rec_new.recapture_reserve_flag      := null;
5520    px_asset_fin_rec_new.limit_proceeds_flag         := null;
5521    px_asset_fin_rec_new.terminal_gain_loss          := null;
5522    px_asset_fin_rec_new.exclude_proceeds_from_basis := null;
5523    px_asset_fin_rec_new.retirement_deprn_option     := null;
5524 
5525    px_asset_fin_rec_new.tracking_method             := null;
5526    px_asset_fin_rec_new.allocate_to_fully_rsv_flag  := null;
5527    px_asset_fin_rec_new.allocate_to_fully_ret_flag  := null;
5528    px_asset_fin_rec_new.excess_allocation_option    := null;
5529    px_asset_fin_rec_new.depreciation_option         := null;
5530    px_asset_fin_rec_new.member_rollup_flag          := null;
5531    px_asset_fin_rec_new.super_group_id              := null;
5532    px_asset_fin_rec_new.over_depreciate_option      := null;
5533    px_asset_fin_rec_new.ytd_proceeds                := null;
5534    px_asset_fin_rec_new.ltd_proceeds                := null;
5535    px_asset_fin_rec_new.ltd_cost_of_removal         := null;
5536    px_asset_fin_rec_new.exclude_fully_rsv_flag      := null;
5537    px_asset_fin_rec_new.terminal_gain_loss_flag     := null;
5538 
5539    if p_asset_hdr_rec.period_of_addition = 'Y' then
5540       px_asset_fin_rec_new.eofy_reserve := nvl(p_asset_deprn_rec_new.deprn_reserve, 0) -
5541                                            nvl(p_asset_deprn_rec_new.ytd_deprn, 0);
5542    else
5543       px_asset_fin_rec_new.eofy_reserve :=
5544          nvl(p_asset_fin_rec_adj.eofy_reserve, 0) +
5545          nvl(p_asset_fin_rec_old.eofy_reserve, 0);
5546    end if;
5547 
5548    return true;
5549 
5550 EXCEPTION
5551    when others then
5552       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5553       return false;
5554 
5555 END calc_standalone_info;
5556 
5557 
5558 
5559 END FA_ASSET_CALC_PVT;