[Home] [Help]
PACKAGE BODY: APPS.FA_CDE_PKG
Source
1 PACKAGE BODY FA_CDE_PKG AS
2 /* $Header: FACDEB.pls 120.129.12020000.8 2013/03/29 11:28:36 saalampa ship $ */
3
4 ROUND_WITH_RESTRICTIONS CONSTANT INTEGER:= 0;
5 ROUND_ALWAYS CONSTANT INTEGER:= 1;
6
7 g_tested_use_annual_round BOOLEAN:= FALSE;
8 g_use_annual_round INTEGER:= ROUND_WITH_RESTRICTIONS;
9 primary_cost NUMBER;
10 g_pre_period_name fa_calendar_periods.period_name%TYPE;
11 g_pre_period_ctr fa_calendar_periods.period_num%TYPE;
12 g_pre_fyctr fa_fiscal_year.fiscal_year%TYPE;
13
14
15 FUNCTION faxgpr (
16 X_dpr_ptr fa_std_types.dpr_struct,
17 X_period fa_std_types.fa_cp_struct,
18 X_projecting_flag BOOLEAN,
19 X_prodn IN OUT NOCOPY NUMBER,
20 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
21 RETURN BOOLEAN IS
22
23 h_dist_book VARCHAR2(30);
24
25 CURSOR PROD IS
26 SELECT ROWID,
27 used_flag used,
28 production *
29 (LEAST (TO_DATE (X_period.end_jdate, 'J'), end_date) -
30 GREATEST (TO_DATE (X_period.start_jdate, 'J'), start_date) + 1)
31 / (end_date - start_date + 1) prod
32 FROM FA_PERIODIC_PRODUCTION
33 WHERE asset_id = X_dpr_ptr.asset_id
34 AND book_type_code = h_dist_book
35 AND start_date <= TO_DATE (X_period.end_jdate, 'J')
36 AND end_date >= TO_DATE (X_period.start_jdate, 'J')
37 FOR UPDATE OF used_flag NOWAIT;
38
39 BEGIN <<FAXGPR>>
40
41 -- Get fa_book_controls.distribution_source_book since
42 -- production is only stored in the corporate book.
43
44 -- fazcbc cache should have already been called don't call again -bmr
45
46 h_dist_book := fa_cache_pkg.fazcbc_record.distribution_source_book;
47 X_prodn := 0;
48
49 FOR h IN PROD LOOP
50 X_prodn := X_prodn + h.prod;
51
52 IF NOT X_projecting_flag AND h.used <> 'YES' THEN
53 UPDATE FA_PERIODIC_PRODUCTION
54 SET Used_Flag = 'YES'
55 WHERE ROWID = h.ROWID;
56
57 IF SQL%NOTFOUND THEN
58 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgpr',
59 name => 'FA_DEPRN_FETCH_PROD',
60 p_log_level_rec => p_log_level_rec);
61 RAISE NO_DATA_FOUND;
62 END IF;
63 END IF;
64
65 END LOOP;
66
67 RETURN (TRUE);
68
69 EXCEPTION
70 WHEN OTHERS THEN
71 fa_srvr_msg.add_sql_error(calling_fn => 'fa_cde_pkg.faxgpr', p_log_level_rec => p_log_level_rec);
72 RETURN (FALSE);
73 END FAXGPR;
74
75 FUNCTION faxgtr (
76 X_method_id NUMBER,
77 X_year_of_life NUMBER,
78 X_prorate_period NUMBER,
79 X_rate OUT NOCOPY NUMBER,
80 p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
81 RETURN BOOLEAN IS
82
83 BEGIN <<FAZGTR>>
84
85 SELECT rate
86 INTO X_rate
87 FROM fa_rates
88 WHERE method_id = X_method_id
89 AND YEAR = X_year_of_life
90 AND period_placed_in_service = X_prorate_period;
91
92 RETURN (TRUE);
93
94 EXCEPTION
95 WHEN NO_DATA_FOUND THEN
96 X_rate := 0;
97 RETURN (TRUE);
98 WHEN OTHERS THEN
99 fa_srvr_msg.add_sql_error(calling_fn => 'fa_cde_pkg.faxgtr', p_log_level_rec => p_log_level_rec);
100 RETURN (FALSE);
101 END FAXGTR;
102
103 -- syoung: Take out remaining life calculation
104 -- this can be called from Pro*C during deprn or when mass change is run
105 PROCEDURE faxgfr (X_Book_Type_Code IN VARCHAR2,
106 X_Asset_Id IN NUMBER,
107 X_Short_Fiscal_Year_Flag IN VARCHAR2,
108 X_Conversion_Date IN DATE := NULL,
109 X_Prorate_Date IN DATE := NULL,
110 X_Orig_Deprn_Start_Date IN DATE := NULL,
111 C_Prorate_Date IN VARCHAR2 := NULL,
112 C_Conversion_Date IN VARCHAR2 := NULL,
113 C_Orig_Deprn_Start_Date IN VARCHAR2 := NULL,
114 X_Method_Code IN VARCHAR2,
115 X_Life_In_Months IN INTEGER,
116 X_Fiscal_Year IN NUMBER,
117 X_Current_Period IN NUMBER,
118 X_calling_interface IN VARCHAR2 DEFAULT NULL,
119 X_new_cost IN NUMBER DEFAULT NULL,
120 X_adjusted_cost IN NUMBER DEFAULT NULL,
121 X_Rate OUT NOCOPY NUMBER,
122 X_Method_Type OUT NOCOPY NUMBER,
123 X_Success OUT NOCOPY INTEGER,
124 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null) IS
125
126 h_method_id NUMBER;
127 h_formula VARCHAR2(4000);
128 h_formula_parsed VARCHAR2(4000);
129 h_cursor NUMBER;
130 h_return_code NUMBER;
131 h_count1 NUMBER;
132 h_count2 NUMBER;
133 h_prod_method NUMBER := 0;
134 h_rem_life1 NUMBER;
135 h_rem_life2 NUMBER;
136 h_conversion_date DATE := X_Conversion_Date;
137 h_prorate_date DATE := X_Prorate_Date;
138 h_orig_deprn_start_date DATE := X_Orig_Deprn_Start_Date;
139 h_deprn_basis_rule VARCHAR2(4);
140 cache_exception EXCEPTION;
141 rem_life_exception EXCEPTION;
142 rate_null_exception EXCEPTION;
143 rate_neg_exception EXCEPTION;
144 l_original_Rate NUMBER;
145 l_Revised_Rate NUMBER;
146 l_Guaranteed_Rate NUMBER;
147 l_is_revised_rate NUMBER;
148 h_msg_count NUMBER := 0;
149 h_msg_data VARCHAR2(512);
150
151 BEGIN <<FAXGFR>>
152
153 -- Fix for Bug #2629724. Call the fazccmt cache to improve perf.
154 IF (NOT fa_cache_pkg.fazccmt(X_Method => X_Method_Code,
155 X_Life => X_Life_In_Months,
156 p_log_level_rec => p_log_level_rec)) THEN
157 RAISE cache_exception;
158 END IF;
159
160 h_method_id := fa_cache_pkg.fazccmt_record.method_id;
161 h_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
162 h_formula_parsed := fa_cache_pkg.fazcfor_record.formula_parsed;
163
164 h_count1 := INSTR (h_formula_parsed, 'REMAINING_LIFE1');
165 h_count2 := INSTR (h_formula_parsed, 'REMAINING_LIFE2');
166 h_prod_method := INSTR (fa_cache_pkg.fazcfor_record.formula_actual, 'CAPACITY');
167
168 X_Method_Type := 0;
169
170 -- Bug:5930979:Japan Tax Reform Project (Start)
171 IF fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag = 'YES' THEN
172
173 IF (p_log_level_rec.statement_level) THEN
174 fa_debug_pkg.ADD('FAXGFR','+++ in', fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, p_log_level_rec);
175 fa_debug_pkg.ADD('FAXGFR','+++ X_new_cost', X_new_cost, p_log_level_rec);
176 fa_debug_pkg.ADD('FAXGFR','+++ X_adjusted_cost', X_adjusted_cost, p_log_level_rec);
177 END IF;
178
179 IF X_calling_interface IN ('FAXCDE') AND (X_new_cost IS NOT NULL AND X_adjusted_cost IS NOT NULL) THEN
180 h_formula_parsed := REPLACE(h_formula_parsed, 'ADJUSTED_COST', TO_CHAR(X_adjusted_cost));
181 h_formula_parsed := REPLACE(h_formula_parsed, 'COST', TO_CHAR(X_new_cost));
182
183 IF (p_log_level_rec.statement_level) THEN
184 fa_debug_pkg.ADD('FAXGFR','+++ faxcde Cost', X_new_cost, p_log_level_rec => p_log_level_rec);
185 fa_debug_pkg.ADD('FAXGFR','+++ faxcde NBV', X_adjusted_cost, p_log_level_rec => p_log_level_rec);
186 END IF; -- debug
187 END IF; -- calling interface
188 END IF; -- guarantee_rate method
189 -- Bug:5930979:Japan Tax Reform Project (End)
190
191 IF (h_count1 > 0 OR h_count2 > 0) THEN
192
193 IF (h_conversion_date IS NULL) THEN
194 IF (C_Conversion_Date = 'DD/MM/YYYY') THEN
195 h_conversion_date := NULL;
196 ELSE
197 h_conversion_date := TO_DATE(C_Conversion_Date, 'DD/MM/YYYY');
198 END IF;
199 END IF;
200
201 IF (h_prorate_date IS NULL) THEN
202 h_prorate_date := TO_DATE(C_Prorate_Date, 'DD/MM/YYYY');
203 END IF;
204
205 IF (h_orig_deprn_start_date IS NULL) THEN
206 IF (C_Orig_Deprn_Start_Date = 'DD/MM/YYYY') THEN
207 h_orig_deprn_start_date := NULL;
208 ELSE
209 h_orig_deprn_start_date := TO_DATE(C_Orig_Deprn_Start_Date, 'DD/MM/YYYY');
210 END IF;
211 END IF;
212
213 IF (NOT faxgrl(
214 X_Asset_Id => X_Asset_Id,
215 X_Book_Type_Code => X_Book_Type_Code,
216 X_Short_Fiscal_Year_Flag => X_Short_Fiscal_Year_Flag,
217 X_Prorate_Date => h_prorate_date,
218 X_Conversion_Date => h_conversion_Date,
219 X_Orig_Deprn_Start_Date => h_orig_deprn_start_date,
220 X_Fiscal_Year => X_Fiscal_Year,
221 X_Life_In_Months => X_Life_In_Months,
222 X_Method_Code => X_Method_Code,
223 X_Current_Period => X_Current_Period,
224 X_rem_life1 => h_rem_life1,
225 X_rem_life2 => h_rem_life2,
226 p_log_level_rec => p_log_level_rec)) THEN
227 RAISE rem_life_exception;
228 END IF;
229
230 h_formula_parsed := REPLACE(h_formula_parsed, 'REMAINING_LIFE1', TO_CHAR(h_rem_life1));
231 h_formula_parsed := REPLACE(h_formula_parsed, 'REMAINING_LIFE2', TO_CHAR(h_rem_life2));
232
233 END IF;
234
235 -- fix for 4685808
236 h_formula_parsed := REPLACE(h_formula_parsed, 'LIFE_IN_MONTHS', TO_CHAR(X_Life_In_Months));
237
238 -- Fix for Bug #2939771. Use bind variables.
239 h_formula := 'SELECT ' || h_formula_parsed ||
240 ' rate FROM fa_books fabk, fa_deprn_periods fadp ' ||
241 ' WHERE (fabk.asset_id = :v1) ' ||
242 ' AND (fabk.book_type_code = :v2' ||
243 ' ) AND (fabk.book_type_code = fadp.book_type_code) ' ||
244 ' AND (fabk.date_ineffective is null) ' ||
245 ' AND (fadp.period_close_date is null)';
246
247 IF (p_log_level_rec.statement_level) THEN
248 fa_debug_pkg.ADD('FAXGFR','+++ stmt:', h_formula, p_log_level_rec => p_log_level_rec);
249 fa_debug_pkg.ADD('FAXGFR','+++ stmt:', h_formula_parsed, p_log_level_rec => p_log_level_rec);
250 END IF;
251
252 -- Open the cursor for processing.
253 h_cursor := dbms_sql.open_cursor;
254
255 -- Parse the query.
256 dbms_sql.parse(h_cursor,h_formula,1);
257
258 -- Bind X_asset_id to the placeholder.
259 dbms_sql.bind_variable (h_cursor, ':v1', X_Asset_ID);
260 dbms_sql.bind_variable (h_cursor, ':v2', X_Book_Type_Code);
261
262 -- Define the output variable, rate.
263 dbms_sql.define_column (h_cursor, 1, X_Rate);
264
265 -- Execute the statement. We don't care about the
266 -- return value, but we do need to declare a variable
267 -- for it.
268 h_return_code := dbms_sql.EXECUTE(h_cursor);
269
270 -- This is the fetch loop.
271 LOOP
272 IF dbms_sql.fetch_rows (h_cursor) = 0 THEN
273 EXIT;
274 END IF;
275
276 dbms_sql.column_value (h_cursor, 1, X_rate);
277 END LOOP;
278
279 -- Close the cursor.
280 dbms_sql.close_cursor (h_cursor);
281
282 ---Added by Satish Byreddy For Method Code JP-250DB XX
283 IF X_rate is NULL THEN
284
285 h_formula := 'SELECT ' || h_formula_parsed || ' rate FROM dual';
286
287 -- Open the cursor for processing.
288 h_cursor := dbms_sql.open_cursor;
289
290 -- Parse the query.
291 dbms_sql.parse(h_cursor,h_formula,1);
292
293 -- Bind X_asset_id to the placeholder.
294
295 -- Define the output variable, rate.
296 dbms_sql.define_column (h_cursor, 1, X_Rate);
297
298 -- Execute the statement. We don't care about the
299 -- return value, but we do need to declare a variable
300 -- for it.
301 h_return_code := dbms_sql.EXECUTE(h_cursor);
302
303 -- This is the fetch loop.
304 LOOP
305 IF dbms_sql.fetch_rows (h_cursor) = 0 THEN
306 EXIT;
307 END IF;
308
309 dbms_sql.column_value (h_cursor, 1, X_rate);
310 END LOOP;
311
312 -- Close the cursor.
313 dbms_sql.close_cursor (h_cursor);
314 END IF;
315 ---End OF Addition by Satish Byreddy For Method Code JP-250DB XX
316
317 -- Fix for Bug #2421998. For a formula that uses remaining life, we
318 -- need to take this into account so that the depreciation is allocated
319 -- correctly in the last year of its life. For example, if there are
320 -- only 3 months left in the life, the rate per month should be
321 -- four times what is calculated since the asset needs to be fully
322 -- reserved at the end of the third month. We only want to do this
323 -- with assets that use remaining life 1 in the formula method and
324 -- not remaining life 2 and the deprn basis rule is COST. For NBV
325 -- methods, we just use 1 / (h_rem_life1 / 12) as the rate.
326 IF ((h_rem_life1 > 0) AND (h_rem_life1 < 12) AND
327 (NVL(X_Short_Fiscal_Year_Flag, 'NO') <> 'YES') AND
328 (h_count1 > 0) AND (h_count2 = 0)) THEN
329
330 IF (h_deprn_basis_rule = 'COST') THEN
331 X_Rate := X_Rate * (12 / h_rem_life1);
332 ELSIF (h_deprn_basis_rule = 'NBV') THEN
333 X_Rate := GREATEST (X_Rate, 1 / (h_rem_life1 / 12));
334 END IF;
335 END IF;
336
337 -- Bug:5930979:Japan Tax Reform Project (Start)
338 IF (p_log_level_rec.statement_level) THEN
339 fa_debug_pkg.ADD('FAXGFR','+++ guarantee_flag', fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, p_log_level_rec);
340 fa_debug_pkg.ADD('FAXGFR','+++ X_calling_interface', X_calling_interface, p_log_level_rec);
341 fa_debug_pkg.ADD('FAXGFR','+++ guarantee_flag', fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, p_log_level_rec);
342 fa_debug_pkg.ADD('FAXGFR','+++ X_calling_interface', X_calling_interface, p_log_level_rec);
343 fa_debug_pkg.ADD('FAXGFR','+++ X_rate', X_rate, p_log_level_rec);
344 END IF;
345
346 IF fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag = 'YES' THEN
347 IF X_calling_interface IS NULL THEN
348 IF (p_log_level_rec.statement_level) THEN
349 fa_debug_pkg.ADD('FAXGFR','+++ Fetching current rate from fa_books', 'YES', p_log_level_rec => p_log_level_rec);
350 END IF; -- _debug
351
352 SELECT rate_in_use
353 INTO X_Rate
354 FROM ( SELECT rate_in_use,
355 rank() over(order by transaction_header_id_in desc) rank
356 FROM fa_books
357 WHERE book_type_code = X_Book_Type_Code
358 AND asset_id = X_Asset_Id
359 AND deprn_method_code = X_Method_Code
360 )
361 WHERE rank = 1;
362
363 END IF; -- X_calling_interface is null
364
365 END IF; -- guarantee rate flag
366 -- Bug:5930979:Japan Tax Reform Project (End)
367
368 IF (X_Rate IS NULL) THEN
369 RAISE rate_null_exception;
370 END IF;
371
372 IF (X_Rate < 0) THEN
373 RAISE rate_neg_exception;
374 END IF;
375
376 X_Success := 1;
377 EXCEPTION
378 WHEN NO_DATA_FOUND THEN
379 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgfr',
380 name => 'FA_FORMULA_RATE_NO_DATA_FOUND',
381 token1 => 'ASSET_ID',
382 value1 => TO_CHAR(X_Asset_Id),
383 p_log_level_rec => p_log_level_rec);
384 X_rate := 0;
385 X_Success := -2;
386 WHEN ZERO_DIVIDE THEN
387 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgfr',
388 name => 'FA_FORMULA_RATE_ZERO_DIVIDE',
389 token1 => 'ASSET_ID',
390 value1 => TO_CHAR(X_Asset_Id),
391 p_log_level_rec => p_log_level_rec);
392 X_rate := 0;
393 X_Success := 1;
394 WHEN cache_exception THEN
395 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgfr',
396 name => 'FA_SHARED_INVALID_METHOD_RATE',
397 p_log_level_rec => p_log_level_rec);
398 X_rate := 0;
399 X_Success := -7;
400 WHEN rate_null_exception THEN
401 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgfr',
402 name => 'FA_FORMULA_RATE_NULL',
403 token1 => 'ASSET_ID',
404 value1 => TO_CHAR(X_Asset_Id),
405 p_log_level_rec => p_log_level_rec);
406 X_rate := 0;
407 X_Success := -4;
408 WHEN rem_life_exception THEN
409 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgfr',
410 name => 'FA_FORMULA_RATE_LIFE',
411 token1 => 'ASSET_ID',
412 value1 => TO_CHAR(X_Asset_Id),
413 p_log_level_rec => p_log_level_rec);
414 X_rate := 0;
415 X_Success := -5;
416 WHEN rate_neg_exception THEN
417 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxgfr',
418 name => 'FA_FORMULA_RATE_NEGATIVE',
419 token1 => 'ASSET_ID',
420 value1 => TO_CHAR(ROUND(X_Rate, 5)),
421 p_log_level_rec => p_log_level_rec);
422 X_rate := 0;
423 X_Success := 1;
424 WHEN OTHERS THEN
425 fa_srvr_msg.add_sql_error(calling_fn => 'fa_cde_pkg.faxgfr',
426 p_log_level_rec => p_log_level_rec);
427 X_rate := 0;
428 X_Success := 0;
429 END FAXGFR;
430
431 FUNCTION faxgrl(X_Asset_Id IN NUMBER,
432 X_Book_Type_Code IN VARCHAR2,
433 X_Short_Fiscal_Year_Flag IN VARCHAR2,
434 X_Prorate_Date IN DATE,
435 X_Conversion_Date IN DATE,
436 X_Orig_Deprn_Start_Date IN DATE,
437 X_Fiscal_Year IN NUMBER,
438 X_Life_In_Months IN NUMBER,
439 X_Method_Code IN VARCHAR2,
440 X_Current_Period IN NUMBER,
441 X_rem_life1 OUT NOCOPY NUMBER,
442 X_rem_life2 OUT NOCOPY NUMBER,
443 p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
444 RETURN BOOLEAN IS
445
446 X_curr_fy_start_date DATE;
447 X_curr_fy_end_date DATE;
448 X_Success VARCHAR2(3);
449 X_Rate_Source_Rule VARCHAR2(10) := 'FORMULA';
450 h_curr_fy NUMBER;
451 h_short_fiscal_year_flag VARCHAR2(3);
452 h_conversion_year NUMBER;
453 h_dpis DATE;
454 -- added h_deprn_start_date for fix to Bug 1095275
455 h_deprn_start_date DATE;
456
457 BEGIN
458 SELECT fy.start_date,
459 fy.end_date,
460 bc2.current_fiscal_year,
461 bk.date_placed_in_service,
462 bk.deprn_start_date
463 INTO X_curr_fy_start_date,
464 X_curr_fy_end_date,
465 h_curr_fy,
466 h_dpis,
467 h_deprn_start_date
468 FROM fa_books bk,
469 fa_fiscal_year fy,
470 fa_book_controls bc,
471 fa_book_controls bc2
472 WHERE bc.book_type_code = X_Book_Type_Code
473 AND fy.fiscal_year_name = bc.fiscal_year_name
474 AND fy.fiscal_year = X_Fiscal_Year
475 AND bc2.book_type_code = X_Book_Type_Code
476 AND bk.book_type_code = X_Book_Type_Code
477 AND bk.asset_id = X_Asset_Id
478 AND bk.date_ineffective IS NULL;
479
480 IF (X_Short_Fiscal_Year_Flag = 'YES' AND
481 h_curr_fy <> X_Fiscal_Year) THEN
482 h_short_fiscal_year_flag := 'NO';
483 ELSIF (X_Short_Fiscal_Year_Flag = 'NO' AND
484 X_Conversion_Date IS NOT NULL) THEN
485 SELECT COUNT(*)
486 INTO h_conversion_year
487 FROM fa_fiscal_year fy,
488 fa_book_controls bc
489 WHERE bc.book_type_code = X_Book_Type_Code
490 AND bc.fiscal_year_name = fy.fiscal_year_name
491 AND X_Conversion_Date BETWEEN fy.start_date AND
492 fy.end_date;
493 IF (h_conversion_year > 0) THEN
494 h_short_fiscal_year_flag := 'YES';
495 END IF;
496 ELSE
497 h_short_fiscal_year_flag := X_Short_Fiscal_Year_Flag;
498 END IF;
499
500 -- pass h_deprn_start_date instead of prorate date for
501 -- calculating remaing life. Fix for Bug 1095275
502
503 FA_SHORT_TAX_YEARS_PKG.Calculate_Short_Tax_Vals(
504 X_Asset_Id,
505 X_Book_Type_Code,
506 h_short_fiscal_year_flag,
507 h_dpis,
508 h_deprn_start_date,
509 X_prorate_date,
510 X_Conversion_Date,
511 X_Orig_Deprn_Start_Date,
512 X_Curr_Fy_Start_Date,
513 X_Curr_Fy_End_Date,
514 NULL, NULL, NULL, NULL, NULL,
515 NULL, NULL,
516 X_Life_In_Months,
517 X_Rate_Source_Rule,
518 X_Fiscal_Year,
519 X_Method_Code,
520 X_Current_Period,
521 X_rem_life1,
522 X_rem_life2,
523 X_Success,
524 p_log_level_rec => p_log_level_rec);
525 IF (X_success = 'YES') THEN
526 RETURN (TRUE);
527 ELSE
528 RETURN (FALSE);
529 END IF;
530
531 EXCEPTION
532 WHEN OTHERS THEN
533 RETURN (FALSE);
534 END faxgrl;
535
536 FUNCTION faxcfyf (X_dpr IN OUT NOCOPY fa_std_types.dpr_struct,
537 X_d_pers_per_yr NUMBER,
538 X_rate_source_rule VARCHAR2,
539 X_y_begin NUMBER,
540 X_y_dead NUMBER,
541 X_y_ret NUMBER,
542 X_dp_begin NUMBER,
543 X_dpp_begin NUMBER,
544 X_dp_d_ptr IN OUT NOCOPY NUMBER,
545 X_dp_r_ptr NUMBER,
546 X_dpp_r_ptr NUMBER,
547 X_pp_begin NUMBER,
548 X_pp_dead NUMBER,
549 X_pp_ret NUMBER,
550 X_by_factor IN OUT NOCOPY NUMBER,
551 X_bp_frac IN OUT NOCOPY NUMBER,
552 X_dp_frac IN OUT NOCOPY NUMBER,
553 X_rp_frac IN OUT NOCOPY NUMBER,
554 X_by_frac IN OUT NOCOPY NUMBER,
555 X_by_frac_num IN OUT NOCOPY NUMBER, --Bug 14810421
556 X_by_frac_den IN OUT NOCOPY NUMBER, --Bug 14810421
557 X_dy_frac IN OUT NOCOPY NUMBER,
558 X_ry_frac IN OUT NOCOPY NUMBER,
559 X_prd_flag varchar2,
560 p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
561 RETURN BOOLEAN IS
562 h_by_dfrac NUMBER;
563 h_dy_dfrac NUMBER;
564 h_p_period_fracs fa_std_types.table_fa_cp_struct;
565 h_d_period_fracs fa_std_types.table_fa_cp_struct;
566 h_ctr NUMBER;
567 h_b_temp NUMBER;
568 h_d_temp NUMBER;
569 h_r_temp NUMBER;
570 h_cur_fy NUMBER;
571
572 BEGIN <<FAXCFYF>>
573
574 -- If different (or new) book, get book information
575 IF last_book = X_dpr.book THEN
576 NULL;
577 ELSE
578 -- fazcbc cache should have already been called, dont'd call it again
579 last_book := X_dpr.book;
580 last_pro_cal := fa_cache_pkg.fazcbc_record.PRORATE_CALENDAR;
581 last_divide_evenly_flag := SUBSTR (fa_cache_pkg.fazcbc_record.DEPRN_ALLOCATION_CODE,1,1) = 'E';
582
583 IF NOT fa_cache_pkg.fazcct (last_pro_cal, p_log_level_rec => p_log_level_rec) THEN
584 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
585 RETURN (FALSE);
586 END IF;
587
588 p_pers_per_yr := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
589
590 IF NOT fa_cache_pkg.fazcct (X_dpr.calendar_type, p_log_level_rec => p_log_level_rec) THEN
591 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
592 RETURN (FALSE);
593 END IF;
594 END IF;
595
596 IF last_divide_evenly_flag THEN
597
598 X_by_frac := (p_pers_per_yr + 1 - X_pp_begin) / p_pers_per_yr;
599 X_by_frac_num := p_pers_per_yr + 1 - X_pp_begin; -- Bug 14810421
600 X_by_frac_den := p_pers_per_yr; -- Bug 14810421
601
602 -- Fix for Bug# 4304260, 4621761
603 IF (p_pers_per_yr >= X_d_pers_per_yr) THEN
604 h_by_dfrac := (p_pers_per_yr + 1 - X_dpp_begin) / p_pers_per_yr;
605 ELSE
606 -- Bug# 5085669
607 h_by_dfrac := (X_d_pers_per_yr + 1 - X_dp_begin) / X_d_pers_per_yr;
608 END IF;
609
610 h_b_temp := (X_d_pers_per_yr - X_dp_begin) / X_d_pers_per_yr;
611 ELSE
612 IF NOT fa_cache_pkg.fazcff(last_pro_cal,
613 X_dpr.book,
614 X_y_begin,
615 h_p_period_fracs,
616 p_log_level_rec) THEN
617 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
618 RETURN (FALSE);
619 END IF;
620
621 IF NOT fa_cache_pkg.fazcff(X_dpr.calendar_type,
622 X_dpr.book,
623 X_y_begin,
624 h_d_period_fracs,
625 p_log_level_rec) THEN
626 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
627 RETURN (FALSE);
628 END IF;
629
630 X_by_frac := 0;
631 FOR i IN X_pp_begin..p_pers_per_yr LOOP
632 X_by_frac := X_by_frac + h_p_period_fracs(i-1).frac;
633 END LOOP;
634
635 h_by_dfrac := 0;
636 FOR i IN X_dpp_begin..p_pers_per_yr LOOP
637 h_by_dfrac := h_by_dfrac + h_p_period_fracs(i-1).frac;
638 END LOOP;
639
640 h_b_temp := 0;
641 FOR i IN X_dp_begin+1..X_d_pers_per_yr LOOP
642 h_b_temp := h_b_temp + h_d_period_fracs(i-1).frac;
643 END LOOP;
644 END IF;
645
646 X_bp_frac := h_by_dfrac - h_b_temp;
647
648 IF X_rate_source_rule = 'TABLE' THEN
649 IF h_by_dfrac <= 0 THEN
650 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcfyf',
651 name => 'FA_DEPRN_ILLEGAL_VALUE',
652 token1 => 'VARIABLE',
653 value1 => 'BY_DFRAC',
654 token2 => 'VALUE',
655 value2 => h_by_dfrac,
656 TRANSLATE => FALSE,
657 p_log_level_rec => p_log_level_rec);
658 RETURN (FALSE);
659 END IF;
660
661 X_by_factor := 1/h_by_dfrac;
662
663 ELSIF X_rate_source_rule = 'FLAT' THEN
664 IF h_by_dfrac <= 0 THEN
665 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcfyf',
666 name => 'FA_DEPRN_ILLEGAL_VALUE',
667 token1 => 'VARIABLE',
668 value1 => 'BY_DFRAC',
669 token2 => 'VALUE',
670 value2 => h_by_dfrac,
671 TRANSLATE => FALSE,
672 p_log_level_rec => p_log_level_rec);
673 RETURN (FALSE);
674 END IF;
675
676 X_by_factor := X_by_frac / h_by_dfrac;
677
678 ELSIF X_rate_source_rule IN ('PRODUCTION','CALCULATED', 'FORMULA') THEN
679 X_by_factor := 1;
680 ELSE
681 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf.switch', p_log_level_rec => p_log_level_rec);
682 RETURN(FALSE);
683 END IF;
684
685 IF X_y_ret <> 0 THEN
686 h_cur_fy := fa_cache_pkg.fazcbc_record.CURRENT_FISCAL_YEAR;
687
688 IF last_divide_evenly_flag THEN
689 --Bug8620551
690 --Added the conditon to check for daily prorate and first period.
691 if p_pers_per_yr = 365 and X_prd_flag = 'Y' then
692 X_ry_frac :=(X_pp_ret - X_pp_begin) / p_pers_per_yr;
693 h_r_temp := 0;
694 else
695 X_ry_frac :=(X_pp_ret - 1) / p_pers_per_yr;
696 h_r_temp := (X_dp_r_ptr - 1) / X_d_pers_per_yr;
697 end if;
698
699 IF (p_log_level_rec.statement_level) THEN
700 fa_debug_pkg.ADD('faxcfyf(1.5.1)','p_pers_per_yr', p_pers_per_yr, p_log_level_rec);
701 fa_debug_pkg.ADD('faxcfyf(1.5.1)','X_d_pers_per_yr', X_d_pers_per_yr, p_log_level_rec);
702 fa_debug_pkg.ADD('faxcfyf(1.5.1)','X_ry_frac', X_ry_frac, p_log_level_rec);
703 fa_debug_pkg.ADD('faxcfyf(1.5.1)','h_r_temp', h_r_temp, p_log_level_rec);
704 END IF;
705 ELSE
706 IF NOT fa_cache_pkg.fazcff(last_pro_cal,
707 X_dpr.book,
708 X_y_ret,
709 h_p_period_fracs,
710 p_log_level_rec) THEN
711 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
712 RETURN (FALSE);
713 END IF;
714
715 -- Bug#4953366: if not fa_cache_pkg.fazcff (X_dpr.calendar_type, X_dpr.book, X_y_ret,
716 IF NOT fa_cache_pkg.fazcff(X_dpr.calendar_type,
717 X_dpr.book,
718 h_cur_fy,
719 h_d_period_fracs,
720 p_log_level_rec) THEN
721 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
722 RETURN (FALSE);
723 END IF;
724
725 --Bug# 8620551 - Added the conditon to check for daily prorate and first period.
726 if p_pers_per_yr = 365 and X_prd_flag = 'Y' then
727 X_ry_frac := 0;
728 for i in X_pp_begin .. X_pp_ret-1 loop
729 X_ry_frac := X_ry_frac + h_p_period_fracs(i-1).frac;
730 end loop;
731 h_r_temp := 0;
732 else
733 --
734 -- Note condition 'i < X_pp_ret'; this is because no
735 -- depreciation should be taken in the prorate
736 -- period retired
737 --
738 X_ry_frac := 0;
739 FOR i IN 1 .. X_pp_ret-1 LOOP
740 X_ry_frac := X_ry_frac + h_p_period_fracs(i-1).frac;
741 END LOOP;
742
743 -- Note condition 'i < *X_dp_r_ptr'; see above
744 h_r_temp := 0;
745 FOR i IN 1 .. X_dp_r_ptr-1 LOOP
746 h_r_temp := h_r_temp + h_d_period_fracs(i-1).frac;
747 END LOOP;
748 end if;
749
750 IF (p_log_level_rec.statement_level) THEN
751 fa_debug_pkg.ADD('faxcfyf(1.5.2)','X_pp_ret', X_pp_ret, p_log_level_rec);
752 fa_debug_pkg.ADD('faxcfyf(1.5.2)','X_ry_frac', X_ry_frac, p_log_level_rec);
753 fa_debug_pkg.ADD('faxcfyf(1.5.2)','X_dp_r_ptr', X_dp_r_ptr, p_log_level_rec);
754 fa_debug_pkg.ADD('faxcfyf(1.5.2)','h_r_temp', h_r_temp, p_log_level_rec);
755 END IF;
756 END IF;
757
758 X_rp_frac := (X_y_ret - h_cur_fy)+ (X_ry_frac - h_r_temp);
759
760 IF (p_log_level_rec.statement_level) THEN
761 fa_debug_pkg.ADD('faxcfyf(2)','X_y_ret', X_y_ret, p_log_level_rec);
762 fa_debug_pkg.ADD('faxcfyf(2)','h_cur_fy', h_cur_fy, p_log_level_rec);
763 fa_debug_pkg.ADD('faxcfyf(2)','X_ry_frac', X_ry_frac, p_log_level_rec);
764 fa_debug_pkg.ADD('faxcfyf(2)','h_r_temp', h_r_temp, p_log_level_rec);
765 fa_debug_pkg.ADD('faxcfyf(2)','X_rp_frac', X_rp_frac, p_log_level_rec);
766 fa_debug_pkg.ADD('faxcfyf(2)','X_y_begin', X_y_begin, p_log_level_rec);
767 END IF;
768
769 IF X_y_ret = X_y_begin THEN
770 IF X_by_frac <= 0 THEN
771 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcfyf',
772 name => 'FA_DEPRN_ILLEGAL_VALUE',
773 token1 => 'VARIABLE',
774 value1 => 'BY_FRAC',
775 token2 => 'VALUE',
776 value2 => X_by_frac,
777 TRANSLATE => FALSE,
778 p_log_level_rec => p_log_level_rec);
779 RETURN (FALSE);
780 END IF;
781
782 X_rp_frac := (h_by_dfrac/X_by_frac) * (X_ry_frac+X_by_frac-1) -
783 (X_bp_frac+h_r_temp+h_b_temp-1);
784
785 IF X_dp_r_ptr = X_dp_begin THEN
786 X_bp_frac := X_rp_frac;
787 END IF;
788 END IF;
789
790 IF X_ry_frac < 0 THEN
791 X_ry_frac := 0;
792 X_rp_frac := 0;
793 END IF;
794
795 ELSE
796 X_ry_frac := 1;
797 X_rp_frac := 0;
798 END IF;
799
800 IF X_y_dead <> 0 THEN
801 IF last_divide_evenly_flag THEN
802 X_dy_frac := X_pp_dead / p_pers_per_yr;
803 h_dy_dfrac := X_dy_frac;
804
805 IF p_pers_per_yr = X_d_pers_per_yr THEN
806 X_dp_d_ptr := X_pp_dead;
807 ELSE
808 X_dp_d_ptr := CEIL ( ROUND ( X_dy_frac * X_d_pers_per_yr,fa_std_types.FA_ROUND_DECIMAL));
809 END IF;
810
811 h_d_temp := (X_dp_d_ptr - 1) / X_d_pers_per_yr;
812 ELSE
813 IF NOT fa_cache_pkg.fazcff(last_pro_cal,
814 X_dpr.book,
815 X_y_dead,
816 h_p_period_fracs,
817 p_log_level_rec) THEN
818 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
819 RETURN (FALSE);
820 END IF;
821
822 IF NOT fa_cache_pkg.fazcff(X_dpr.calendar_type,
823 X_dpr.book,
824 X_y_dead,
825 h_d_period_fracs,
826 p_log_level_rec) THEN
827 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
828 RETURN (FALSE);
829 END IF;
830
831 -- Fixed loop ctr usage here - changed i to i-1
832 X_dy_frac := 0;
833 FOR i IN 1.. X_pp_dead LOOP
834 X_dy_frac := X_dy_frac + h_p_period_fracs(i-1).frac;
835 END LOOP;
836
837 h_dy_dfrac := X_dy_frac;
838 h_d_temp := 0;
839 FOR i IN 1..X_d_pers_per_yr LOOP
840 h_ctr := i;
841 IF ROUND (h_d_temp+h_d_period_fracs(i-1).frac, fa_std_types.FA_ROUND_DECIMAL) >=
842 ROUND ( X_dy_frac,fa_std_types.FA_ROUND_DECIMAL) THEN
843 EXIT;
844 END IF;
845 h_d_temp := h_d_temp + h_d_period_fracs(i-1).frac;
846 END LOOP;
847
848 X_dp_d_ptr := h_ctr;
849 END IF; -- last_divide_evenly_flag THEN
850
851 X_dp_frac := X_dy_frac + h_d_temp;
852
853 IF X_y_dead = X_y_ret THEN
854 IF X_dy_frac > X_ry_frac THEN
855 X_dy_frac := X_ry_frac;
856
857 IF X_dp_d_ptr = X_dp_r_ptr THEN
858 X_dp_frac := X_rp_frac;
859 ELSE
860 X_dp_frac := 0;
861 END IF;
862 END IF;
863 END IF;
864
865 ELSE
866 X_dy_frac := 1;
867 h_dy_dfrac := 1;
868 X_dp_d_ptr := X_d_pers_per_yr;
869 X_dp_frac := 0;
870 END IF;
871
872 RETURN (TRUE);
873
874 EXCEPTION
875 WHEN OTHERS THEN
876 fa_srvr_msg.add_sql_error (calling_fn => 'fa_cde_pkg.faxcfyf', p_log_level_rec => p_log_level_rec);
877 RETURN (FALSE);
878 END FAXCFYF;
879
880 /*
881 ** Table to map new variable names to old variable names.
882
883 Old name New name Comment
884 -------- ------------ --------------------------------------
885 r_y_dead fy_fully_rsv fiscal year which asset becomes
886 fully reserved
887
888 c_r_y_dead fy_fully_rsv_1 Value of r_y_dead passing into
889 faxcfyf() to calculate fraction of
890 last year of asset's life
891
892 r_dp_dead deprn_perd_fully_rsv depreciation period which asset
893 becomes fully reserved
894
895 r_pp_dead prate_perd_fully_rsv prorate period which asset becomes
896 fully reserved
897
898 dpr_flag dpr_cur_fy_flag depreciation in current fiscal year
899
900 calc_flag calc_rate_src_flag deprn method uses calculate rate
901 source rule
902
903 formula_flag formula_rate_src_flag deprn method uses formula rate
904 source rule
905
906 prod_flag prod_rate_src_flag deprn method uses production rate
907 source rule
908
909 table_flag table_rate_src_flag deprn method uses table rate source
910 rule
911
912 flat_flag flat_rate_src_flag deprn method uses flat rate source rule
913
914 cost_flag cost_deprn_basis_flag deprn method uses cost for
915 depreciation basis rule
916
917 nbv_flag nbv_deprn_basis_flag deprn method uses nbv
918 depreciation basis rule
919
920 fy fy_ctr fiscal year counter
921
922 per perd_ctr period counter
923
924 ctr dpr_arr_ctr dpr_arr array counter
925
926 initial_rsv initial_rsv reserve at beginning of calculation
927
928 initial_ltd_prod initial_ltd_prod life-to-date production at beginning of
929 calculation
930
931 c_amt deprn_ceiling_amt depreciation expense ceilings amount
932 from FA_CEILINGS to limit the annual
933 depreciation expense
934
935 r_amt deprn_method_amt depreciation expense calculated by
936 using depreciation method
937
938 c_min use_deprn_ceil_amt depreciation ceiling amount is less than
939 depreciation amount calculated using
940 depreciation method
941
942 r_min use_deprn_prate_amt depreciation amount calculated using
943 depreciation method is less than
944 using depreciation ceiling amount
945
946 temp_r_amt temp_prate_amt temporary amount calculated
947
948 rate
949 ann_deprn_rate annsal depreciation rate
950
951 N/A method_type type of formula-based method (prod or life)
952
953 y_first first_fy_flag fiscal year is first
954 year of asset's life
955
956 y_mid mid_fy_flag fiscal year is in middle of asset's
957 life
958
959 y_last last_fy_flag fiscal year is last year of asset's
960 life
961
962 y_retired ret_fy_flag fiscal year is year in which asset is
963 retired
964
965 y_after after_eol_fy_flag fiscal year is after last year of
966 asset's life
967
968 p_st deprn_start_perd first period in fiscal year to return
969 depreciation expense
970
971 p_end deprn_end_perd last period in fiscal year to return
972 depreciation expense
973
974 fy_nz_begin actual_deprn_start_perd first period in fiscal year that has
975 non-zero depreciation
976
977 fy_nz_end actual_deprn_end_perd last period in fiscal year that has
978 non-zero depreciation
979
980 fy_amt ann_fy_deprn annualized depreciation amount for
981 fiscal year
982
983 use_frac deprn_frac_of_yr fraction of year value used
984
985 p_deprn_exp perd_deprn_exp this period's depreciation amount
986
987 p_prod perd_prod this period's production
988
989 y_deprn_exp year_deprn_exp this year's Depreciation amount
990
991 y_reval_exp year_reval_exp this year's depreciation expense due
992 to revaluation
993
994 y_reval_amo year_reval_amo this year's revaluation amortization
995
996 y_prod year_prod this year's production
997
998 deprn_exp_sum deprn_exp_sum sum of depreciation calculated
999
1000 reval_exp_sum reval_exp_sum sum of depreciation due to revaluation
1001
1002 reval_amo_sum reval_amo_sum sum of revaluation amortization
1003
1004 prod_sum prod_sum sum of production
1005
1006 cur_adj_cost cur_adj_cost current adjusted cost
1007
1008 cur_deprn_rsv cur_deprn_rsv current depreciation reserve
1009
1010 cur_reval_rsv cur_reval_rsv current revaluation reserve
1011
1012 cur_reval_amo_basis current revaluation amortization basis
1013
1014 cur_ltd_prod cur_ltd_prod current life-to-date production
1015
1016 rab_rc_ratio rab_rc_ratio ratio of revaluation amortization basis
1017 to recoverable cost
1018
1019 bp_frac first_perd_frac fraction of annual depreciation to be
1020 allocated to first period of life
1021
1022 by_frac first_year_frac fraction of annual depreciation to be
1023 allocated to first year
1024
1025 by_factor adj_first_yr_frac actual fraction of annual depreciation to be
1026 allocated to first year of asset's life based
1027 on depreciation method
1028 dp_frac last_perd_frac fraction of annual depreciation to be
1029 allocated to last period of life
1030
1031 dy_frac last_year_frac fraction of annual depreciation to be
1032 allocated to last year of life
1033
1034 rp_frac ret_perd_frac fraction of annual depreciation to be
1035 allocated to retirement period
1036
1037 ry_frac ret_year_frac fraction of annual depreciation to be
1038 allocated to retirement year
1039
1040 period_fracs perds_fracs_arr array to store period fractions of
1041 fiscal year
1042
1043 nbv_fabs nbv_absval nbv absolute value
1044
1045 rec_cost_fabs rec_cost_absval recoverable cost absolute value
1046
1047 adj_rec_cost_fabs adj_rec_cost_absval adjusted recoverable cost absolut
1048 value
1049
1050 rsv_fabs rsv_absval depreciation reserve absolute value
1051
1052
1053 temp_afnum
1054
1055 fy_name fy_name fiscal year name
1056
1057 method_id method_id depreciation method id
1058
1059 depr_last_year_flag depr_last_year_flag depreciate_lastyear_flag in
1060 fa_methods
1061
1062 rate_cal prorate_calendar prorate calendar
1063
1064 d_pers_per_yr perds_per_yr_dcal number of periods per year in
1065 depreciation calendar
1066
1067 p_pers_per_yr perds_per_yr_pcal number of periods per year in prorrate
1068 calendar
1069
1070 tmp_ub2
1071
1072 use_deprn_start_jdate actual_deprn_start_jdate
1073
1074 For stl method, actual depreciation
1075 start date equals to asset's porate
1076 date else equals to asset's
1077 deprn_start_date
1078
1079 dp_begin deprn_period_dcal_begin depreciation starting accounting
1080 period in deprn calendar which the
1081 actual_deprn_start_jdate falls into
1082
1083 dpp_begin deprn_period_pcal_begin depreciation starting prorate period
1084 in prorate calendar which the
1085 actual_deprn_start_jdate falls into
1086
1087 pp_begin prorate_period_pcal_begin depreciation starting prorate period
1088 in prorate calendar which
1089 prorate_date falls into
1090
1091 dp_ret ret_period_dcal retirement period in deprn calendar
1092 which retirement date falls into
1093
1094 dpp_ret ret_period_pcal retirement period in prorate
1095 calendar which retirement date
1096 falls into
1097
1098 pp_ret ret_prorate_period_pcal retirement prorate period in
1099 prorate calendar which retirement
1100 prorate date falls into
1101
1102 dy_begin deprn_year_dcal_begin depreciation starting year in
1103 depreciation calendar which the
1104 actual_deprn_start_jdate falls into
1105
1106 dpy_begin deprn_year_pcal_begin depreciation starting year in
1107 prorate calendar which the
1108 actual_deprn_start_jdate falls into
1109
1110 y_begin prorate_year_pcal_begin depreciation starting year in
1111 prorate calendar which
1112 prorate date falls into
1113
1114 y_ret ret_year_pcal retirement year in prorate calendar
1115 which retirement prorate date
1116 falls into
1117
1118 nbv_frac_thresh nbv_frac_thresh nbv_fraction_threshhold in
1119 fa_book_controls
1120
1121 nbv_amt_thresh nbv_amt_thresh nbv_amount_threshhold in
1122 fa_book_controls
1123
1124 projecting_flag deprn_projecting_flag
1125
1126
1127 amo_reval_rsv_flag amo_reval_rsv_flag amortize_reval_reserve_flag in
1128 fa_book_controls
1129
1130 raf rate_adj_factor rate_adjustment_factor in fa_books
1131
1132 cur_fy cur_fy current fiscal year
1133
1134 deprn_limit_flag use_deprn_limit_flag use depreciation limit flag
1135
1136 adj_rec_cost adj_rec_cost adjusted recoverable cost
1137
1138 new_deprn_exp last_period_deprn_exp depreciation expense for the last
1139 period of asset's life
1140
1141 ann_deprn_amt actual_annual_deprn_amt actual annual depreciation amount
1142
1143 ytd_deprn_sum ytd_deprn_sum sum of all year-to-date depreciation
1144 based on number of requested periods
1145 to depreciate in a fiscal year
1146
1147 pfy_exp_sum prior_fy_exp_sum sum of depreciation expense for
1148 prior fiscal years of all requested
1149 periods
1150
1151 exclude_salvage_value_flag
1152 excl_sal_val_flag exclude_salvage_value_flag in
1153 fa_methods
1154
1155 **
1156 */
1157
1158 FUNCTION faxcde (dpr_in IN OUT NOCOPY fa_std_types.dpr_struct,
1159 dpr_arr IN OUT NOCOPY fa_std_types.dpr_arr_type,
1160 dpr_out IN OUT NOCOPY fa_std_types.dpr_out_struct,
1161 fmode NUMBER,
1162 p_ind BINARY_INTEGER DEFAULT 0,
1163 p_log_level_rec IN FA_API_TYPES.log_level_rec_type default null)
1164 RETURN BOOLEAN IS
1165
1166 l_calling_fn VARCHAR2(20) := 'faxcde';
1167
1168 dpr fa_std_types.dpr_struct;
1169 dpr_sub fa_std_types.dpr_struct;
1170 fy_fully_rsv NUMBER(5);
1171 fy_fully_rsv_1 NUMBER;
1172 deprn_perd_fully_rsv NUMBER;
1173 prate_perd_fully_rsv NUMBER;
1174 dpr_cur_fy_flag BOOLEAN;
1175 calc_rate_src_flag BOOLEAN;
1176 formula_rate_src_flag BOOLEAN;
1177 prod_rate_src_flag BOOLEAN;
1178 table_rate_src_flag BOOLEAN;
1179 flat_rate_src_flag BOOLEAN;
1180 cost_deprn_basis_flag BOOLEAN;
1181 nbv_deprn_basis_flag BOOLEAN;
1182 fy_ctr NUMBER;
1183 perd_ctr NUMBER;
1184 dpr_arr_ctr NUMBER;
1185 initial_rsv NUMBER;
1186 initial_ltd_prod NUMBER;
1187 use_deprn_ceil_amt BOOLEAN;
1188 use_deprn_prate_amt BOOLEAN;
1189 deprn_ceiling_amt NUMBER;
1190 temp_prate_amt NUMBER;
1191 temp_bonus_prate_amt NUMBER;
1192 deprn_method_amt NUMBER;
1193 bonus_deprn_method_amt NUMBER;
1194 deprn_method_amt2 NUMBER; -- bug 8408871
1195 bonus_deprn_method_amt2 NUMBER; -- bug 8408871
1196 ann_deprn_rate NUMBER;
1197 method_type NUMBER := 0;
1198 first_fy_flag BOOLEAN;
1199 mid_fy_flag BOOLEAN;
1200 last_fy_flag BOOLEAN;
1201 ret_fy_flag BOOLEAN;
1202 after_eol_fy_flag BOOLEAN;
1203 deprn_start_perd NUMBER;
1204 deprn_end_perd NUMBER;
1205 actual_deprn_start_perd NUMBER;
1206 actual_deprn_end_perd NUMBER;
1207 ann_fy_deprn NUMBER;
1208 bonus_ann_fy_deprn NUMBER;
1209 deprn_frac_of_yr NUMBER;
1210 perd_deprn_exp NUMBER;
1211 perd_bonus_deprn_amount NUMBER;
1212 perd_prod NUMBER;
1213 year_deprn_exp NUMBER;
1214 year_reval_exp NUMBER;
1215 year_reval_amo NUMBER;
1216 year_prod NUMBER;
1217 year_bonus_deprn_amount NUMBER;
1218 deprn_exp_sum NUMBER;
1219 reval_exp_sum NUMBER;
1220 bonus_deprn_exp_sum NUMBER;
1221 reval_amo_sum NUMBER;
1222 prod_sum NUMBER;
1223 cur_adj_cost NUMBER;
1224 cur_deprn_rsv NUMBER;
1225 cur_reval_rsv NUMBER;
1226 cur_reval_amo_basis NUMBER;
1227 cur_ltd_prod NUMBER;
1228 cur_bonus_deprn_rsv NUMBER;
1229 rab_rc_ratio NUMBER;
1230 first_perd_frac NUMBER;
1231 first_year_frac NUMBER;
1232 first_year_num NUMBER; -- Bug 14810421
1233 first_year_den NUMBER; --Bug 14810421
1234 adj_first_yr_frac NUMBER;
1235 last_perd_frac NUMBER;
1236 last_year_frac NUMBER;
1237 ret_perd_frac NUMBER;
1238 ret_year_frac NUMBER;
1239 period_fracs_single fa_std_types.fa_cp_struct;
1240 perds_fracs_arr fa_std_types.table_fa_cp_struct;
1241 nbv_absval NUMBER;
1242 rec_cost_absval NUMBER;
1243 adj_rec_cost_absval NUMBER;
1244 rsv_absval NUMBER;
1245 temp_afnum NUMBER;
1246 fy_name VARCHAR2(45);
1247 temp VARCHAR2(45);
1248 method_id NUMBER;
1249 depr_last_year_flag BOOLEAN;
1250 rate_source_rule VARCHAR2(40);
1251 deprn_basis_rule VARCHAR2(14);
1252 prorate_calendar VARCHAR2(48);
1253 perds_per_yr_dcal NUMBER;
1254 perds_per_yr_pcal NUMBER;
1255 tmp_ub2 NUMBER;
1256 actual_deprn_start_jdate NUMBER;
1257 deprn_period_dcal_begin NUMBER;
1258 deprn_period_pcal_begin NUMBER;
1259 ret_period_dcal NUMBER;
1260 ret_period_pcal NUMBER;
1261 ret_year_pcal NUMBER;
1262 ret_prorate_period_pcal NUMBER;
1263 deprn_year_dcal_begin NUMBER;
1264 deprn_year_pcal_begin NUMBER;
1265 prorate_year_pcal_begin NUMBER;
1266 prorate_period_pcal_begin NUMBER;
1267 nbv_frac_thresh NUMBER;
1268 nbv_amt_thresh NUMBER;
1269 deprn_projecting_flag BOOLEAN;
1270 amo_reval_rsv_flag BOOLEAN;
1271 rate_adj_factor NUMBER;
1272 cur_fy NUMBER;
1273 use_deprn_limit_flag BOOLEAN;
1274 adj_rec_cost NUMBER;
1275 last_period_deprn_exp NUMBER;
1276 actual_annual_deprn_amt NUMBER;
1277 actual_annual_bonus_deprn_amt NUMBER;
1278 ytd_deprn_sum NUMBER;
1279 ytd_bonus_deprn_sum NUMBER;
1280 prior_fy_exp_sum NUMBER;
1281 prior_fy_bonus_exp_sum NUMBER;
1282 excl_sal_val_flag BOOLEAN;
1283 ann_rounding_mode INTEGER;
1284 h_dummy NUMBER;
1285 h_dummy_dpr fa_std_types.dpr_arr_type;
1286 h_dummy_bool BOOLEAN;
1287 success INTEGER;
1288 ceiling_diff_amt NUMBER;
1289 deprn_override_flag VARCHAR2(1);
1290 override_depr_amt NUMBER;
1291 override_bonus_amt NUMBER;
1292 l_ytd_deprn NUMBER;
1293 l_bonus_ytd_deprn NUMBER;
1294 l_polish_rule NUMBER;
1295 return_code NUMBER;
1296 whatif_override_enable VARCHAR2(40); -- Changed variable name from value
1297 -- to whatif_override_enable for bug7698338
1298
1299 fy_ret NUMBER; -- Fix for Bug 1418257
1300 temp_round_amt NUMBER; -- For bug 7539379
1301 temp_round_amt1 NUMBER; -- For bug 7539379
1302 dpis_fy NUMBER; -- For bug 7539379
1303 dpis_perd_num NUMBER; -- For bug 7539379
1304 book_fy NUMBER; -- For bug 7539379
1305 subtract_ytd_init_flag BOOLEAN := TRUE; -- Bug 9814505
1306 -- For Track Member Assets
1307 p_subtract_ytd_flag VARCHAR2(1);
1308 p_deprn_amount NUMBER;
1309 p_bonus_amount NUMBER;
1310 x_new_perd_exp NUMBER;
1311 x_new_perd_bonus_deprn_amount NUMBER;
1312 x_life_complete_flag BOOLEAN;
1313 x_fully_reserved_flag BOOLEAN;
1314 h_mode VARCHAR2(15);
1315
1316 -- For depreciable basis rule
1317 h_eofy_flag VARCHAR2(1);
1318 cur_eofy_reserve NUMBER;
1319
1320 l_rate NUMBER;
1321 polish_adj_calc_basis_flag VARCHAR2(1);
1322
1323 -- Temporary deprn rsv bonus deprn rsv for call_deprn_basis
1324 cdb_deprn_rsv NUMBER;
1325 cdb_bonus_deprn_rsv NUMBER;
1326
1327 l_period_counter NUMBER(15); -- For Super Group
1328
1329 l_ind BINARY_INTEGER; -- For FA_BOOKS_SUMMARY
1330 l_accum_rsv_adj NUMBER; -- Store reserve adjustment_amount.
1331 -- It will be accumulated if faxcde is called for
1332 -- multiple periods
1333 l_rsv_adj NUMBER; -- Store reserve adjustment amount from fa_amort_pvt
1334 -- that exclude the amount of period faxcde is called
1335 -- so that it can be used when validating fully reserve or not.
1336
1337 l_temp_adj_cost NUMBER; --Bug 5657699
1338
1339 l_old_adj_rec_cost NUMBER; --Bug 8231467
1340 l_adj_deprn_rsv NUMBER; --Bug 8231467
1341
1342 l_adjusted_rsv_absval NUMBER; -- Bug 5893429
1343 h_adjusted_cost NUMBER; -- Japan Tax Reforms Project
1344 l_calling_interface VARCHAR2(30); -- Bug:5930979:Japan Tax Reform Project
1345 l_adjusted_cost NUMBER; -- Bug 7129262 : Nbv calculation of revised assets.
1346 l_request_short_name VARCHAR2(100); --- BUG # 7277598: store the Concurrent Program Short Name
1347 l_number_of_periods NUMBER; --- BUG # 7277598: store the number of periods remaining after the switch.
1348 l_count NUMBER := 0; --- BUG # 7277598: store the Temporary Count.
1349 l_nbv_at_switch NUMBER; --- BUG # 7277598: store the nbv_at_switch from Database.
1350 dpr_run_flag BOOLEAN; --- BUG # 7304706: store the TRUE/FALSE value if the Deprn is run for a particular Asset
1351 h_deprn_run varchar2(1); --- BUG # 7304706: store the Y/N value if the Deprn is run for a particular Asset
1352
1353 l_over_depreciate_option number; --Bug 8487934
1354
1355 --Bug8620551
1356 --Added new cursor and variable to check for retirement in period of addition
1357 prd_flag varchar2(1);
1358
1359 /* Bug#14784782: Added new variable to check life completed production assets */
1360 prod_life_complete varchar2(1) := 'N';
1361
1362 cursor c_prd_flag is
1363 select 'Y'
1364 from fa_calendar_periods fcp1,
1365 fa_calendar_periods fcp2,
1366 fa_book_controls fbc
1367 where to_date (dpr_in.prorate_jdate,'J') BETWEEN fcp1.start_date AND fcp1.end_date
1368 and fbc.book_type_code = dpr_in.book
1369 and fcp1.calendar_type = fbc.deprn_calendar
1370 and to_date (decode( dpr_in.jdate_retired,0,null,dpr_in.jdate_retired),'J') BETWEEN fcp2.start_date AND fcp2.end_date
1371 and fcp2.calendar_type=fcp1.calendar_type
1372 and fcp1.period_name=fcp2.period_name;
1373
1374 BEGIN <<FAXCDE>>
1375
1376 --code fix for bug no. 3909805.Used default value for
1377 -- year_depnr_exp in expressions if it is having null value.
1378
1379 dpr_out.full_rsv_flag := FALSE;
1380 dpr_out.life_comp_flag := FALSE;
1381 dpr_run_flag := FALSE;
1382 --
1383 -- Debug
1384 --
1385 IF (p_log_level_rec.statement_level) THEN
1386 h_dummy_bool := fa_cde_pkg.faprds(dpr_in, p_log_level_rec => p_log_level_rec);
1387 END IF;
1388
1389 deprn_exp_sum := 0;
1390 bonus_deprn_exp_sum := 0;
1391 reval_exp_sum := 0;
1392 reval_amo_sum := 0;
1393 prod_sum := 0;
1394 year_deprn_exp := 0;
1395 year_bonus_deprn_amount :=0;
1396 year_reval_exp := 0;
1397 year_reval_amo := 0;
1398 year_prod := 0;
1399 rab_rc_ratio := 0;
1400 actual_annual_deprn_amt := 0;
1401 actual_annual_bonus_deprn_amt := 0;
1402 ytd_deprn_sum := 0;
1403 ytd_bonus_deprn_sum := 0;
1404 prior_fy_exp_sum := 0;
1405 prior_fy_bonus_exp_sum := 0;
1406
1407 dpr_out.new_deprn_rsv := 0;
1408 dpr_out.new_bonus_deprn_rsv := 0;
1409 dpr_out.new_adj_cost := 0;
1410 dpr_out.new_reval_rsv := 0;
1411 dpr_out.new_reval_amo_basis := 0;
1412 dpr_out.new_adj_capacity := 0;
1413 dpr_out.new_ltd_prod := 0;
1414 dpr_out.ann_adj_exp := 0;
1415 dpr_out.ann_adj_reval_exp := 0;
1416 dpr_out.ann_adj_reval_amo := 0;
1417 dpr_out.bonus_rate_used := 0;
1418 dpr_out.new_prior_fy_exp := 0;
1419 dpr_out.new_prior_fy_bonus_exp := 0;
1420
1421 -- Populate initial ytd_deprn
1422 dpr_out.new_ytd_deprn := dpr_in.ytd_deprn;
1423
1424 dpr_out.new_impairment_rsv := dpr_in.impairment_rsv;
1425 dpr_out.new_capital_adjustment := dpr_in.capital_adjustment; -- Bug 6666666
1426 dpr_out.new_general_fund := dpr_in.general_fund; -- Bug 6666666
1427
1428 IF (p_log_level_rec.statement_level) THEN
1429 fa_debug_pkg.ADD('faxcde','dpr_out.new_impairment_rsv',dpr_out.new_impairment_rsv, p_log_level_rec);
1430 END IF;
1431
1432 deprn_ceiling_amt := 0;
1433 first_perd_frac := 0;
1434 first_year_frac := 0;
1435 first_year_num := 0; --- Bug 14810421
1436 first_year_den := 0; -- Bug 14810421
1437 adj_first_yr_frac := 0;
1438 last_perd_frac := 0;
1439 last_year_frac := 0;
1440 ret_perd_frac := 0;
1441 ret_year_frac := 0;
1442
1443 IF NOT fa_cache_pkg.fazccmt(dpr_in.method_code,
1444 dpr_in.life,
1445 p_log_level_rec => p_log_level_rec) THEN
1446 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1447 RETURN (FALSE);
1448 END IF;
1449
1450 method_id := fa_cache_pkg.fazccmt_record.method_id;
1451 rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
1452 deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
1453 polish_adj_calc_basis_flag := fa_cache_pkg.fazccmt_record.polish_adj_calc_basis_flag;
1454 p_subtract_ytd_flag := fa_cache_pkg.fazcdrd_record.subtract_ytd_flag;
1455
1456 IF fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag = 'YES' THEN
1457 excl_sal_val_flag := TRUE;
1458 ELSE
1459 excl_sal_val_flag := FALSE;
1460 END IF;
1461
1462 IF fa_cache_pkg.fazccmt_record.depreciate_lastyear_flag = 'YES' THEN
1463 depr_last_year_flag := TRUE;
1464 ELSE
1465 depr_last_year_flag := FALSE;
1466 END IF;
1467
1468 IF (fa_cache_pkg.fazccmt_record.deprn_basis_rule_id IS NOT NULL) THEN
1469 l_polish_rule := fa_cache_pkg.fazcdbr_record.polish_rule;
1470 END IF;
1471
1472 -- One of these will be true
1473 calc_rate_src_flag := (rate_source_rule = 'CALCULATED');
1474 prod_rate_src_flag := (rate_source_rule = 'PRODUCTION');
1475 table_rate_src_flag := (rate_source_rule ='TABLE');
1476 flat_rate_src_flag := (rate_source_rule = 'FLAT');
1477 formula_rate_src_flag := (rate_source_rule = 'FORMULA');
1478
1479 -- Initialize indicator
1480 l_ind := p_ind;
1481
1482 IF NOT (calc_rate_src_flag OR
1483 prod_rate_src_flag OR
1484 table_rate_src_flag OR
1485 flat_rate_src_flag OR
1486 formula_rate_src_flag) THEN
1487
1488 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
1489 name => 'FA_SHARED_NO_RATE_SOURCE_RULE',
1490 TRANSLATE => FALSE,
1491 p_log_level_rec => p_log_level_rec);
1492 RETURN (FALSE);
1493 END IF;
1494
1495 -- One of these will be true
1496 cost_deprn_basis_flag := (deprn_basis_rule = 'COST');
1497 nbv_deprn_basis_flag := (deprn_basis_rule = 'NBV');
1498
1499 IF NOT (cost_deprn_basis_flag OR nbv_deprn_basis_flag) THEN
1500
1501 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
1502 name => 'FA_SHARED_NO_DEPRN_BASIS_RULE',
1503 TRANSLATE => FALSE,
1504 p_log_level_rec => p_log_level_rec);
1505 RETURN (FALSE);
1506 END IF;
1507
1508 IF nbv_deprn_basis_flag AND
1509 NOT (flat_rate_src_flag OR
1510 table_rate_src_flag OR
1511 formula_rate_src_flag OR -- ENERGY
1512 prod_rate_src_flag) THEN -- ENERGY
1513
1514 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
1515 name => 'FA_SHARED_NBV_NOT_FLAT',
1516 TRANSLATE => FALSE,
1517 p_log_level_rec => p_log_level_rec);
1518 RETURN (FALSE);
1519 END IF;
1520
1521 --
1522 -- set use_deprn_limit_flag if asset's recoverable cost is not
1523 -- equal to adjusted recoverable cost and deprn_source_rule is
1524 -- not CALCULATED or FLAT or FORMULA
1525 --
1526 IF (calc_rate_src_flag OR
1527 flat_rate_src_flag OR
1528 formula_rate_src_flag) AND
1529 (dpr_in.rec_cost <> dpr_in.adj_rec_cost) THEN
1530
1531 use_deprn_limit_flag := TRUE;
1532 adj_rec_cost := dpr_in.adj_rec_cost;
1533 ELSE
1534 use_deprn_limit_flag := FALSE;
1535 adj_rec_cost := dpr_in.rec_cost;
1536 END IF;
1537
1538 deprn_projecting_flag := (fmode = fa_std_types.FA_DPR_PROJECT);
1539
1540 --
1541 -- Get the following information from the FA_BOOK_CONTROLS cache
1542 -- 1. Rate Calendar
1543 -- 2. NBV Fraction Threshold
1544 -- 3. NBV Amount Threshold
1545 -- 4. Amortize Reval Reserve Flag
1546 -- 5. Fiscal Year Name
1547 -- 6. Current Fiscal Year
1548 --
1549 -- fazcbc cache should have already been called don't call again
1550 -- BUG# 4027981 - use the mrc enabled cache for nbv_amount_threshold
1551
1552 prorate_calendar := fa_cache_pkg.fazcbc_record.PRORATE_CALENDAR;
1553 nbv_frac_thresh := NVL(fa_cache_pkg.fazcbc_record.NBV_FRACTION_THRESHOLD,
1554 fa_std_types.FA_DEF_NBV_FRAC);
1555 nbv_amt_thresh := NVL(fa_cache_pkg.fazcbcs_record.NBV_AMOUNT_THRESHOLD,
1556 fa_std_types.FA_DEF_NBV_AMT);
1557 amo_reval_rsv_flag := (fa_cache_pkg.fazcbc_record.AMORTIZE_REVAL_RESERVE_FLAG = 'YES');
1558 fy_name := fa_cache_pkg.fazcbc_record.FISCAL_YEAR_NAME;
1559 cur_fy := fa_cache_pkg.fazcbc_record.CURRENT_FISCAL_YEAR;
1560
1561 --
1562 -- Get the number of periods per year in the depreciation calendar
1563 --
1564 IF NOT fa_cache_pkg.fazcct(dpr_in.calendar_type, p_log_level_rec => p_log_level_rec) THEN
1565 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1566 RETURN (FALSE);
1567 END IF;
1568
1569 perds_per_yr_dcal := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
1570
1571 --
1572 -- Get the number of periods per year in the rate calendar
1573 --
1574 IF NOT fa_cache_pkg.fazcct(prorate_calendar, p_log_level_rec => p_log_level_rec) THEN
1575 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1576 RETURN (FALSE);
1577 END IF;
1578
1579 perds_per_yr_pcal := fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR;
1580
1581 --
1582 -- Determine the actual Deprn Start Date to use: this is the
1583 -- dpr_in.deprn_start_date, unless the method is STL (calc_rate_src_flag)
1584 -- Fix for Bug 903791. For formula_rate_src_flag we will use the
1585 -- deprn_start_date as determined by Depreciate When Placed in Service
1586 -- flag in Prorate Convention.
1587
1588 IF calc_rate_src_flag THEN
1589 actual_deprn_start_jdate := dpr_in.prorate_jdate ;
1590 ELSE
1591 actual_deprn_start_jdate := dpr_in.deprn_start_jdate;
1592 END IF;
1593
1594 --
1595 -- Get the depreciation start period, and the corresponding
1596 -- fiscal year. We use h_dummy to hold the returned start
1597 -- date, which we don't need.
1598 --
1599 IF NOT fa_cache_pkg.fazccp(dpr_in.calendar_type,
1600 fy_name,
1601 actual_deprn_start_jdate,
1602 deprn_period_dcal_begin,
1603 deprn_year_dcal_begin,
1604 h_dummy,
1605 p_log_level_rec => p_log_level_rec) THEN
1606 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1607 RETURN (FALSE);
1608 END IF;
1609
1610 --
1611 -- Get the depreciation start prorate period, and the corresponding
1612 -- fiscal year
1613 --
1614 IF NOT fa_cache_pkg.fazccp(prorate_calendar
1615 , fy_name
1616 , actual_deprn_start_jdate
1617 , deprn_period_pcal_begin
1618 , deprn_year_pcal_begin
1619 , h_dummy
1620 , p_log_level_rec => p_log_level_rec) THEN
1621 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1622 RETURN (FALSE);
1623 END IF;
1624
1625 --
1626 -- Get the prorate period, and the corresponding fiscal year
1627 --
1628 IF NOT fa_cache_pkg.fazccp(prorate_calendar
1629 , fy_name
1630 , dpr_in.prorate_jdate
1631 , prorate_period_pcal_begin
1632 , prorate_year_pcal_begin
1633 , h_dummy
1634 , p_log_level_rec => p_log_level_rec) THEN
1635 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1636 RETURN (FALSE);
1637 END IF;
1638
1639 IF deprn_year_dcal_begin < prorate_year_pcal_begin THEN
1640 deprn_year_dcal_begin := prorate_year_pcal_begin;
1641 deprn_period_dcal_begin := 1;
1642 END IF;
1643
1644 IF deprn_year_pcal_begin < prorate_year_pcal_begin THEN
1645 deprn_year_pcal_begin := prorate_year_pcal_begin;
1646 deprn_period_pcal_begin := 1;
1647 END IF;
1648
1649 IF dpr_in.y_begin = 0 THEN
1650 dpr_in.y_begin := prorate_year_pcal_begin;
1651
1652 IF deprn_year_dcal_begin = prorate_year_pcal_begin THEN
1653 dpr_in.p_cl_begin := deprn_period_dcal_begin;
1654 ELSE
1655 dpr_in.p_cl_begin := 1;
1656 END IF;
1657 END IF;
1658
1659 IF dpr_in.jdate_retired <> 0 AND
1660 dpr_in.ret_prorate_jdate <> 0 THEN
1661 IF NOT fa_cache_pkg.fazccp(dpr_in.calendar_type
1662 , fy_name
1663 , dpr_in.jdate_retired
1664 , ret_period_dcal
1665 , ret_year_pcal
1666 , h_dummy
1667 , p_log_level_rec => p_log_level_rec) THEN
1668 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1669 RETURN (FALSE);
1670 END IF;
1671
1672 -- assign y_ret to fy_ret as it gets overwritten in next call
1673 -- to fazccp. Fix for 1418257
1674 fy_ret := ret_year_pcal;
1675
1676 IF NOT fa_cache_pkg.fazccp(prorate_calendar
1677 , fy_name
1678 , dpr_in.jdate_retired
1679 , ret_period_pcal
1680 , ret_year_pcal
1681 , h_dummy
1682 , p_log_level_rec => p_log_level_rec) THEN
1683 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1684 RETURN (FALSE);
1685 END IF;
1686
1687 IF NOT fa_cache_pkg.fazccp(prorate_calendar
1688 , fy_name
1689 , dpr_in.ret_prorate_jdate
1690 , ret_prorate_period_pcal
1691 , ret_year_pcal
1692 , h_dummy
1693 , p_log_level_rec => p_log_level_rec) THEN
1694 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1695 RETURN (FALSE);
1696 END IF;
1697 ELSE
1698 ret_period_dcal := 0;
1699 ret_prorate_period_pcal := 0;
1700 ret_year_pcal := 0;
1701 fy_ret := 0;
1702 END IF; -- dpr_in.jdate_retired <> 0 and
1703
1704 --
1705 -- If Current reserve is not known, calculate what it
1706 -- should be by calling this routine starting at the
1707 -- beginning of the asset's life
1708 --
1709 -- bonus? When is rsv_known_flag false?
1710 -- FAWDPRB.pls, FAEXADJB.pls, FATXRSVB.pls, FAAMRT1B.pls checked
1711 -- and all return true.
1712 -- Included dpr.depn_rsv and dpr_out.new_bonus_deprn_rsv anyway.
1713 IF NOT dpr_in.rsv_known_flag THEN
1714 dpr := dpr_in;
1715 dpr.deprn_rsv := 0;
1716 dpr.bonus_deprn_rsv := 0;
1717 dpr.ltd_prod := 0;
1718 initial_rsv := 0;
1719 initial_ltd_prod := 0;
1720 dpr.rsv_known_flag := TRUE;
1721 dpr.y_begin := prorate_year_pcal_begin;
1722
1723 IF dpr_in.p_cl_begin = 1 THEN
1724 dpr.y_end := dpr_in.y_begin - 1;
1725 ELSE
1726 dpr.y_end := dpr_in.y_begin;
1727 END IF;
1728
1729 dpr.p_cl_begin := 1;
1730 dpr.p_cl_end := MOD(dpr_in.p_cl_begin - 2 + perds_per_yr_dcal,
1731 perds_per_yr_dcal) + 1;
1732
1733 IF NOT fa_cde_pkg.faxcde(dpr
1734 , h_dummy_dpr
1735 , dpr_out
1736 , fmode
1737 , p_log_level_rec => p_log_level_rec) THEN
1738 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1739 RETURN (FALSE);
1740 END IF;
1741
1742 dpr_in.rsv_known_flag := TRUE;
1743 dpr_in.deprn_rsv := dpr_out.new_deprn_rsv;
1744 dpr_in.bonus_deprn_rsv := dpr_out.new_bonus_deprn_rsv;
1745 dpr_in.adj_cost := dpr_out.new_adj_cost;
1746 dpr_in.ltd_prod := dpr_out.new_ltd_prod;
1747 dpr_in.prior_fy_exp := dpr_out.new_prior_fy_exp;
1748 dpr_in.prior_fy_bonus_exp := dpr_out.new_prior_fy_bonus_exp;
1749
1750 --
1751 -- Debug
1752 --
1753 IF (p_log_level_rec.statement_level) THEN
1754 fa_debug_pkg.ADD('faxcde','new deprn_rsv',dpr_in.deprn_rsv, p_log_level_rec => p_log_level_rec);
1755 fa_debug_pkg.ADD('faxcde','new adj_cost',dpr_in.adj_cost, p_log_level_rec => p_log_level_rec);
1756 fa_debug_pkg.ADD('faxcde','new ltd_prod',dpr_in.ltd_prod, p_log_level_rec => p_log_level_rec);
1757 fa_debug_pkg.ADD('faxcde','new prior_fy_exp',dpr_in.prior_fy_exp, p_log_level_rec => p_log_level_rec);
1758 fa_debug_pkg.ADD('faxcde','new prior_fy_bonus_exp',dpr_in.prior_fy_bonus_exp, p_log_level_rec => p_log_level_rec);
1759 END IF;
1760 END IF; -- not dpr_in.rsv_known_flag
1761
1762 dpr := dpr_in;
1763
1764 cur_deprn_rsv := dpr.deprn_rsv;
1765 cur_reval_rsv := dpr.reval_rsv;
1766 cur_ltd_prod := dpr.ltd_prod;
1767 cur_adj_cost := dpr.adj_cost;
1768 cur_reval_amo_basis := dpr.reval_amo_basis;
1769 -- bonus. dpr.bonus_deprn_rsv should be known at this point
1770
1771 cur_bonus_deprn_rsv := dpr.bonus_deprn_rsv;
1772
1773 cur_eofy_reserve := dpr.eofy_reserve;
1774
1775 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
1776 cur_adj_cost := cur_adj_cost + dpr.salvage_value;
1777 END IF;
1778
1779 --
1780 -- Debug
1781 --
1782 IF (p_log_level_rec.statement_level) THEN
1783 fa_debug_pkg.ADD('faxcde','cur_deprn_rsv',cur_deprn_rsv, p_log_level_rec => p_log_level_rec);
1784 fa_debug_pkg.ADD('faxcde','cur_reval_rsv',cur_reval_rsv, p_log_level_rec => p_log_level_rec);
1785 fa_debug_pkg.ADD('faxcde','cur_adj_cost',cur_adj_cost, p_log_level_rec => p_log_level_rec);
1786 END IF;
1787
1788 --
1789 -- If Flat-Rate or Production depreciation, do not use
1790 -- the asset's life
1791 --
1792 IF flat_rate_src_flag OR prod_rate_src_flag THEN
1793 prate_perd_fully_rsv := 1;
1794 fy_fully_rsv := 0;
1795 ELSE
1796 prate_perd_fully_rsv := 1 + MOD (prorate_period_pcal_begin - 2 +
1797 CEIL(dpr.life * perds_per_yr_pcal / 12.0),
1798 perds_per_yr_pcal);
1799 fy_fully_rsv := prorate_year_pcal_begin + FLOOR((dpr.life - 1) / 12.0);
1800
1801 IF prate_perd_fully_rsv < prorate_period_pcal_begin THEN
1802 fy_fully_rsv := fy_fully_rsv + 1;
1803 END IF;
1804 END IF;
1805
1806 dpr_arr_ctr := 0;
1807
1808 IF fy_fully_rsv <= dpr.y_end THEN
1809 fy_fully_rsv_1 := fy_fully_rsv ;
1810 ELSE
1811 fy_fully_rsv_1 := 0;
1812 END IF;
1813 --Bug8620551: Added check for retirement in period of addition
1814 open c_prd_flag;
1815 fetch c_prd_flag into prd_flag;
1816
1817 if c_prd_flag%NOTFOUND then
1818 prd_flag := 'N';
1819 end if;
1820
1821 close c_prd_flag;
1822
1823 IF NOT fa_cde_pkg.faxcfyf(dpr
1824 , perds_per_yr_dcal
1825 , rate_source_rule
1826 , prorate_year_pcal_begin
1827 , fy_fully_rsv_1
1828 , ret_year_pcal
1829 , deprn_period_dcal_begin
1830 , deprn_period_pcal_begin
1831 , deprn_perd_fully_rsv
1832 , ret_period_dcal
1833 , ret_period_pcal
1834 , prorate_period_pcal_begin
1835 , prate_perd_fully_rsv
1836 , ret_prorate_period_pcal
1837 , adj_first_yr_frac
1838 , first_perd_frac
1839 , last_perd_frac
1840 , ret_perd_frac
1841 , first_year_frac
1842 , first_year_num -- Bug 14810421
1843 , first_year_den -- Bug 14810421
1844 , last_year_frac
1845 , ret_year_frac
1846 , prd_flag
1847 , p_log_level_rec => p_log_level_rec) THEN
1848
1849 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1850 RETURN (FALSE);
1851 END IF;
1852
1853 ann_rounding_mode:= fadgpoar();
1854
1855 IF (prod_rate_src_flag AND ann_rounding_mode = ROUND_ALWAYS) THEN
1856 ann_rounding_mode:= ROUND_WITH_RESTRICTIONS;
1857 END IF;
1858
1859 --
1860 -- Override depreciation functionality
1861 --
1862 IF NVL(dpr_in.deprn_override_flag, fa_std_types.FA_NO_OVERRIDE) <>
1863 fa_std_types.FA_OVERRIDE_RECURSIVE THEN
1864 dpr_out.deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
1865 END IF;
1866
1867 -- Added the Below code to take care of the Bug# 7277598
1868 -- Below Query will fetch the program short name from the Conc Request Summary.
1869 IF fnd_global.conc_request_id is not null AND fnd_global.conc_request_id <> -1 then
1870 BEGIN
1871 select program_short_name
1872 into l_request_short_name
1873 from FND_CONC_REQ_SUMMARY_V
1874 where request_id = fnd_global.conc_request_id;
1875 EXCEPTION
1876 when others then
1877 l_request_short_name := NULL;
1878 END;
1879 END IF;
1880
1881 --- The following code is added to check whether NBV_AT_SWITCH column of fa_books has value or Not.
1882 IF l_request_short_name = 'FAWDPR' then
1883 BEGIN
1884 SELECT nbv_at_switch
1885 INTO l_nbv_at_switch
1886 FROM fa_books
1887 WHERE asset_id = dpr.asset_id
1888 AND book_type_code = dpr.book
1889 AND transaction_header_id_out is null;
1890 EXCEPTION
1891 WHEN OTHERS THEN
1892 l_nbv_at_switch := NULL;
1893 END;
1894 --- BUG# 7290365 : If clause added becuase the program is erroring out ora-01476 for Method JP-250DB 2
1895 IF fa_cache_pkg.fazcfor_record.revised_Rate = 0 THEN
1896 l_number_of_periods := perds_per_yr_dcal;
1897 ELSIF fa_cache_pkg.fazcfor_record.revised_Rate > 0 THEN
1898 l_number_of_periods := CEIL(perds_per_yr_dcal/fa_cache_pkg.fazcfor_record.revised_Rate); --- Calculate the Approximate Number of Periods, when Switch happens.
1899 END IF;
1900 -- End of BUG# 7290365.
1901 -- BUG# 7304706 : the query below will get the details about whether deprn is run for a particular asset.
1902 -- If deprn is already run for the Asset, follow the standard procedure of calculating the Deprn.
1903 BEGIN
1904 SELECT 'Y'
1905 INTO h_deprn_run
1906 FROM fa_deprn_summary
1907 WHERE book_type_code = dpr.book
1908 AND asset_id = dpr.asset_id
1909 AND deprn_source_code = 'DEPRN'
1910 AND period_counter = ((dpr_in.y_begin*perds_per_yr_dcal+dpr_in.p_cl_begin)-1);
1911 EXCEPTION
1912 WHEN OTHERS THEN
1913 h_deprn_run := NULL;
1914 dpr_run_flag := FALSE;
1915 END;
1916
1917
1918 IF h_deprn_run = 'Y' then
1919 dpr_run_flag := TRUE;
1920 END IF;
1921 -- BUG# 7304706 : End Of Addition
1922 END IF;
1923 -- End of Addition Bug# 7277598
1924
1925
1926 -- Loop over all requested Fiscal Years --
1927 --
1928 -- YEAR LOOP
1929 --
1930 /* Bug# 13969966 */
1931 if dpr.y_end is null then
1932 dpr.y_end := dpr.y_begin;
1933 end if;
1934
1935 FOR fyctr IN dpr.y_begin..dpr.y_end LOOP
1936
1937 fy_ctr := fyctr;
1938 year_deprn_exp :=0;
1939 year_reval_exp :=0;
1940 year_reval_amo :=0;
1941 year_bonus_deprn_amount :=0;
1942 year_prod :=0 ;
1943 actual_annual_deprn_amt := 0;
1944 actual_annual_bonus_deprn_amt := 0;
1945
1946 IF NOT fa_cache_pkg.fazcff(dpr.calendar_type
1947 , dpr.book
1948 , fyctr
1949 , perds_fracs_arr
1950 , p_log_level_rec => p_log_level_rec) THEN
1951 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
1952 RETURN (FALSE);
1953 END IF;
1954
1955 IF (p_log_level_rec.statement_level) THEN
1956 fa_debug_pkg.ADD('faxcde','cur_deprn_rsv1',cur_deprn_rsv, p_log_level_rec => p_log_level_rec);
1957 fa_debug_pkg.ADD('faxcde','cur_reval_rsv1',cur_reval_rsv, p_log_level_rec => p_log_level_rec);
1958 fa_debug_pkg.ADD('faxcde','cur_adj_cost1',cur_adj_cost, p_log_level_rec => p_log_level_rec);
1959 END IF;
1960
1961 first_fy_flag := FALSE;
1962 mid_fy_flag := FALSE;
1963 last_fy_flag := FALSE;
1964 after_eol_fy_flag := FALSE;
1965 ret_fy_flag := FALSE;
1966
1967 IF fyctr < prorate_year_pcal_begin THEN
1968 dpr_cur_fy_flag := FALSE;
1969 ELSIF fyctr = prorate_year_pcal_begin THEN
1970 first_fy_flag := TRUE;
1971 dpr_cur_fy_flag := TRUE;
1972 ELSIF (fyctr > prorate_year_pcal_begin) AND (fy_fully_rsv = 0 OR (fyctr < fy_fully_rsv) OR
1973 flat_rate_src_flag OR prod_rate_src_flag) THEN
1974 mid_fy_flag := TRUE;
1975 dpr_cur_fy_flag := TRUE;
1976
1977 ELSIF fyctr = fy_fully_rsv THEN
1978 last_fy_flag := TRUE;
1979 dpr_cur_fy_flag := TRUE;
1980 ELSIF fyctr > fy_fully_rsv THEN
1981 after_eol_fy_flag := TRUE;
1982 --
1983 -- Continually depreciate an asset after its life is
1984 -- completed but it is not fully reserved yet.
1985 -- This handles the cases where an asset becomes
1986 -- fully reserved before reaching end of year loop.
1987 -- (e.g. prior period addition case)
1988 --
1989 dpr_cur_fy_flag := NOT dpr_out.full_rsv_flag;
1990 END IF;
1991
1992 IF fyctr = fy_ret THEN
1993 ret_fy_flag := TRUE;
1994 dpr_cur_fy_flag := dpr_cur_fy_flag AND depr_last_year_flag;
1995 END IF;
1996
1997 IF ret_year_pcal <> 0 AND fyctr > fy_ret THEN
1998 dpr_cur_fy_flag := FALSE;
1999 END IF;
2000
2001 IF fyctr = dpr.y_begin THEN
2002 deprn_start_perd := dpr.p_cl_begin;
2003 IF dpr.y_begin = dpr.y_end THEN
2004 deprn_end_perd := dpr.p_cl_end;
2005 ELSE
2006 deprn_end_perd := perds_per_yr_dcal;
2007 END IF;
2008 ELSIF fyctr = dpr.y_end THEN
2009 deprn_start_perd := 1;
2010 deprn_end_perd := dpr.p_cl_end;
2011 ELSE
2012 deprn_start_perd := 1;
2013 deprn_end_perd := perds_per_yr_dcal;
2014 END IF;
2015
2016 -- bonus: put fa_cache_pkg.fazcbf here, and erase all calls later!
2017 --
2018 -- Get rate from FA_BONUS_RATES table
2019 --
2020 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2021 --
2022 -- Get rate from FA_BONUS_RATES table
2023 --
2024
2025 IF NOT fa_cache_pkg.fazcbr(dpr.bonus_rule
2026 , (fyctr - prorate_year_pcal_begin + 1)
2027 , dpr_out.bonus_rate_used
2028 , dpr_out.deprn_factor_used
2029 , dpr_out.alternate_deprn_factor_used
2030 , p_log_level_rec) THEN
2031 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
2032 RETURN (FALSE);
2033 END IF;
2034
2035 ELSE
2036 dpr_out.bonus_rate_used := 0;
2037 dpr_out.deprn_factor_used := 0;
2038 dpr_out.alternate_deprn_factor_used := 0;
2039 END IF; -- nvl(dpr.bonus_rule, 'NONE') <> 'NONE'
2040
2041 -- Moved period loop for period update method
2042 --
2043 -- PERIOD LOOP
2044 --
2045 /* Bug#13969966 */
2046 if deprn_end_perd is null then
2047 deprn_end_perd := deprn_start_perd;
2048 end if;
2049
2050 FOR perd_ctr IN deprn_start_perd .. deprn_end_perd LOOP
2051
2052 --
2053 -- Replace depreciation rate, adj_rec_cost if super group is assigned
2054 -- to this asset.
2055 --
2056 IF (dpr.super_group_id IS NOT NULL) THEN
2057
2058 l_period_counter := fyctr * fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR + perd_ctr;
2059
2060 IF NOT fa_cache_pkg.fazcsgr(x_super_group_id => dpr.super_group_id
2061 , x_book_type_code => dpr.book
2062 , x_period_counter => l_period_counter, p_log_level_rec => p_log_level_rec) THEN
2063 RETURN (FALSE);
2064 END IF;
2065
2066 dpr.adj_rate := NVL(fa_cache_pkg.fazcsgr_record.adjusted_rate, dpr.adj_rate);
2067 adj_rec_cost := NVL(dpr.cost * fa_cache_pkg.fazcsgr_record.percent_salvage_value, adj_rec_cost);
2068 fa_round_pkg.fa_floor(adj_rec_cost, dpr.book,p_log_level_rec);
2069
2070 IF (p_log_level_rec.statement_level) THEN
2071 fa_debug_pkg.ADD('faxcde', 'Super Group new adj cost', adj_rec_cost, p_log_level_rec);
2072 fa_debug_pkg.ADD('faxcde', 'Super Group new adj rate', dpr.adj_rate, p_log_level_rec);
2073 END IF;
2074
2075 END IF;
2076
2077 --
2078 -- Calculate annual depreciation rate
2079 --
2080 IF dpr_cur_fy_flag AND (calc_rate_src_flag) THEN
2081 -- Calculate the rate for Straight-Line Depreciation --
2082
2083 IF (dpr.life < 1) THEN
2084 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde'
2085 , name => 'FA_DEPRN_ILLEGAL_VALUE'
2086 , token1 => 'VARIABLE'
2087 , value1 => 'Life'
2088 , token2 => 'VALUE'
2089 , value2 => dpr.life
2090 , TRANSLATE => FALSE
2091 , p_log_level_rec => p_log_level_rec);
2092 RETURN (FALSE);
2093 END IF;
2094
2095 ann_deprn_rate := 12 / dpr.life;
2096
2097 ELSIF dpr_cur_fy_flag AND prod_rate_src_flag THEN
2098 --
2099 -- Temporarily use 100% as rate; get actual rate
2100 -- for period later
2101 --
2102 ann_deprn_rate := 1;
2103 -- bonus: not including bonus rate for production.
2104 dpr_out.bonus_rate_used := 0;
2105
2106 ELSIF (dpr_cur_fy_flag AND
2107 table_rate_src_flag AND
2108 NOT after_eol_fy_flag) THEN
2109 -- Get rate from FA_RATES table --
2110
2111 IF NOT faxgtr(method_id
2112 , fyctr - prorate_year_pcal_begin + 1
2113 , prorate_period_pcal_begin
2114 , ann_deprn_rate
2115 , p_log_level_rec) THEN
2116 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
2117 RETURN (FALSE);
2118 END IF;
2119
2120 ELSIF (dpr_cur_fy_flag AND formula_rate_src_flag) THEN
2121 -- Get rate from FA_FORMULAS table --
2122 -- bonus: including bonus_rate for formula
2123 -- therefore not clearing bonus_rate, compare with production method.
2124
2125 -- Bug:5930979:Japan Tax Reform Project (End)
2126 IF NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES' THEN
2127 IF (p_log_level_rec.statement_level) THEN
2128 fa_debug_pkg.ADD('faxcde', '+++ JAPAN ', 'in guarantee rate', p_log_level_rec => p_log_level_rec);
2129 END IF;
2130
2131 IF dpr_in.jdate_retired <> 0 AND -- retirement
2132 dpr_in.ret_prorate_jdate <> 0 THEN
2133 l_calling_interface := NULL;
2134 ELSIF dpr_in.transaction_type_code = 'REINSTATEMENT' THEN -- Bug:6349882
2135 l_calling_interface := NULL;
2136 ELSE
2137 l_calling_interface := 'FAXCDE';
2138 END IF;
2139 END IF;
2140 -- Bug:5930979:Japan Tax Reform Project (End)
2141
2142 IF (p_log_level_rec.statement_level) THEN
2143 fa_debug_pkg.ADD('faxcde', 'dpr.cost', dpr.cost, p_log_level_rec);
2144 fa_debug_pkg.ADD('faxcde', 'dpr.cost - NVL(cur_eofy_reserve,0)', dpr.cost - NVL(cur_eofy_reserve,0), p_log_level_rec);
2145 fa_debug_pkg.ADD('faxcde', 'fa_cache_pkg.fazcfor_record.guarantee_rate', fa_cache_pkg.fazcfor_record.guarantee_rate, p_log_level_rec);
2146 fa_debug_pkg.ADD('faxcde', 'cur_deprn_rsv', cur_deprn_rsv, p_log_level_rec);
2147 fa_debug_pkg.ADD('faxcde', 'fa_cache_pkg.fazcfor_record.original_Rate', fa_cache_pkg.fazcfor_record.original_Rate, p_log_level_rec);
2148 END IF;
2149
2150 -- Bug:7193797 : Wrong Adjusted Cost is passed, when Switch happens in What-if Program.
2151 -- The following code change will also work for Bug 7129262
2152 IF (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES') THEN --- Checking for Methods JP-250DB XX
2153 l_adjusted_cost := cur_adj_cost ;
2154 ELSE
2155 l_adjusted_cost := dpr.cost - NVL(cur_eofy_reserve,0);
2156 END IF;
2157 --- Bug:7129262 : END
2158
2159 faxgfr( X_Book_Type_Code => dpr.book,
2160 X_Asset_Id => dpr.asset_id,
2161 X_Short_Fiscal_Year_Flag => dpr.short_fiscal_year_flag,
2162 X_Conversion_Date => dpr.conversion_date,
2163 X_Prorate_Date => dpr.prorate_date,
2164 X_Orig_Deprn_Start_Date => dpr.orig_deprn_start_date,
2165 C_Prorate_Date => NULL,
2166 C_Conversion_Date => NULL,
2167 C_Orig_Deprn_Start_Date => NULL,
2168 X_Method_Code => dpr.method_code,
2169 X_Life_In_Months => dpr.life,
2170 X_Fiscal_Year => fyctr,
2171 X_Current_Period => perd_ctr,
2172 -- Bug:5930979:Japan Tax Reform Project
2173 X_calling_interface => l_calling_interface,
2174 X_new_cost => dpr.cost,
2175 X_adjusted_cost => l_adjusted_cost , --- Bug:7129262 --dpr.cost - NVL(cur_eofy_reserve,0),
2176 X_Rate => ann_deprn_rate,
2177 X_Method_Type => method_type,
2178 X_Success => success,
2179 p_log_level_rec => p_log_level_rec);
2180
2181 IF (method_type = 1) THEN
2182 rate_source_rule := 'PRODUCTION';
2183 prod_rate_src_flag := (rate_source_rule = 'PRODUCTION');
2184 formula_rate_src_flag := (rate_source_rule = 'FORMULA');
2185 END IF;
2186
2187 IF (success <= 0) THEN
2188 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
2189 RETURN (FALSE);
2190 END IF;
2191
2192 ELSIF (dpr_cur_fy_flag AND flat_rate_src_flag) THEN
2193
2194 -- Bug 3187975. If Polish method, use special rate logic
2195 IF (l_polish_rule IN (FA_STD_TYPES.FAD_DBR_POLISH_1,
2196 FA_STD_TYPES.FAD_DBR_POLISH_2,
2197 FA_STD_TYPES.FAD_DBR_POLISH_3,
2198 FA_STD_TYPES.FAD_DBR_POLISH_4,
2199 FA_STD_TYPES.FAD_DBR_POLISH_5)) THEN
2200
2201 l_rate := dpr.adj_rate;
2202
2203 fa_cde_pkg.faxgpolr (
2204 X_Book_Type_Code => dpr.book,
2205 X_Asset_Id => dpr.asset_id,
2206 X_Polish_Rule => l_polish_rule,
2207 X_Deprn_Factor => dpr_out.deprn_factor_used,
2208 X_Alternate_Deprn_Factor => dpr_out.alternate_deprn_factor_used,
2209 X_Polish_Adj_Calc_Basis_Flag => polish_adj_calc_basis_flag,
2210 X_Recoverable_Cost => dpr_in.rec_cost,
2211 X_Fiscal_Year => fyctr,
2212 X_Current_Period => perd_ctr,
2213 X_Periods_Per_Year => perds_per_yr_dcal,
2214 X_Year_Retired => ret_fy_flag,
2215 X_Projecting_Flag => deprn_projecting_flag,
2216 X_MRC_SOB_Type_Code => dpr.mrc_sob_type_code,
2217 X_set_of_books_id => dpr.set_of_books_id,
2218 X_Rate => l_rate,
2219 X_Depreciate_Flag => dpr_cur_fy_flag,
2220 X_Current_Adjusted_Cost => cur_adj_cost,
2221 X_Adjusted_Recoverable_Cost => adj_rec_cost,
2222 X_Success => success,
2223 X_Calling_Fn => 'fa_cde_pkg.faxcde',
2224 p_log_level_rec => p_log_level_rec);
2225 ann_deprn_rate := l_rate;
2226 ELSE
2227 -- bonus: changed this so we keep deprn_exp and
2228 -- bonus_deprn_amount separated until later.
2229 -- ann_deprn_rate := dpr.adj_rate + dpr_out.bonus_rate_used;
2230
2231 ann_deprn_rate := dpr.adj_rate;
2232 END IF;
2233 ELSIF dpr_cur_fy_flag THEN -- bonus: elsif for unknown rate_source_rule
2234 --
2235 -- Rate-based amount is total recoverable cost, all
2236 -- taken in current period (=> *perds_per_yr_dcal)
2237 -- No deprn limit for table_rate_src_flag
2238 --
2239 ann_deprn_rate := 1;
2240 temp_prate_amt := dpr.rec_cost * perds_per_yr_dcal;
2241
2242 -- Bonus Deprn - YYOON 7/7/2000
2243 -- In this case which is assumed to be
2244 -- a recoverable cost based method,
2245 -- the bonus deprn amount is only calculated
2246 -- as temp_prate_amt multiplied by bonus_rate */
2247
2248 IF NVL(dpr_out.bonus_rate_used,0) <> 0 THEN
2249 temp_bonus_prate_amt := temp_prate_amt * dpr_out.bonus_rate_used;
2250 ELSE
2251 temp_bonus_prate_amt := 0;
2252 END IF;
2253 -- End of Bonus Deprn Change */
2254
2255 ELSE
2256 --
2257 -- dpr_cur_fy_flag is FALSE
2258 --
2259 ann_deprn_rate := 0;
2260 dpr_out.bonus_rate_used := 0;
2261 temp_prate_amt := 0;
2262 temp_bonus_prate_amt := 0;
2263 END IF;
2264
2265 -- Note: temp_prate_amt and temp_bonus_prate_amt have no value
2266 -- if rate_source_rule is provided.
2267 -- bonus: using same fraction for bonus rate as for regular deprn rate.
2268 -- dpr_out.bonus_rate_used := dpr_out.bonus_rate_used * ann_deprn_rate;
2269
2270 --
2271 -- Debug
2272 --
2273
2274 -- Added the Below code to take care of the Bug# 7277598
2275 -- Below code calculates the Prorata Depreciable amount , if the asset is added with JP-250DB XX and NBV_AT_SWITCH in the middle of FY
2276 IF l_request_short_name = 'FAWDPR' then
2277 -- Removed and l_nbv_at_switch is not null clause as from the Below IF condition , as this should work for all scenarios.
2278 IF (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES') THEN --- Checking for Methods JP-250DB XX
2279 IF ann_deprn_rate = fa_cache_pkg.fazcfor_record.revised_Rate then
2280 l_count := l_count + 1;
2281 END IF;
2282 END IF;
2283 END IF;
2284 -- End of Addition BUG# 7277598
2285
2286 IF (p_log_level_rec.statement_level) THEN
2287 fa_debug_pkg.ADD('faxcde','fadpdp(2): ann_deprn_rate',ann_deprn_rate);
2288 END IF;
2289
2290 IF ann_deprn_rate >= 0 THEN
2291 --
2292 -- Check that RAF is between 0 and 1
2293 --
2294 IF dpr.rate_adj_factor NOT BETWEEN 0 AND 1 THEN
2295 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
2296 name => 'FA_DEPRN_ILLEGAL_VALUE',
2297 token1 => 'VARIABLE',
2298 value1 => 'Rate_Adjustment_Factor',
2299 token2 => 'VALUE',
2300 value2 => dpr.rate_adj_factor,
2301 TRANSLATE => FALSE,
2302 p_log_level_rec => p_log_level_rec);
2303 RETURN (FALSE);
2304 END IF;
2305
2306 IF dpr.rate_adj_factor = 0 THEN
2307 --
2308 -- If RAF = 0, then use a very small RAF
2309 -- so we don't divide by zero
2310 --
2311 rate_adj_factor := fa_std_types.FA_DPR_SMALL_RAF;
2312 ELSE
2313 rate_adj_factor := dpr.rate_adj_factor;
2314 END IF;
2315 --code fix for bug no.3909805. dpr.formula_factor can have null value.
2316 temp_prate_amt := (cur_adj_cost / rate_adj_factor) * ann_deprn_rate * NVL(dpr.formula_factor,1);
2317
2318 -- Added the Below code to take care of the Bug# 7277598
2319 -- Below code calculates the Prorata Depreciable amount , if the asset is added with JP-250DB XX and NBV_AT_SWITCH in the Middle of the FY
2320
2321 IF l_request_short_name = 'FAWDPR' then
2322 -- Removed and "l_nbv_at_switch is not null" clause and "first_fy_flag = TRUE AND" clause from the Below IF condition , as this should work for all scenarios.
2323 IF (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES') THEN --- Checking for Methods JP-250DB XX
2324 IF NOT(dpr_run_flag) AND deprn_start_perd <> 1 AND deprn_start_perd <> perds_per_yr_dcal THEN
2325 -- BUG# 7304706 : NOT(dpr_run_flag) clause is added
2326
2327 /*Bug 7539379 starts */
2328 dpis_perd_num := 0;
2329 dpis_fy := 0;
2330 book_fy := 0;
2331 temp_round_amt := 0 ;
2332 temp_round_amt1 := 0;
2333
2334
2335 /* Below query will fetch the Fiscal year and Period number of DPIS */
2336 SELECT fy.fiscal_year,cl.period_num
2337 INTO dpis_fy,dpis_perd_num
2338 FROM FA_BOOKS bk,
2339 FA_CALENDAR_PERIODS CL,
2340 FA_BOOK_CONTROLS BC,
2341 FA_FISCAL_YEAR fy
2342 WHERE bk.asset_id = dpr.asset_id
2343 AND bk.book_type_code = dpr.book
2344 AND bk.date_ineffective is null
2345 AND BC.book_type_code = dpr.book
2346 AND BC.date_ineffective is null
2347 AND BC.deprn_calendar = CL.Calendar_type
2348 AND bk.date_placed_in_service BETWEEN CL.start_date AND CL.END_DATE
2349 AND fy.fiscal_year_name = bc.fiscal_year_name
2350 AND bk.date_placed_in_service BETWEEN fy.start_date AND fy.END_DATE;
2351
2352 /*Below query will fetch the current fiscal year of book*/
2353 SELECT fiscal_year
2354 INTO book_fy
2355 FROM fa_deprn_periods pd
2356 WHERE pd.book_type_code = dpr.book
2357 AND period_close_date is null;
2358
2359 IF (dpis_fy <> book_fy) then
2360 dpis_perd_num := 1;
2361 END IF;
2362
2363 temp_prate_amt := (cur_adj_cost / rate_adj_factor) * ann_deprn_rate * NVL(dpr.formula_factor,1)
2364 * (perds_per_yr_dcal - deprn_start_perd + 1)/perds_per_yr_dcal;
2365 temp_round_amt := trunc((cur_adj_cost / rate_adj_factor) * ann_deprn_rate * NVL(dpr.formula_factor,1)
2366 * (perds_per_yr_dcal - (dpis_perd_num - 1))/perds_per_yr_dcal);
2367 temp_round_amt1 := round((trunc((cur_adj_cost / rate_adj_factor) * ann_deprn_rate *
2368 NVL(dpr.formula_factor,1)))/perds_per_yr_dcal)*(perds_per_yr_dcal - dpis_perd_num);
2369
2370
2371 /*Bug 7539379 ENDS */
2372
2373 perds_fracs_arr(perd_ctr-1).frac := (perds_per_yr_dcal/(perds_per_yr_dcal - deprn_start_perd + 1))*(1/perds_per_yr_dcal);
2374 END IF; -- NOT(dpr_run_flag)
2375 END IF; -- (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES')
2376 END IF; -- l_request_short_name = 'FAWDPR'
2377
2378 -- End of Addition BUG# 7277598
2379 -- Bug 9863472 currency formatting for temp annual deprn amount (it should be round down/truncated)
2380 -- bug 10268916 No need of currency formatting here...it is taken care later
2381 -- h_dummy_bool := fa_utils_pkg.faxtru (temp_prate_amt, dpr.book, dpr.set_of_books_id, p_log_level_rec);
2382
2383 IF (p_log_level_rec.statement_level) THEN
2384 fa_debug_pkg.ADD('faxcde','fadpdp(3A): temp_prate_amt',temp_prate_amt, p_log_level_rec);
2385 fa_debug_pkg.ADD('faxcde','fadpdp(3A): cur_adj_cost',cur_adj_cost, p_log_level_rec);
2386 fa_debug_pkg.ADD('faxcde','fadpdp(3A): rate_adj_factor',rate_adj_factor, p_log_level_rec);
2387 fa_debug_pkg.ADD('faxcde','fadpdp(3A): ann_deprn_rate',ann_deprn_rate, p_log_level_rec);
2388 fa_debug_pkg.ADD('faxcde','fadpdp(3A): dpr.formula_factor',dpr.formula_factor, p_log_level_rec);
2389 fa_debug_pkg.ADD('faxcde','fadpdp(3A): temp_round_amt',temp_round_amt, p_log_level_rec);
2390 fa_debug_pkg.ADD('faxcde','fadpdp(3A): temp_round_amt1',temp_round_amt1, p_log_level_rec);
2391 END IF;
2392
2393 --
2394 -- Bonus Deprn - YYOON
2395 -- Calcuate annual bonus deprn expense for current year
2396 -- NOTE:
2397 -- 1. The bonus deprn calculation should NOT be adjusted
2398 -- by the rate adjustment factor.(Please refer to HLD page 24)
2399 -- 2. The depreciable basis for the bonus deprn calculation should be
2400 -- the recoverable cost or NBV depending on the asset's method.
2401 -- (Please refer to HLD Example 1 and 3)
2402 -- 3. The bonus deprn calculation for assets with a cost-based method
2403 -- should NOT be based on the adjusted_cost which gets reset to NBV
2404 -- as of the period of amortized adjustment
2405 -- but should be based on the recoverable cost.
2406 -- (Please refer to HLD Example 6)
2407 -- 4. The adjusted_cost is calculated based only on the standard
2408 -- accumulated depreciation (total less bonus) as of the period of
2409 -- amortized adjustment. (This should be taken care of in forms level)
2410 -- (Please refer to HLD Example 6)
2411 -- 5. On 7/20/2000, a new logic to reset adjusted_cost of assets
2412 -- with NBV-based methods to Cost minus Regular Reserve
2413 -- at the end of each fiscal year. (bug# 1351870)
2414 -- 6. On 09/10/2000, backed out changes done for 1351870.
2415 --
2416 IF NVL(dpr_out.bonus_rate_used,0) <> 0 THEN
2417 temp_bonus_prate_amt := cur_adj_cost * dpr_out.bonus_rate_used ;
2418 ELSE
2419 temp_bonus_prate_amt := 0;
2420 END IF;
2421 -- End of Bonus Deprn Change
2422
2423 END IF; -- ann_deprn_rate >= 0
2424
2425 --
2426 -- Debug
2427 --
2428 IF (p_log_level_rec.statement_level) THEN
2429 fa_debug_pkg.ADD('faxcde','fadpdp(3): temp_prate_amt',temp_prate_amt, p_log_level_rec);
2430 END IF;
2431
2432 -- syoung: changed 0 to '0'. If ceil_name(varchar2) is not null, and
2433 -- if that is compared with 0, then would cause a value_error.
2434 IF dpr_cur_fy_flag AND NVL(dpr.ceil_name,'0') <> '0' THEN
2435 --
2436 -- Get Ceiling Information from FA_CEILING_TYPES
2437 -- and FA_CEILINGS
2438 --
2439 IF NOT fa_cache_pkg.fazccl(dpr.ceil_name,
2440 dpr.jdate_in_service,
2441 fyctr - prorate_year_pcal_begin + 1,
2442 deprn_ceiling_amt,
2443 p_log_level_rec) THEN
2444 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
2445 RETURN (FALSE);
2446 END IF;
2447
2448 END IF;
2449
2450 IF dpr.ceil_name IS NOT NULL AND (temp_prate_amt = 0 OR
2451 deprn_ceiling_amt < temp_prate_amt + temp_bonus_prate_amt) THEN
2452 use_deprn_ceil_amt := TRUE;
2453 use_deprn_prate_amt := FALSE;
2454 ELSE
2455 use_deprn_ceil_amt := FALSE;
2456 use_deprn_prate_amt := TRUE;
2457 END IF;
2458
2459 -- Default initializations --
2460 actual_deprn_start_perd := 1;
2461 actual_deprn_end_perd := perds_per_yr_dcal;
2462
2463 --
2464 -- if asset is in the first year or last year of life then
2465 -- re-calculate annual deprn expense based on the fraction
2466 -- of year asset is held
2467 --
2468 IF (first_fy_flag) THEN
2469 actual_deprn_start_perd := deprn_period_dcal_begin;
2470 -- 'Annualize' the Rate amount and Ceiling amount
2471 deprn_method_amt := temp_prate_amt * adj_first_yr_frac;
2472
2473 --
2474 -- bug 2182029. added condition, now not multipl. with fraction for table mthd.
2475 --
2476 IF (NOT table_rate_src_flag) THEN
2477 bonus_deprn_method_amt := temp_bonus_prate_amt * adj_first_yr_frac;
2478 ELSE
2479 bonus_deprn_method_amt := temp_bonus_prate_amt;
2480 END IF;
2481 -- end 2182029
2482
2483 IF (dpr.ceil_name IS NOT NULL) THEN
2484 deprn_ceiling_amt := deprn_ceiling_amt * adj_first_yr_frac;
2485 END IF;
2486
2487 IF (dpr.ceil_name IS NOT NULL AND (
2488 deprn_method_amt = 0 OR deprn_ceiling_amt < (deprn_method_amt + bonus_deprn_method_amt))) THEN
2489 use_deprn_ceil_amt := TRUE;
2490 use_deprn_prate_amt := FALSE;
2491 ELSE
2492 use_deprn_prate_amt := TRUE;
2493 use_deprn_ceil_amt := FALSE;
2494 END IF;
2495
2496 IF (p_log_level_rec.statement_level) THEN
2497 fa_debug_pkg.ADD('faxcde','ann_fy_deprn1111',ann_fy_deprn, p_log_level_rec);
2498 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt1111',actual_annual_deprn_amt, p_log_level_rec);
2499 fa_debug_pkg.ADD('faxcde','perd_ctr1111',perd_ctr, p_log_level_rec);
2500 fa_debug_pkg.ADD('faxcde','ret_period_dcal1111',ret_period_dcal, p_log_level_rec);
2501 END IF;
2502
2503 IF use_deprn_prate_amt THEN
2504 ann_fy_deprn := deprn_method_amt;
2505 bonus_ann_fy_deprn := bonus_deprn_method_amt;
2506 ELSE -- use_deprn_ceil_amt
2507
2508 IF deprn_method_amt >= deprn_ceiling_amt THEN
2509 ann_fy_deprn := deprn_ceiling_amt;
2510 bonus_ann_fy_deprn := 0;
2511 ELSE
2512 ann_fy_deprn := deprn_method_amt;
2513
2514 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2515 bonus_ann_fy_deprn := deprn_ceiling_amt - deprn_method_amt;
2516 ELSE
2517 bonus_ann_fy_deprn := 0;
2518 END IF;
2519
2520 END IF;
2521
2522 END IF; -- use_deprn_prate_amt then
2523
2524 IF (p_log_level_rec.statement_level) THEN
2525 fa_debug_pkg.ADD('faxcde','ann_fy_deprn2222',ann_fy_deprn, p_log_level_rec);
2526 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt22221111',actual_annual_deprn_amt, p_log_level_rec);
2527 fa_debug_pkg.ADD('faxcde','perd_ctr2222',perd_ctr, p_log_level_rec);
2528 fa_debug_pkg.ADD('faxcde','ret_period_dca2222',ret_period_dcal, p_log_level_rec);
2529 END IF;
2530
2531 actual_annual_deprn_amt := ann_fy_deprn;
2532 actual_annual_bonus_deprn_amt := bonus_ann_fy_deprn;
2533
2534 -- bonus: ann_fy_deprn and deprn_method_amt still not containing
2535 -- bonus_ann_fy_deprn or bonus_deprn_method_amt.
2536 -- first_year_frac holds fraction of the year, i.e. a decimal value.
2537 -- adj_first_yr_frac is the inverse
2538
2539 IF (table_rate_src_flag) THEN
2540 actual_annual_deprn_amt := actual_annual_deprn_amt/adj_first_yr_frac;
2541
2542 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2543 actual_annual_bonus_deprn_amt := bonus_ann_fy_deprn/adj_first_yr_frac;
2544 END IF;
2545
2546 ELSE -- bug 14810421
2547 IF SUBSTR (fa_cache_pkg.fazcbc_record.DEPRN_ALLOCATION_CODE,1,1) = 'E' then
2548 actual_annual_deprn_amt := (actual_annual_deprn_amt/first_year_den) * first_year_num;
2549 ELSE
2550 actual_annual_deprn_amt :=
2551 actual_annual_deprn_amt * (first_year_frac/adj_first_yr_frac);
2552 END IF;
2553 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2554 -- bug 14810421
2555 IF SUBSTR (fa_cache_pkg.fazcbc_record.DEPRN_ALLOCATION_CODE,1,1) = 'E' then
2556 actual_annual_bonus_deprn_amt := (bonus_ann_fy_deprn/first_year_den) * first_year_num;
2557 ELSE
2558 actual_annual_bonus_deprn_amt :=
2559 bonus_ann_fy_deprn * (first_year_frac/adj_first_yr_frac);
2560 END IF;
2561 END IF;
2562 END IF; --(table_rate_src_flag)
2563 -- Bug 10246091 currency formatting for actual_annual_deprn_amt (it should be round down/truncated)
2564 h_dummy_bool := fa_utils_pkg.faxtru (actual_annual_deprn_amt, dpr.book, dpr.set_of_books_id, p_log_level_rec);
2565 ELSIF mid_fy_flag THEN
2566
2567 deprn_method_amt := temp_prate_amt;
2568 bonus_deprn_method_amt := temp_bonus_prate_amt;
2569
2570 IF (p_log_level_rec.statement_level) THEN
2571 fa_debug_pkg.ADD('faxcde','ann_fy_deprn3333',ann_fy_deprn, p_log_level_rec);
2572 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt333331',actual_annual_deprn_amt, p_log_level_rec);
2573 fa_debug_pkg.ADD('faxcde','perd_ctr3333',perd_ctr, p_log_level_rec);
2574 fa_debug_pkg.ADD('faxcde','ret_period_dca33333',ret_period_dcal, p_log_level_rec);
2575 END IF;
2576
2577 IF use_deprn_prate_amt THEN
2578 ann_fy_deprn := deprn_method_amt;
2579 bonus_ann_fy_deprn := bonus_deprn_method_amt;
2580 IF (p_log_level_rec.statement_level) THEN
2581 fa_debug_pkg.ADD('faxcde','ann_fy_deprn3333AAAAA',ann_fy_deprn, p_log_level_rec);
2582 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt333331',actual_annual_deprn_amt, p_log_level_rec);
2583 fa_debug_pkg.ADD('faxcde','deprn_method_amt',deprn_method_amt, p_log_level_rec);
2584 fa_debug_pkg.ADD('faxcde','ret_period_dca33333',ret_period_dcal, p_log_level_rec);
2585 END IF;
2586 ELSE -- use_deprn_ceil_amt
2587
2588 IF deprn_method_amt >= deprn_ceiling_amt THEN
2589 ann_fy_deprn := deprn_ceiling_amt;
2590 bonus_ann_fy_deprn := 0;
2591 IF (p_log_level_rec.statement_level) THEN
2592 fa_debug_pkg.ADD('faxcde','ann_fy_deprn3333BBBBBBB',ann_fy_deprn, p_log_level_rec);
2593 fa_debug_pkg.ADD('faxcde','deprn_method_amt',deprn_method_amt, p_log_level_rec);
2594 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt',deprn_ceiling_amt, p_log_level_rec);
2595 fa_debug_pkg.ADD('faxcde','ret_period_dca33333',ret_period_dcal, p_log_level_rec);
2596 END IF;
2597 ELSE
2598 ann_fy_deprn := deprn_method_amt;
2599 -- bonus: prorate to bonus..
2600
2601 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2602 bonus_ann_fy_deprn := deprn_ceiling_amt - deprn_method_amt;
2603 ELSE
2604 bonus_ann_fy_deprn := 0;
2605 END IF;
2606
2607 IF (p_log_level_rec.statement_level) THEN
2608 fa_debug_pkg.ADD('faxcde','ann_fy_deprn3333CCCCCCCCC',ann_fy_deprn, p_log_level_rec);
2609 fa_debug_pkg.ADD('faxcde','deprn_method_amt',deprn_method_amt, p_log_level_rec);
2610 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt',deprn_ceiling_amt, p_log_level_rec);
2611 fa_debug_pkg.ADD('faxcde','ret_period_dca33333',ret_period_dcal, p_log_level_rec);
2612 END IF;
2613
2614 END IF; -- deprn_method_amt >= deprn_ceiling_amt
2615
2616 END IF; --use_deprn_prate_amt
2617
2618 actual_annual_deprn_amt := ann_fy_deprn;
2619 actual_annual_bonus_deprn_amt := bonus_ann_fy_deprn;
2620
2621 IF (p_log_level_rec.statement_level) THEN
2622 fa_debug_pkg.ADD('faxcde','ann_fy_deprn4444',ann_fy_deprn, p_log_level_rec);
2623 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt44441',actual_annual_deprn_amt, p_log_level_rec);
2624 fa_debug_pkg.ADD('faxcde','perd_ctr4444',perd_ctr, p_log_level_rec);
2625 fa_debug_pkg.ADD('faxcde','ret_period_dca4444',ret_period_dcal, p_log_level_rec);
2626 END IF;
2627
2628 ELSIF last_fy_flag THEN
2629 deprn_method_amt := temp_prate_amt;
2630 bonus_deprn_method_amt := temp_bonus_prate_amt;
2631
2632 IF (p_log_level_rec.statement_level) THEN
2633 fa_debug_pkg.ADD('faxcde','fadpdp(3.5): deprn_method_amt',deprn_method_amt, p_log_level_rec);
2634 END IF;
2635 -- Bug 8408871: Start
2636 IF dpr.ceil_name IS NOT NULL AND (ann_fy_deprn = 0 OR
2637 deprn_ceiling_amt < ann_fy_deprn) THEN
2638 use_deprn_ceil_amt := TRUE;
2639 use_deprn_prate_amt := FALSE;
2640 ELSE
2641 use_deprn_ceil_amt := FALSE;
2642 use_deprn_prate_amt := TRUE;
2643 END IF;
2644 -- Bug 8408871: End
2645 IF (use_deprn_ceil_amt) THEN
2646 actual_deprn_end_perd := deprn_perd_fully_rsv;
2647
2648 IF (p_log_level_rec.statement_level) THEN
2649 fa_debug_pkg.ADD('faxcde','ann_fy_deprn5555',ann_fy_deprn, p_log_level_rec);
2650 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt555555',deprn_ceiling_amt, p_log_level_rec);
2651 fa_debug_pkg.ADD('faxcde','deprn_method_amt555555',deprn_method_amt, p_log_level_rec);
2652 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt5555',actual_annual_deprn_amt, p_log_level_rec);
2653 fa_debug_pkg.ADD('faxcde','perd_ctr5555',perd_ctr, p_log_level_rec);
2654 fa_debug_pkg.ADD('faxcde','actual_deprn_end_perd5555',actual_deprn_end_perd, p_log_level_rec);
2655 END IF;
2656
2657 IF deprn_method_amt >= deprn_ceiling_amt THEN
2658 ann_fy_deprn := deprn_ceiling_amt;
2659 bonus_ann_fy_deprn := 0;
2660 ELSE
2661 ann_fy_deprn := deprn_method_amt;
2662
2663 -- bonus: prorate to bonus..
2664 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2665 bonus_ann_fy_deprn := deprn_ceiling_amt - deprn_method_amt;
2666 ELSE
2667 bonus_ann_fy_deprn := 0;
2668 END IF;
2669 END IF; -- deprn_method_amt >= deprn_ceiling_amt
2670
2671 ELSE
2672
2673 IF (p_log_level_rec.statement_level) THEN
2674 fa_debug_pkg.ADD('faxcde','fadpdp(3.6): last_year_frac',last_year_frac);
2675 END IF;
2676
2677 IF (table_rate_src_flag) THEN
2678 IF ( last_year_frac <= 0) THEN
2679 deprn_method_amt := 0;
2680 bonus_deprn_method_amt := 0;
2681 ELSE
2682 -- Bug#4745217: To avoid doubled catchup when retiring assets with Half Yr convention in last FY
2683 -- Bug#9479627: Reverted fix for Bug#4745217
2684 -- Bug 8408871: Start
2685 deprn_method_amt2 :=temp_prate_amt / last_year_frac;
2686
2687 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2688 bonus_deprn_method_amt2 := temp_bonus_prate_amt / last_year_frac;
2689 END IF;
2690
2691
2692 if dpr.ceil_name IS NOT NULL then
2693 deprn_method_amt := least ( deprn_method_amt2, deprn_method_amt,
2694 ann_fy_deprn);
2695 bonus_deprn_method_amt := least ( bonus_deprn_method_amt2,
2696 bonus_deprn_method_amt, bonus_ann_fy_deprn);
2697 else
2698 deprn_method_amt := deprn_method_amt2;
2699 bonus_deprn_method_amt := bonus_deprn_method_amt2;
2700 end if;
2701 -- Bug 8408871: End
2702 END IF;
2703 END IF; -- (table_rate_src_flag)
2704
2705 -- For assets without depreciation limit,
2706 -- we stop depreciating in the last period of
2707 -- life, if asset has depreciation limit then
2708 -- it may continue to depreciate even past the
2709 -- last year of life. This only applies to assets
2710 -- without depreciation ceiling.
2711
2712 IF NOT use_deprn_limit_flag THEN
2713 actual_deprn_end_perd := deprn_perd_fully_rsv;
2714 IF (p_log_level_rec.statement_level) THEN
2715 fa_debug_pkg.ADD('faxcde','perd_ctr66666',perd_ctr, p_log_level_rec => p_log_level_rec);
2716 fa_debug_pkg.ADD('faxcde','actual_deprn_end_perd11111111',actual_deprn_end_perd, p_log_level_rec => p_log_level_rec);
2717 END IF;
2718 END IF;
2719
2720 IF (p_log_level_rec.statement_level) THEN
2721 fa_debug_pkg.ADD('faxcde','ann_fy_deprn66666',ann_fy_deprn, p_log_level_rec);
2722 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt66666',deprn_ceiling_amt, p_log_level_rec);
2723 fa_debug_pkg.ADD('faxcde','deprn_method_amt66666',deprn_method_amt, p_log_level_rec);
2724 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt66666',actual_annual_deprn_amt, p_log_level_rec);
2725 fa_debug_pkg.ADD('faxcde','perd_ctr66666',perd_ctr, p_log_level_rec);
2726 fa_debug_pkg.ADD('faxcde','actual_deprn_end_perd666666666666',actual_deprn_end_perd, p_log_level_rec);
2727 END IF;
2728
2729 ann_fy_deprn := deprn_method_amt;
2730 bonus_ann_fy_deprn := bonus_deprn_method_amt;
2731
2732 END IF; -- (use_deprn_ceil_amt) then
2733
2734 actual_annual_deprn_amt := ann_fy_deprn;
2735 actual_annual_bonus_deprn_amt := bonus_ann_fy_deprn;
2736
2737 IF (p_log_level_rec.statement_level) THEN
2738 fa_debug_pkg.ADD('faxcde','ann_fy_deprn77777',ann_fy_deprn, p_log_level_rec);
2739 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt77777',deprn_ceiling_amt, p_log_level_rec);
2740 fa_debug_pkg.ADD('faxcde','deprn_method_amt7777',deprn_method_amt, p_log_level_rec);
2741 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt677777',actual_annual_deprn_amt, p_log_level_rec);
2742 fa_debug_pkg.ADD('faxcde','perd_ctr7777',perd_ctr, p_log_level_rec);
2743 fa_debug_pkg.ADD('faxcde','ret_period_dca67777',ret_period_dcal, p_log_level_rec);
2744 END IF;
2745 ELSIF (after_eol_fy_flag) THEN
2746
2747 -- if asset does not has deprn limit then fully
2748 -- reserve the asset in the current period
2749 -- otherwise set annual deprn amount to
2750 -- temp_prate_amt as if asset is in the middle year
2751 -- of life
2752 -- bonus here?
2753 IF NOT use_deprn_limit_flag THEN
2754
2755 IF NOT use_deprn_ceil_amt THEN
2756 -- Fully reserve the asset in the
2757 -- current period
2758 use_deprn_ceil_amt := TRUE;
2759 use_deprn_prate_amt := FALSE;
2760 deprn_ceiling_amt := dpr.rec_cost * perds_per_yr_dcal;
2761 END IF;
2762
2763 ann_fy_deprn := deprn_ceiling_amt;
2764 bonus_ann_fy_deprn := 0;
2765 IF dpr_in.method_code = 'JP-STL-EXTND' THEN
2766 ann_fy_deprn := temp_prate_amt;
2767 END IF;
2768
2769 IF (p_log_level_rec.statement_level) THEN
2770 fa_debug_pkg.ADD('faxcde','ann_fy_deprn8888888',ann_fy_deprn, p_log_level_rec);
2771 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt88888',deprn_ceiling_amt, p_log_level_rec);
2772 fa_debug_pkg.ADD('faxcde','deprn_method_amt88888',deprn_method_amt, p_log_level_rec);
2773 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt88888',actual_annual_deprn_amt, p_log_level_rec);
2774 fa_debug_pkg.ADD('faxcde','perd_ctr8888',perd_ctr, p_log_level_rec);
2775 fa_debug_pkg.ADD('faxcde','ret_period_dca888',ret_period_dcal, p_log_level_rec);
2776 END IF;
2777 ELSE
2778 -- we assume that asset can only has deprn
2779 -- limit or deprn ceiling
2780 ann_fy_deprn := temp_prate_amt;
2781 bonus_ann_fy_deprn := temp_bonus_prate_amt;
2782 END IF; -- not use_deprn_limit_flag then
2783
2784 actual_annual_deprn_amt := ann_fy_deprn;
2785 actual_annual_bonus_deprn_amt := bonus_ann_fy_deprn;
2786
2787 IF (p_log_level_rec.statement_level) THEN
2788 fa_debug_pkg.ADD('faxcde','ann_fy_deprn99999',ann_fy_deprn, p_log_level_rec);
2789 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amt99999',deprn_ceiling_amt, p_log_level_rec);
2790 fa_debug_pkg.ADD('faxcde','deprn_method_amt9999',deprn_method_amt, p_log_level_rec);
2791 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt9999',actual_annual_deprn_amt, p_log_level_rec);
2792 fa_debug_pkg.ADD('faxcde','perd_ctr9999',perd_ctr, p_log_level_rec);
2793 fa_debug_pkg.ADD('faxcde','ret_period_dca9999',ret_period_dcal, p_log_level_rec);
2794 END IF;
2795 ELSE
2796 actual_deprn_end_perd := 0;
2797 ann_fy_deprn := 0;
2798 actual_annual_deprn_amt := 0;
2799 bonus_ann_fy_deprn := 0;
2800 actual_annual_bonus_deprn_amt := 0;
2801 END IF; -- (first_fy_flag) then
2802
2803 IF dpr_in.method_code = 'JP-STL-EXTND' THEN
2804 ann_fy_deprn := temp_prate_amt;
2805 actual_deprn_end_perd := perds_per_yr_dcal;
2806 END IF;
2807
2808
2809 --
2810 -- Bug 3270280
2811 -- if ret_fy_flag then
2812 -- Bug3961991
2813 -- Added condition dpr_in.deprn_override_flag <> fa_std_types.FA_OVERRIDE_RECURSIVE
2814 -- so that following condition will not be true during recursive call.
2815 IF ((ret_fy_flag) AND (NOT depr_last_year_flag) OR (ret_fy_flag AND first_fy_flag)) AND
2816 dpr_in.deprn_override_flag <> fa_std_types.FA_OVERRIDE_RECURSIVE THEN
2817
2818 deprn_start_perd := ret_period_dcal;
2819 deprn_end_perd := ret_period_dcal;
2820
2821 actual_deprn_start_perd := ret_period_dcal;
2822 actual_deprn_end_perd := ret_period_dcal;
2823
2824 --bug fix 3695153 starts
2825 IF(ret_period_dcal < ret_prorate_period_pcal) AND (first_fy_flag)THEN
2826 actual_deprn_start_perd := perd_ctr;
2827 actual_deprn_end_perd := perd_ctr;
2828 END IF;
2829 --bug fix 3695153 ends
2830 END IF;
2831
2832 -- bonus: sum bonus amount into ann_fy_deprn now.
2833 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2834 ann_fy_deprn := ann_fy_deprn + bonus_ann_fy_deprn;
2835 -- latest bonus addition:
2836 actual_annual_deprn_amt := actual_annual_deprn_amt + actual_annual_bonus_deprn_amt;
2837 END IF;
2838
2839 IF (p_log_level_rec.statement_level) THEN
2840 fa_debug_pkg.ADD('faxcde','ann_fy_deprnxxxxxxxxxx',ann_fy_deprn, p_log_level_rec);
2841 fa_debug_pkg.ADD('faxcde','deprn_ceiling_amxxxxxxx',deprn_ceiling_amt, p_log_level_rec);
2842 fa_debug_pkg.ADD('faxcde','deprn_method_amtxxxxxxxx',deprn_method_amt, p_log_level_rec);
2843 fa_debug_pkg.ADD('faxcde','perd_ctrxxxxxxxxx',perd_ctr, p_log_level_rec);
2844 fa_debug_pkg.ADD('faxcde','actual_deprn_start_perd',actual_deprn_start_perd, p_log_level_rec);
2845 fa_debug_pkg.ADD('faxcde','actual_deprn_end_perd',actual_deprn_end_perd, p_log_level_rec);
2846 END IF;
2847 -- Bug 10376810 reverting the changes done in Bug 6988823 (changing faxtru from faxrnd)
2848 -- currency formatting.Modified for bug6988823.
2849 h_dummy_bool := fa_utils_pkg.faxtru (ann_fy_deprn, dpr.book, dpr.set_of_books_id, p_log_level_rec);
2850 h_dummy_bool := fa_utils_pkg.faxtru (actual_annual_deprn_amt, dpr.book,dpr.set_of_books_id, p_log_level_rec);
2851
2852 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
2853 h_dummy_bool := fa_utils_pkg.faxtru (bonus_ann_fy_deprn, dpr.book, dpr.set_of_books_id, p_log_level_rec);
2854 h_dummy_bool := fa_utils_pkg.faxtru (actual_annual_bonus_deprn_amt, dpr.book, dpr.set_of_books_id, p_log_level_rec);
2855 END IF;
2856
2857 --
2858 -- Debug
2859 --
2860 IF (p_log_level_rec.statement_level) THEN
2861 fa_debug_pkg.ADD('faxcde','fadpdp(4): ann_fy_deprn',ann_fy_deprn, p_log_level_rec);
2862 fa_debug_pkg.ADD('faxcde','actual_annual_deprn_amt',actual_annual_deprn_amt, p_log_level_rec);
2863 fa_debug_pkg.ADD('faxcde','perd_ctr',perd_ctr, p_log_level_rec);
2864 fa_debug_pkg.ADD('faxcde','ret_period_dcal',ret_period_dcal, p_log_level_rec);
2865 END IF;
2866
2867 IF dpr_in.method_code = 'JP-STL-EXTND' THEN
2868 actual_deprn_end_perd := perds_per_yr_dcal;
2869 END IF;
2870 --
2871 -- deprn_start_perd is the first period in this fiscal year
2872 -- for which we want to return a value.
2873 -- deprn_end_perd is the last period in this fiscal year
2874 -- for which we want to return a value.
2875 --
2876 -- bonus: sum bonus amount into ann_fy_deprn now.
2877 -- if nvl(dpr.bonus_rule, 'NONE') <> 'NONE' then
2878 -- ann_fy_deprn := ann_fy_deprn + bonus_ann_fy_deprn;
2879 -- latest bonus addition:
2880 -- actual_annual_deprn_amt := actual_annual_deprn_amt + actual_annual_bonus_deprn_amt;
2881 -- end if;
2882
2883 -- *************************************************************
2884 -- Commented out and moved period loop for period update method
2885 -- This is the point where for loop for each period located
2886 -- for perd_ctr in deprn_start_perd .. deprn_end_perd loop
2887 -- ************************************************************
2888 deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
2889
2890 --
2891 -- actual_deprn_start_perd is the first period in this fy
2892 -- for which the depreciation can be non-zero.
2893 -- actual_deprn_end_perd is the last period in this fy for
2894 -- which the depreciation can be non-zero.
2895
2896 -- Bug 14374802 added ceiling condition so that asset using
2897 -- ceiling can deprecite beyond its actual life too
2898 IF (((perd_ctr >= actual_deprn_start_perd) AND
2899 (perd_ctr <= actual_deprn_end_perd)) OR
2900 ( NVL(dpr.ceil_name,'0') <> '0')) THEN
2901
2902 IF first_fy_flag AND
2903 (perd_ctr = actual_deprn_start_perd) AND
2904 (NOT ret_fy_flag) THEN
2905
2906 deprn_frac_of_yr := first_perd_frac;
2907
2908
2909 -- Added the Below code to take care of the Bug# 7277598
2910 -- Below code calculates the Prorata Depreciable amount , if the asset is added with JP-250DB XX
2911 -- and NBV_AT_SWITCH in the Middle of the FY
2912 IF l_request_short_name = 'FAWDPR' then
2913 -- Removed and "l_nbv_at_switch is not null" clause and "first_fy_flag = TRUE AND" clause
2914 -- from the Below IF condition , as this should work for all scenarios.
2915 IF (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES') THEN --- Checking for Methods JP-250DB XX
2916 IF NOT(dpr_run_flag) AND deprn_start_perd <> 1 AND deprn_start_perd <> perds_per_yr_dcal THEN -- BUG# 7304706 : NOT(dpr_run_flag) clause is added
2917 deprn_frac_of_yr := (perds_per_yr_dcal/(perds_per_yr_dcal - deprn_start_perd + 1))*(1/perds_per_yr_dcal);
2918 END IF;
2919 END IF;
2920 END IF;
2921 -- End of Addition BUG# 7277598
2922
2923 IF (p_log_level_rec.statement_level) THEN
2924 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.1): deprn_frac_of_yr',deprn_frac_of_yr, p_log_level_rec);
2925 END IF;
2926 --bug fix 3233833 starts
2927 -- code fix for bug4213110: enter the following condition only if the no of pds in deprn and prorate calendar are same.
2928 -- bug fix 5487875 (added and condition (perd_ctr <> ret_period_dcal) at the end of elsif)
2929 -- bug fix 12612686 modified above condition to work only if deprn allocation = D
2930 ELSIF ret_fy_flag AND
2931 (ret_period_dcal < ret_prorate_period_pcal) AND (perds_per_yr_pcal = perds_per_yr_dcal) AND
2932 ( ( (perd_ctr <> ret_period_dcal) and NOT last_divide_evenly_flag ) or (last_divide_evenly_flag) ) THEN
2933 deprn_frac_of_yr := (ret_prorate_period_pcal - perd_ctr)/perds_per_yr_dcal;
2934 --bug fix 3233833 ends
2935
2936 IF (p_log_level_rec.statement_level) THEN
2937 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.2): ret_period_dcal',ret_period_dcal, p_log_level_rec);
2938 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.2): ret_prorate_period_pcal',ret_prorate_period_pcal, p_log_level_rec);
2939 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.2): perds_per_yr_pcal',perds_per_yr_pcal, p_log_level_rec);
2940 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.2): perds_per_yr_dcal',perds_per_yr_dcal, p_log_level_rec);
2941 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.2): perd_ctr',perd_ctr);
2942 END IF;
2943 --Bug7133501 Added for cases where prorate falls in next year
2944 --Bug#10411858: Added condition to calculate correct fraction for annual_rounding logic
2945 ELSIF ret_fy_flag AND
2946 (ret_period_dcal > ret_prorate_period_pcal) AND
2947 (fy_ret < ret_year_pcal) AND
2948 (perds_per_yr_pcal = perds_per_yr_dcal) AND
2949 (perd_ctr <> ret_period_dcal) AND
2950 not(dpr_in.recursive_flag) THEN
2951 deprn_frac_of_yr := (perds_per_yr_dcal - perd_ctr + ret_prorate_period_pcal)/perds_per_yr_dcal;
2952
2953 IF (p_log_level_rec.statement_level) THEN
2954 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.3): deprn_frac_of_yr',deprn_frac_of_yr);
2955 END IF;
2956 ELSIF ret_fy_flag AND
2957 (perd_ctr = ret_period_dcal) THEN
2958 deprn_frac_of_yr := ret_perd_frac;
2959
2960 IF (p_log_level_rec.statement_level) THEN
2961 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.4): deprn_frac_of_yr',deprn_frac_of_yr);
2962 END IF;
2963 ELSIF use_deprn_prate_amt AND
2964 (fyctr = fy_fully_rsv) AND
2965 (perd_ctr = deprn_perd_fully_rsv) AND
2966 NOT use_deprn_limit_flag THEN
2967 deprn_frac_of_yr := last_perd_frac;
2968 IF dpr_in.method_code = 'JP-STL-EXTND' THEN
2969 deprn_frac_of_yr := perds_fracs_arr(perd_ctr-1).frac;
2970 END IF;
2971
2972 IF (p_log_level_rec.statement_level) THEN
2973 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.5): deprn_frac_of_yr',deprn_frac_of_yr);
2974 END IF;
2975 ELSE
2976 --
2977 -- always get fraction from cache for
2978 -- assets using flat rate or having
2979 -- deprn limit
2980 --
2981 deprn_frac_of_yr := perds_fracs_arr(perd_ctr-1).frac;
2982
2983 IF (p_log_level_rec.statement_level) THEN
2984 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.6): perd_ctr',perd_ctr);
2985 fa_debug_pkg.ADD('faxcde','fadpdp(4.5.6): deprn_frac_of_yr',deprn_frac_of_yr);
2986 END IF;
2987 END IF; -- first_fy_flag and
2988
2989 -- bonus: perd_deprn_exp including perd_bonus_deprn_amount, since ann_fy_deprn
2990 -- kept the total amount.
2991 perd_deprn_exp := ann_fy_deprn * deprn_frac_of_yr;
2992 -- start: bug 8408871
2993 if (NVL(year_deprn_exp,0) + perd_deprn_exp > ann_fy_deprn) AND
2994 (dpr.ceil_name IS NOT NULL)
2995 then
2996 perd_deprn_exp := ann_fy_deprn - NVL(year_deprn_exp,0);
2997 end if;
2998 -- end: bug 8408871
2999
3000 -- bonus? investigate.
3001 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3002 perd_bonus_deprn_amount := bonus_ann_fy_deprn * deprn_frac_of_yr;
3003 -- start: bug 8408871
3004 if (NVL(year_bonus_deprn_amount,0) + perd_bonus_deprn_amount > bonus_ann_fy_deprn) AND
3005 (dpr.ceil_name IS NOT NULL)
3006 then
3007 perd_bonus_deprn_amount := bonus_ann_fy_deprn - NVL(year_bonus_deprn_amount,0);
3008 end if;
3009 -- end: bug 8408871
3010 END IF;
3011 --
3012 -- In case of subtract ytd falg is true, multiply number of
3013 -- period past in this fiscal year to periodic depreciation
3014 -- and subtract passed ytd deprn amount to find periodic exp.
3015 --
3016 IF (p_log_level_rec.statement_level) THEN
3017 fa_debug_pkg.ADD(l_calling_fn, 'p_subtract_ytd_flag', p_subtract_ytd_flag, p_log_level_rec);
3018 END IF;
3019
3020 IF (NVL(p_subtract_ytd_flag,'N') = 'Y') THEN
3021
3022 IF (p_log_level_rec.statement_level) THEN
3023 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'cache: use_eofy_reserve_flag',
3024 fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag, p_log_level_rec => p_log_level_rec);
3025 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'cache: allow_reduction_rate_flag',
3026 fa_cache_pkg.fazcdrd_record.allow_reduction_rate_flag, p_log_level_rec => p_log_level_rec);
3027 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'cache: rate_source_rule',
3028 fa_cache_pkg.fazccmt_record.rate_source_rule, p_log_level_rec => p_log_level_rec);
3029 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'cache: deprn_basis_rule',
3030 fa_cache_pkg.fazccmt_record.deprn_basis_rule, p_log_level_rec => p_log_level_rec);
3031 END IF;
3032
3033 --
3034 -- Change for OPA
3035 --
3036 IF (fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag = 'Y' AND
3037 fa_cache_pkg.fazcdrd_record.allow_reduction_rate_flag = 'N' AND
3038 fa_cache_pkg.fazccmt_record.rate_source_rule = 'FLAT' AND
3039 fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'COST') THEN
3040 --
3041 -- Find ytd using (reserve - eofy reserve)
3042 -- find remaining period in fy using (num per in fy - period num + 1)
3043 -- formula to find peridic exp is
3044 -- ((adj_cost * rate) - ytd) / remaining period in fy
3045 --
3046 IF (p_log_level_rec.statement_level) THEN
3047 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'ann_fy_deprn', ann_fy_deprn, p_log_level_rec => p_log_level_rec);
3048 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'ann_deprn_rate', ann_deprn_rate, p_log_level_rec => p_log_level_rec);
3049 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'cur_deprn_rsv', cur_deprn_rsv, p_log_level_rec => p_log_level_rec);
3050 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'cur_eofy_reserve', cur_eofy_reserve, p_log_level_rec => p_log_level_rec);
3051 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'perds_per_yr_dcal', perds_per_yr_dcal, p_log_level_rec => p_log_level_rec);
3052 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'perd_ctr', perd_ctr, p_log_level_rec => p_log_level_rec);
3053 END IF;
3054
3055 perd_deprn_exp := (cur_adj_cost * ann_deprn_rate -
3056 (NVL(cur_deprn_rsv,0)+ NVL(year_deprn_exp,0) - cur_eofy_reserve))/
3057 (perds_per_yr_dcal - perd_ctr + 1);
3058 IF (p_log_level_rec.statement_level) THEN
3059 fa_debug_pkg.ADD(l_calling_fn||' OPA', 'perd_deprn_exp', perd_deprn_exp, p_log_level_rec => p_log_level_rec);
3060 END IF;
3061
3062 ELSE
3063
3064 IF (p_log_level_rec.statement_level) THEN
3065 fa_debug_pkg.ADD('HH DEBUG', 'perd_deprn_exp(before)',perd_deprn_exp);
3066 fa_debug_pkg.ADD('HH DEBUG', 'perd_ctr',perd_ctr, p_log_level_rec => p_log_level_rec);
3067 fa_debug_pkg.ADD('HH DEBUG', 'dpr_in.ytd_deprn',dpr_in.ytd_deprn, p_log_level_rec => p_log_level_rec);
3068 fa_debug_pkg.ADD('HH DEBUG', 'year_deprn_exp',year_deprn_exp, p_log_level_rec => p_log_level_rec);
3069 END IF;
3070
3071 --Bug 9814505
3072 --subtract ytd can be used with monthly deprn calendar.
3073 --so, we need to ensure that the initialization happens only once.
3074 --
3075 IF (fyctr = dpr.y_begin) and subtract_ytd_init_flag THEN
3076 perd_deprn_exp := perd_deprn_exp * perd_ctr - dpr_in.ytd_deprn;
3077
3078 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3079 perd_bonus_deprn_amount := perd_bonus_deprn_amount * perd_ctr - dpr.bonus_ytd_deprn;
3080 END IF;
3081 subtract_ytd_init_flag := FALSE;
3082 --End Bug 9814505
3083 /*bug#15897249 starts */
3084 year_deprn_exp := dpr_in.ytd_deprn;
3085 cur_deprn_rsv := cur_deprn_rsv-dpr_in.ytd_deprn;
3086 /*bug#15897249 ends */
3087 ELSE
3088 perd_deprn_exp := perd_deprn_exp * perd_ctr - NVL(year_deprn_exp,0);
3089
3090 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3091 perd_bonus_deprn_amount :=
3092 perd_bonus_deprn_amount * perd_ctr - year_bonus_deprn_amount;
3093 END IF;
3094
3095 END IF; -- (fyctr = dpr.y_begin)
3096 END IF; -- Change for OPA
3097
3098 END IF; -- (nvl(p_subtract_ytd_flag,'N') = 'Y')
3099
3100 dpr_out.ann_adj_exp := ann_fy_deprn;
3101 --
3102 -- Debug
3103 --
3104 IF (p_log_level_rec.statement_level) THEN
3105 fa_debug_pkg.ADD('faxcde', 'fadpdp(4.0): ann_fy_deprn',ann_fy_deprn);
3106 fa_debug_pkg.ADD('faxcde', 'deprn_frac_of_yr',deprn_frac_of_yr, p_log_level_rec => p_log_level_rec);
3107 fa_debug_pkg.ADD('faxcde', 'perd_deprn_exp',perd_deprn_exp, p_log_level_rec => p_log_level_rec);
3108 END IF;
3109
3110 --
3111 -- if the profile option:FA_DEPRN_OVERRIDE_ENABLED = 'Y' and
3112 -- this is not for what-if analysis, call FAODDA funtion to
3113 -- upload the override depreciation data
3114 --
3115 override_depr_amt:= NULL;
3116 override_bonus_amt:= NULL;
3117
3118 /* As mentioned above we should not override deprn value for what-if-analysis
3119 So, added check for What-If analysis bug 7645269*/
3120
3121 -- Bug 8211842: Added nvl
3122 IF (fa_cache_pkg.fa_deprn_override_enabled) AND (nvl(l_request_short_name,'X') <> 'FAWDPR') THEN
3123 whatif_override_enable := 'Y';
3124 ELSE
3125 whatif_override_enable := 'N';
3126 END IF;
3127
3128 IF (p_log_level_rec.statement_level) THEN
3129 fa_debug_pkg.ADD('faxcde', 'FA_DEPRN_OVERRIDE_ENABLED', whatif_override_enable, p_log_level_rec => p_log_level_rec);
3130 END IF;
3131
3132 IF whatif_override_enable = 'Y' AND
3133 NVL(dpr_in.deprn_override_flag, fa_std_types.FA_NO_OVERRIDE) <> fa_std_types.FA_OVERRIDE_RECURSIVE THEN
3134 l_bonus_ytd_deprn := 0;
3135
3136 IF fyctr = dpr.y_begin THEN
3137 l_ytd_deprn := dpr_in.ytd_deprn;
3138
3139 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3140 l_bonus_ytd_deprn := dpr.bonus_ytd_deprn;
3141 END IF;
3142 ELSE
3143 l_ytd_deprn := NVL(year_deprn_exp,0);
3144
3145 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3146 l_bonus_ytd_deprn := year_bonus_deprn_amount;
3147 END IF;
3148 END IF;
3149
3150 IF (p_log_level_rec.statement_level) THEN
3151 fa_debug_pkg.ADD('faxcde', 'fadpdp: dpr_in.deprn_override_flag',dpr_in.deprn_override_flag, p_log_level_rec => p_log_level_rec);
3152 fa_debug_pkg.ADD('faxcde', 'fadpdp: dpr_in.override_period_counter',dpr_in.override_period_counter, p_log_level_rec => p_log_level_rec);
3153 END IF;
3154
3155 /*Bug# - 8487934 */
3156 if (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_YES) then
3157 l_over_depreciate_option := 2;
3158 elsif (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_NO) then
3159 l_over_depreciate_option := 1;
3160 else
3161 l_over_depreciate_option := 0;
3162 end if;
3163
3164 IF NOT FAODDA(dpr.book
3165 , dpr.deprn_override_used_by --Bug11886090
3166 , dpr.asset_id
3167 , dpr.bonus_rule
3168 , fyctr
3169 , perd_ctr
3170 , prod_rate_src_flag
3171 , deprn_projecting_flag
3172 , l_ytd_deprn
3173 , l_bonus_ytd_deprn
3174 , override_depr_amt
3175 , override_bonus_amt
3176 , deprn_override_flag
3177 , return_code
3178 , dpr.mrc_sob_type_code
3179 , dpr.set_of_books_id
3180 , dpr.rec_cost
3181 , dpr.salvage_value
3182 , dpr.update_override_status
3183 , l_over_depreciate_option
3184 , dpr.asset_type
3185 , dpr.deprn_rsv
3186 , dpr.rec_cost
3187 , dpr.override_period_counter
3188 , p_log_level_rec) THEN
3189
3190 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faooda', p_log_level_rec => p_log_level_rec);
3191 dpr_out.deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
3192 RETURN(FALSE);
3193
3194 END IF;
3195
3196 IF (p_log_level_rec.statement_level) THEN
3197 fa_debug_pkg.ADD('faxcde', 'fadpdp: deprn_override_flag',deprn_override_flag, p_log_level_rec => p_log_level_rec);
3198 fa_debug_pkg.ADD('faxcde', 'fadpdp: faodda:return_code',return_code, p_log_level_rec => p_log_level_rec);
3199 END IF;
3200
3201 -- Bug#7953789 - start
3202 if return_code = 2 then
3203 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faooda', p_log_level_rec => p_log_level_rec);
3204 dpr_out.deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
3205 end if;
3206 -- Bug#7953789 end
3207
3208 END IF; -- value = 'Y' and
3209
3210 --
3211 -- re-calculate perd_deprn_exp to use substraction method
3212 -- if current period is the last period of fiscal year
3213 -- and deprn_rounding_flag is NULL or ADD
3214 -- perd_deprn_exp = actual_annual_deprn_amt -
3215 -- ((dpr.ytd_deprn + ytd_deprn_sum) -
3216 -- (dpr.prior_fy_exp +prior_fy_exp_sum ))
3217 --
3218 -- we can not use substraction method for projection
3219 -- since dpr.ytd_deprn has incorrect value if the
3220 -- projection staring period is later than the current
3221 -- period. it's a temp fix. To fix tis problem, we
3222 -- need to return the value of ytd_deprn in dpr_out
3223 -- then copy it to dpr.ytd_deprn when calling the
3224 -- faxcde at the second time
3225
3226 --
3227 -- This is set appropriately in what-if so take what is passed
3228 -- to faxcde. or apply this only for the first year.
3229 --if deprn_projecting_flag then
3230 -- dpr.deprn_rounding_flag:= fa_std_types.FA_DPR_ROUND_RES;
3231 --end if;
3232
3233 -- Bug #2686687
3234 -- Annual rounding should be performed if current period is
3235 -- the last period of fiscal year; AND
3236 -- when there was no override; OR
3237 -- when overridden only bonus depreciation amount
3238
3239 IF (perd_ctr=perds_per_yr_dcal AND
3240 (deprn_override_flag = fa_std_types.FA_NO_OVERRIDE OR
3241 deprn_override_flag = fa_std_types.FA_OVERRIDE_BONUS) AND
3242 NVL(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') ='N' AND
3243 NVL(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') ='N') THEN
3244
3245 IF (dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_ADD OR
3246 dpr.deprn_rounding_flag IS NULL) THEN
3247 --
3248 -- Go into following logic if this is group (except sumup) or calculating member
3249 --
3250 IF (NVL(dpr.asset_type, 'CAPITALIZED') = 'GROUP' AND
3251 NVL(dpr.member_rollup_flag, 'N') <> 'Y') OR
3252 (NVL(dpr.asset_type, 'CAPITALIZED') <> 'GROUP' AND
3253 NVL(dpr.tracking_method, 'NULL') = 'CALCULATE') THEN
3254
3255 perd_deprn_exp := actual_annual_deprn_amt -
3256 (NVL(cur_deprn_rsv,0)+ NVL(year_deprn_exp,0) - cur_eofy_reserve);
3257
3258 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3259 perd_bonus_deprn_amount := perd_deprn_exp *
3260 (dpr_out.bonus_rate_used /
3261 (ann_deprn_rate + dpr_out.bonus_rate_used));
3262 END IF;
3263
3264 ELSE
3265 -- Bonus
3266 -- Should actual_annual_deprn_amt be added with actual_annual_bonus_deprn_amt?
3267 -- Yes, included. See before the loop.
3268 -- Original equation only works for first year in fy loop.
3269 --
3270
3271 IF (p_log_level_rec.statement_level) THEN
3272 fa_debug_pkg.ADD('faxcde', 'fyctr', fyctr, p_log_level_rec);
3273 fa_debug_pkg.ADD('faxcde', 'dpr.y_begin', dpr.y_begin, p_log_level_rec);
3274 fa_debug_pkg.ADD('faxcde', 'dpr.ytd_deprn', dpr.ytd_deprn, p_log_level_rec);
3275 fa_debug_pkg.ADD('faxcde', 'ytd_deprn_sum', ytd_deprn_sum, p_log_level_rec);
3276 fa_debug_pkg.ADD('faxcde', 'actual_annual_deprn_amt', actual_annual_deprn_amt, p_log_level_rec);
3277 fa_debug_pkg.ADD('faxcde', 'dpr.prior_fy_exp', dpr.prior_fy_exp, p_log_level_rec);
3278 fa_debug_pkg.ADD('faxcde', 'prior_fy_exp_sum', prior_fy_exp_sum, p_log_level_rec);
3279 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec);
3280 END IF;
3281
3282 -- Bug5152481: Added "(dpr_in.p_cl_begin <> 1)" to the following
3283 -- if statement.
3284 --Bug10131226: Included nvl conditon
3285 IF (fyctr = dpr.y_begin) AND (dpr_in.p_cl_begin <> 1) THEN
3286 perd_deprn_exp := (actual_annual_deprn_amt -
3287 ((nvl(dpr.ytd_deprn,0) + ytd_deprn_sum) -
3288 (nvl(dpr.prior_fy_exp,0) + prior_fy_exp_sum)));
3289 ELSE
3290 perd_deprn_exp := actual_annual_deprn_amt - NVL(year_deprn_exp,0);
3291 END IF;
3292
3293 -- bonus? Investigate the statement below! This case is for last
3294 --period in fiscal year.
3295 -- Now added prior_fy_bonus_exp_sum.
3296 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3297 -- Bug 5057908: Added nvl
3298 perd_bonus_deprn_amount := (actual_annual_bonus_deprn_amt -
3299 ((dpr.bonus_ytd_deprn + ytd_bonus_deprn_sum) -
3300 (NVL(dpr.prior_fy_bonus_exp,0) + prior_fy_bonus_exp_sum)));
3301 END IF;
3302 END IF; -- (nvl(dpr.asset_type, 'CAPITALIZED') = 'GROUP' and ..
3303
3304 ELSIF (dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_ADJ OR
3305 dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_RET OR
3306 dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_REV OR
3307 dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_TFR OR
3308 dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_RES OR
3309 dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_OVE) THEN
3310
3311 IF ann_rounding_mode=ROUND_ALWAYS THEN
3312 dpr_sub:= dpr_in;
3313 dpr_sub.bonus_deprn_rsv:= 0;
3314 dpr_sub.deprn_rsv:= 0;
3315 dpr_sub.ltd_prod:= 0;
3316 dpr_sub.ytd_deprn:= 0;
3317
3318 dpr_sub.y_begin:= fyctr;
3319 dpr_sub.y_end:= fyctr;
3320 dpr_sub.p_cl_begin:= 1;
3321 dpr_sub.p_cl_end:= perds_per_yr_dcal - 1;
3322
3323 dpr_sub.deprn_override_flag:= fa_std_types.FA_OVERRIDE_RECURSIVE;
3324
3325 -- Bug3493721:
3326 -- Rounding should always be done during recursive call
3327 ----Bug#10411858:Recursive_flag set to true before recalculating reserve
3328 dpr_sub.deprn_rounding_flag := NULL;
3329 dpr_sub.recursive_flag := TRUE;
3330
3331 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
3332 dpr_sub.adj_cost := cur_adj_cost - dpr.salvage_value;
3333 ELSE
3334 dpr_sub.adj_cost := cur_adj_cost;
3335 END IF;
3336
3337 --Bug # 7561254
3338 IF ( (dpr_out.full_rsv_flag) AND
3339 (l_request_short_name = 'FAWDPR') AND
3340 (dpr_in.method_code = 'JP-STL-EXTND')) then
3341 perd_deprn_exp := 0;
3342 Else
3343 IF NOT fa_cde_pkg.faxcde(dpr_sub,
3344 h_dummy_dpr,
3345 dpr_out,
3346 fmode,
3347 p_log_level_rec => p_log_level_rec) THEN
3348 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
3349 RETURN (FALSE);
3350 END IF;
3351 perd_deprn_exp := actual_annual_deprn_amt - dpr_out.deprn_exp;
3352 END IF;
3353
3354 fa_debug_pkg.ADD('faxcde', 'fadpdp(4.1): IN :actual_annual_deprn_amt ', nbv_absval||','||actual_annual_deprn_amt||','||dpr_out.deprn_exp||','||ann_fy_deprn, p_log_level_rec);
3355
3356 -- Added the Below code to take care of the Bug# 7277598
3357 -- Below code calculates the Prorata Depreciable amount , if the asset is added with JP-250DB XX and NBV_AT_SWITCH in the Mid of the FY
3358
3359 IF l_request_short_name = 'FAWDPR' then
3360 -- Removed and "l_nbv_at_switch is not null" clause and "first_fy_flag = TRUE AND" clause from the Below IF condition , as this should work for all scenarios.
3361 IF (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES') THEN --- Checking for Methods JP-250DB XX
3362 IF NOT(dpr_run_flag) AND deprn_start_perd <> 1 AND deprn_start_perd <> perds_per_yr_dcal THEN -- BUG# 7304706 : NOT(dpr_run_flag) clause is added
3363 /*Bug 7539379 changed below calculation for last period deprn amount */
3364 --perd_deprn_exp := ann_fy_deprn - ytd_deprn_sum;
3365 perd_deprn_exp := temp_round_amt - temp_round_amt1;
3366 END IF;
3367 END IF;
3368 END IF;
3369
3370 -- End of Addition BUG# 7277598
3371
3372 END IF; -- ann_rounding_mode=ROUND_ALWAYS then
3373
3374 ELSE
3375 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
3376 name => 'FA_DEPRN_ILLEGAL_VALUE',
3377 token1 => 'VARIABLE',
3378 value1 => 'Deprn_Rounding_Flag',
3379 token2 => 'VALUE',
3380 value2 => dpr.deprn_rounding_flag,
3381 TRANSLATE => FALSE,
3382 p_log_level_rec => p_log_level_rec);
3383 RETURN (FALSE);
3384 END IF; -- (dpr.deprn_rounding_flag = fa_std_types.FA_DPR_ROUND_ADD or
3385
3386 --
3387 -- Debug
3388 --
3389 IF (p_log_level_rec.statement_level) THEN
3390 fa_debug_pkg.ADD('faxcde', 'fadpdp(4.1): IN :perd_deprn_exp ', perd_deprn_exp);
3391 fa_debug_pkg.ADD('faxcde', 'actual_annual_deprn_amt',actual_annual_deprn_amt, p_log_level_rec);
3392 fa_debug_pkg.ADD('faxcde', 'dpr.ytd_deprn',dpr.ytd_deprn, p_log_level_rec);
3393 fa_debug_pkg.ADD('faxcde', 'ytd_deprn_sum',ytd_deprn_sum, p_log_level_rec);
3394 fa_debug_pkg.ADD('faxcde', 'dpr.prior_fy_exp', dpr.prior_fy_exp, p_log_level_rec);
3395 fa_debug_pkg.ADD('faxcde', 'dpr.prior_fy_bonus_exp', dpr.prior_fy_exp, p_log_level_rec);
3396 fa_debug_pkg.ADD('faxcde', 'prior_fy_exp_sum',prior_fy_exp_sum, p_log_level_rec);
3397 fa_debug_pkg.ADD('faxcde', 'fadpdp(4.1) OUT :perd_deprn_exp ', perd_deprn_exp);
3398 END IF;
3399 END IF; -- (perd_ctr=perds_per_yr_dcal and
3400
3401 IF (prod_rate_src_flag) THEN
3402 period_fracs_single.frac := perds_fracs_arr(perd_ctr-1).frac;
3403 period_fracs_single.start_jdate :=
3404 perds_fracs_arr(perd_ctr-1).start_jdate;
3405 period_fracs_single.end_jdate :=
3406 perds_fracs_arr(perd_ctr-1).end_jdate;
3407
3408 IF NOT fa_cde_pkg.faxgpr(dpr,
3409 period_fracs_single,
3410 deprn_projecting_flag,
3411 perd_prod,
3412 p_log_level_rec) THEN
3413 fa_srvr_msg.add_message ( calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
3414 RETURN (FALSE);
3415 END IF;
3416
3417 IF dpr.rate_adj_factor <= 0 THEN
3418 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
3419 name => 'FA_DEPRN_ILLEGAL_VALUE',
3420 token1 => 'VARIABLE',
3421 value1 => 'Rate_Adjustment_Factor',
3422 token2 => 'VALUE',
3423 value2 => dpr.rate_adj_factor,
3424 TRANSLATE => FALSE,
3425 p_log_level_rec => p_log_level_rec);
3426 RETURN (FALSE);
3427 END IF;
3428
3429 IF dpr.capacity <= 0 THEN
3430 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
3431 name => 'FA_DEPRN_ILLEGAL_VALUE',
3432 token1 => 'VARIABLE',
3433 value1 => 'Capacity',
3434 token2 => 'VALUE',
3435 value2 => dpr.capacity,
3436 TRANSLATE => FALSE, p_log_level_rec => p_log_level_rec);
3437 RETURN (FALSE);
3438 END IF;
3439
3440 IF dpr.adj_capacity < 0 THEN
3441 /* Bug#14784782: Checking for life_complete assets */
3442 l_period_counter := fyctr * fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR + perd_ctr;
3443
3444 BEGIN
3445 select 'Y'
3446 into prod_life_complete
3447 from fa_books_summary bs,fa_deprn_summary ds
3448 where bs.asset_id = dpr.asset_id
3449 and bs.period_counter = l_period_counter
3450 and bs.life_complete_flag = 'Y'
3451 and bs.book_type_code = dpr.book
3452 and ds.book_type_code = bs.book_type_code
3453 and ds.asset_id = bs.asset_id
3454 and ds.period_counter = bs.period_counter
3455 and ds.deprn_amount = 0 ;
3456 EXCEPTION
3457 WHEN OTHERS THEN
3458 prod_life_complete := 'N';
3459 END;
3460
3461 IF prod_life_complete = 'N' then
3462 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
3463 name => 'FA_DEPRN_ILLEGAL_VALUE',
3464 token1 => 'VARIABLE',
3465 value1 => 'Adjusted_Capacity',
3466 token2 => 'VALUE',
3467 value2 => dpr.adj_capacity,
3468 TRANSLATE => FALSE, p_log_level_rec => p_log_level_rec);
3469 RETURN (FALSE);
3470 END IF;
3471 END IF;
3472
3473 --
3474 -- Debug
3475 --
3476 IF (p_log_level_rec.statement_level) THEN
3477 fa_debug_pkg.ADD('faxcde', 'fadpdp(5): cur_adj_cost', cur_adj_cost);
3478 fa_debug_pkg.ADD('faxcde', 'dpr.rate_adj_factor', dpr.rate_adj_factor, p_log_level_rec => p_log_level_rec);
3479 fa_debug_pkg.ADD('faxcde', 'perd_prod', perd_prod, p_log_level_rec => p_log_level_rec);
3480 fa_debug_pkg.ADD('faxcde', 'dpr.adj_capacity', dpr.adj_capacity, p_log_level_rec => p_log_level_rec);
3481 END IF;
3482
3483 if dpr.adj_capacity <= 0 then
3484 perd_deprn_exp := 0;
3485 else
3486 perd_deprn_exp := (cur_adj_cost / dpr.rate_adj_factor) *
3487 (perd_prod / dpr.adj_capacity);
3488 end if;
3489
3490 -- Main tain adj_capacity
3491 IF (NVL(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') ='Y') THEN -- ENERGY
3492 dpr.adj_capacity := dpr.adj_capacity - perd_prod; -- ENERGY
3493 END IF; -- ENERGY
3494
3495 -- bonus: Not tracking for production.
3496 perd_bonus_deprn_amount := 0;
3497 dpr_out.ann_adj_exp := 0;
3498
3499 --
3500 -- Debug
3501 --
3502 IF (p_log_level_rec.statement_level) THEN
3503 fa_debug_pkg.ADD('faxcde', 'fadpdp(6): perd_deprn_exp', perd_deprn_exp);
3504 END IF;
3505 ELSE
3506 perd_prod := 0;
3507 END IF; -- (prod_rate_src_flag) then
3508
3509 IF (deprn_projecting_flag OR
3510 ann_rounding_mode=ROUND_ALWAYS) THEN
3511 --
3512 -- Round perd_deprn_exp ONLY if Projecting
3513 --
3514
3515 IF NOT fa_utils_pkg.faxrnd(perd_deprn_exp, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec) THEN
3516 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
3517 RETURN (FALSE);
3518 END IF;
3519
3520 -- bonus: Assignment to perd_bonus_deprn_amount earlier should be checked.
3521 IF NOT fa_utils_pkg.faxrnd(perd_bonus_deprn_amount, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec) THEN
3522 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
3523 RETURN (FALSE);
3524 END IF;
3525
3526 END IF; -- (deprn_projecting_flag or
3527
3528 -- perform override depreciation for each uploaded data from the interface table
3529 IF (deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE) THEN
3530
3531 --Bug 5657699
3532 SELECT adjusted_cost
3533 INTO l_temp_adj_cost
3534 FROM fa_books
3535 WHERE book_type_code = dpr.book
3536 AND asset_id = dpr.asset_id
3537 AND transaction_header_id_out IS NULL;
3538
3539 IF (l_temp_adj_cost <> dpr_in.adj_cost or l_temp_adj_cost <> 0) THEN -- Bug 5657699
3540 -- Bug 8579500
3541 --
3542 -- Debug
3543 --
3544 IF (p_log_level_rec.statement_level) THEN
3545 fa_debug_pkg.ADD('faxcde', 'perd_deprn_exp(default)', perd_deprn_exp);
3546
3547 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3548 fa_debug_pkg.ADD('faxcde', 'perd_bonus_deprn_amount(default)', perd_bonus_deprn_amount);
3549 END IF;
3550 END IF;
3551
3552 IF deprn_override_flag = fa_std_types.FA_OVERRIDE_BONUS OR
3553 deprn_override_flag = fa_std_types.FA_OVERRIDE_DPR_BONUS THEN
3554 perd_deprn_exp:= perd_deprn_exp - NVL(perd_bonus_deprn_amount, 0);
3555 perd_bonus_deprn_amount:= NVL(override_bonus_amt,0);
3556 END IF;
3557
3558 IF deprn_override_flag = fa_std_types.FA_OVERRIDE_DPR OR
3559 deprn_override_flag = fa_std_types.FA_OVERRIDE_DPR_BONUS THEN
3560
3561 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3562 perd_deprn_exp:= override_depr_amt + NVL(perd_bonus_deprn_amount,0);
3563 ELSE
3564 perd_deprn_exp:= override_depr_amt;
3565 END IF;
3566 ELSE
3567 perd_deprn_exp:= perd_deprn_exp + perd_bonus_deprn_amount;
3568 END IF;
3569
3570 --
3571 -- Debug
3572 --
3573 IF (p_log_level_rec.statement_level) THEN
3574 fa_debug_pkg.ADD('faxcde', 'perd_deprn_exp(new)', perd_deprn_exp);
3575
3576 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3577 fa_debug_pkg.ADD('faxcde', 'perd_bonus_deprn_amount(new)', perd_bonus_deprn_amount);
3578 END IF;
3579 END IF;
3580
3581 -- Bug 5657699: Added following else part
3582 ELSE
3583 perd_deprn_exp := 0;
3584 perd_bonus_deprn_amount := 0;
3585
3586 END IF; -- Bug 5657699
3587
3588 END IF; -- (deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE) then
3589 -- End of override depreciation logic
3590
3591 --
3592 -- If the remaining depreciation is small (absolutely OR
3593 -- relatively), then fully depreciate the asset
3594 --
3595 -- Calculate the absolute value of the asset's new NBV
3596 -- Use adj_rec_cost as base instead of dpr.rec_cost
3597 --
3598 nbv_absval := ABS(adj_rec_cost -
3599 (cur_deprn_rsv + NVL(year_deprn_exp,0) + perd_deprn_exp));
3600
3601 -- bonus? Shouldn't really have to bother about bonus nbv, as long as regular deprn figures
3602 -- contain bonus figures. skipping.
3603
3604 --
3605 -- Debug
3606 --
3607 IF (p_log_level_rec.statement_level) THEN
3608 fa_debug_pkg.ADD('faxcde', 'fadpdp(7): adj_rec_cost', adj_rec_cost);
3609 fa_debug_pkg.ADD('faxcde', 'cur_deprn_rsv', cur_deprn_rsv, p_log_level_rec => p_log_level_rec);
3610 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec => p_log_level_rec);
3611 fa_debug_pkg.ADD('faxcde', 'perd_deprn_exp', perd_deprn_exp, p_log_level_rec => p_log_level_rec);
3612 fa_debug_pkg.ADD('faxcde', 'nbv_absval', nbv_absval, p_log_level_rec => p_log_level_rec);
3613 fa_debug_pkg.ADD('faxcde', 'nbv_frac_thresh', nbv_frac_thresh, p_log_level_rec => p_log_level_rec);
3614 fa_debug_pkg.ADD('faxcde', 'nbv_amt_thresh', nbv_amt_thresh, p_log_level_rec => p_log_level_rec);
3615 END IF;
3616
3617
3618 --
3619 -- Get the absolute value of the asset's Adjusted
3620 -- Recoverable Cost, do not use Recoverable Cost
3621 --
3622 adj_rec_cost_absval := ABS (adj_rec_cost);
3623
3624 --
3625 -- Check the NBV against the constant value, and then
3626 -- against the fraction of the Adjusted Recoverable Cost
3627 --
3628 IF deprn_override_flag = fa_std_types.FA_NO_OVERRIDE THEN
3629 IF (nbv_absval < nbv_amt_thresh) OR
3630 (nbv_absval < nbv_frac_thresh * adj_rec_cost_absval) THEN
3631 last_period_deprn_exp := adj_rec_cost - (cur_deprn_rsv + NVL(year_deprn_exp,0));
3632
3633 --
3634 -- recalculate annual deprn amount if asset will became
3635 -- fully reserved in the last period of fiscal year
3636 --
3637 IF (nbv_deprn_basis_flag AND (deprn_end_perd = perds_per_yr_dcal)) THEN
3638 IF perd_deprn_exp < last_period_deprn_exp THEN
3639
3640 --
3641 -- use ann_fy_deprn to avoid rounding twice
3642 -- on annual depreciation amount
3643 --
3644 actual_annual_deprn_amt := ann_fy_deprn + (last_period_deprn_exp - perd_deprn_exp);
3645
3646 -- bonus: how prorate to bonus?
3647 -- maybe don't need assign any value to bonus. See hld regardin last period deprn.
3648 -- maybe we need actual_annual_bonus_deprn_amt variable in addition to bonus_ann_fy_deprn.
3649 -- We probably don't need to assign actual_annual_bonus_deprn_amt ? Investigate.
3650 -- actual_annual_bonus_deprn_amt := 0;
3651 h_dummy_bool := fa_utils_pkg.faxtru(actual_annual_deprn_amt, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec);
3652
3653 END IF;
3654
3655 END IF; -- (nbv_deprn_basis_flag and (deprn_end_perd = perds_per_yr_dcal)) then
3656
3657 END IF; -- (nbv_absval < nbv_amt_thresh) or
3658
3659 END IF; -- deprn_override_flag = fa_std_types.FA_NO_OVERRIDE then
3660
3661 ELSE
3662 perd_deprn_exp := 0;
3663 perd_bonus_deprn_amount := 0;
3664 perd_prod := 0;
3665 END IF; -- if ((perd_ctr >= actual_deprn_start_perd) and
3666
3667 --
3668 -- if excl_sal_val_flag='YES' then add salvage_value
3669 -- back to rec_cost_absval, and if it is less than rsv_absval then
3670 -- mark this asset as life complete
3671 --
3672 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
3673 rec_cost_absval := ABS(dpr.rec_cost + dpr.salvage_value);
3674 ELSE
3675 rec_cost_absval := ABS(dpr.rec_cost);
3676 END IF;
3677
3678 rec_cost_absval := ABS(dpr.rec_cost);
3679 adj_rec_cost_absval := ABS(adj_rec_cost);
3680
3681 -- Bug4037112:
3682 -- Need to prepare local variables include reserve adjustment amounts
3683 -- If the period has reset_adjusted_cost_flag, then current reserve
3684 -- has already include the adjustment and for other period, it needs
3685 -- accumulated reserve adjsutment amount to verify whether the asset
3686 -- is fully reserved or not.
3687 --
3688 IF ((l_ind <> 0) AND
3689 (fa_amort_pvt.t_reset_adjusted_cost_flag(l_ind) = 'Y')) THEN
3690 l_accum_rsv_adj := 0;
3691 l_rsv_adj := 0;
3692 ELSIF ((l_ind <> 0) AND
3693 (fa_amort_pvt.t_reset_adjusted_cost_flag(l_ind) = 'N')) THEN
3694 l_accum_rsv_adj := NVL(l_accum_rsv_adj, 0) +
3695 fa_amort_pvt.t_reserve_adjustment_amount(l_ind);
3696 l_rsv_adj := l_accum_rsv_adj;
3697 ELSE
3698 l_rsv_adj := 0;
3699 END IF;
3700
3701 --
3702 -- If this is called for maintaining FA_BOOKS_SUMAMRY table,
3703 -- consider reserve_adjustment_amount when calculating absolute
3704 -- value of reserve
3705 --
3706 IF (l_ind <> 0) AND
3707 (fa_amort_pvt.t_reset_adjusted_cost_flag(l_ind) = 'N') THEN
3708
3709 rsv_absval := ABS (cur_deprn_rsv + year_deprn_exp +
3710 perd_deprn_exp + l_rsv_adj);
3711 ELSE
3712 rsv_absval := ABS (cur_deprn_rsv + year_deprn_exp +perd_deprn_exp);
3713 END IF;
3714
3715 -- bonus?
3716 --
3717 -- if asset's depreciation reserve is greater than it's
3718 -- recoverable cost, set life completed flag
3719 --
3720 IF (rec_cost_absval <= rsv_absval) THEN
3721 dpr_out.life_comp_flag := TRUE;
3722 ELSE
3723 -- Reserve is now less than rec cost. Unset fully reserved flag
3724 -- and life complete flag.
3725 -- This is to restart calculating expense again
3726 dpr_out.full_rsv_flag := FALSE;
3727 dpr_out.life_comp_flag :=FALSE;
3728 END IF;
3729
3730 -- Fix for Bug #2833307. Add the following logic for over
3731 -- depreciate option:
3732 --
3733 -- FA_OVER_DEPR_NULL : No change in deprn logic
3734 -- FA_OVER_DEPR_NO : No change in deprn logic
3735 -- FA_OVER_DEPR_YES : If reserve is already exceeds
3736 -- adj_rec_cost, do nothing and mark the
3737 -- asset fully reserved. If not, calculate
3738 -- periodic depreciation. If it results in
3739 -- rsv exceeding adj_rec_cost, do nothing
3740 -- but mark the asset as fully reserved.
3741 -- FA_OVER_DEPR_DEPRN: Asset will never stop depreciation
3742 -- unless all member asset has been fully
3743 -- retired, or depreciate flag is unchecked.
3744 --
3745 -- NOTE: All life base methods will not value other than
3746 -- FA_OVER_DEPR_NULL or FA_OVER_DEPR_NO.
3747 IF (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_YES) THEN
3748
3749 -- BUg3315683:
3750 -- Group could have situation whether rsv_absval is greater than adj_rec_cost_absval
3751 -- but still not fully reserved because rsv is -ve and adj_rec_cost is +ve.
3752 --if (adj_rec_cost_absval < rsv_absval) then
3753 IF ((adj_rec_cost > 0) AND
3754 (adj_rec_cost < (cur_deprn_rsv + NVL(year_deprn_exp,0) +perd_deprn_exp+l_rsv_adj))) OR
3755 ((adj_rec_cost < 0) AND (adj_rec_cost_absval < rsv_absval)) THEN
3756
3757 -- Bug4037112: Need to add accumulated reserve adjustment in order to identify
3758 -- whether the group asset is fully reserved or not because cur_deprn_rsv does not
3759 -- include the amount.
3760 IF (l_ind <> 0) THEN
3761 IF((adj_rec_cost > 0) AND
3762 (adj_rec_cost < (cur_deprn_rsv +
3763 NVL(year_deprn_exp,0) +
3764 perd_deprn_exp+l_rsv_adj))) OR
3765 ((adj_rec_cost < 0) AND (adj_rec_cost_absval < rsv_absval)) THEN
3766
3767 dpr_out.full_rsv_flag := TRUE;
3768
3769 IF NOT dpr_out.life_comp_flag THEN
3770 dpr_out.life_comp_flag := TRUE;
3771 END IF;
3772
3773 ELSE
3774 -- Reserve is now less than rec cost. Unset fully reserved flag
3775 -- and life complete flag.
3776 -- This is to restart calculating expense again
3777 dpr_out.full_rsv_flag := FALSE;
3778 dpr_out.life_comp_flag :=FALSE;
3779 END IF;
3780 ELSE
3781 dpr_out.full_rsv_flag := TRUE;
3782
3783 IF NOT dpr_out.life_comp_flag THEN
3784 dpr_out.life_comp_flag := TRUE;
3785 END IF;
3786 END IF;
3787
3788 ELSE
3789
3790 -- Reserve is now less than rec cost. Unset fully reserved flag
3791 -- and life complete flag.
3792 -- This is to restart calculating expense again
3793 dpr_out.full_rsv_flag := FALSE;
3794 dpr_out.life_comp_flag :=FALSE;
3795
3796 END IF;
3797
3798 ELSIF (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_DEPRN) THEN
3799 -- continue depreciating
3800 NULL;
3801 ELSE
3802
3803 -- Bug fix 5893429
3804 IF dpr.cost_frac IS NOT NULL THEN
3805 l_adjusted_rsv_absval := ((rsv_absval - NVL(perd_deprn_exp,0) - NVL(year_deprn_exp,0))
3806 * (1 - dpr.cost_frac))
3807 + NVL(perd_deprn_exp,0) + NVL(year_deprn_exp,0);
3808
3809 IF NOT fa_utils_pkg.faxrnd(l_adjusted_rsv_absval, dpr.book, dpr.set_of_books_id, p_log_level_rec) THEN
3810 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
3811 RETURN (FALSE);
3812 END IF;
3813
3814 IF (p_log_level_rec.statement_level) THEN
3815 fa_debug_pkg.ADD('faxcde', 'dpr.cost_frac', dpr.cost_frac, p_log_level_rec);
3816 fa_debug_pkg.ADD('faxcde', 'rsv_absval', rsv_absval, p_log_level_rec);
3817 fa_debug_pkg.ADD('faxcde', 'before rounding: l_adjusted_rsv_absval', l_adjusted_rsv_absval, p_log_level_rec);
3818 END IF;
3819
3820 ELSE
3821 l_adjusted_rsv_absval := rsv_absval;
3822 END IF;
3823
3824 IF (p_log_level_rec.statement_level) THEN
3825 fa_debug_pkg.ADD('faxcde', 'l_adjusted_rsv_absval', l_adjusted_rsv_absval, p_log_level_rec);
3826 fa_debug_pkg.ADD('faxcde', 'adj_rec_cost_absval', adj_rec_cost_absval, p_log_level_rec);
3827 END IF;
3828 -- End bug fix 5893429
3829 --
3830 -- if asset's deprn reserve is greater than adjusted revoverable
3831 -- cost, set fully reserve flag.
3832 -- For assets which do not have deprn limit, recoverable cost is
3833 -- always equal to adjusted recoverable cost
3834 --
3835 IF adj_rec_cost_absval <= l_adjusted_rsv_absval THEN -- Bug fix 5893429 (replaced rsv_absval with l_adjusted_rsv_absval)
3836
3837 IF (deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE) AND
3838 (adj_rec_cost_absval < rsv_absval) AND
3839 NOT (deprn_projecting_flag) THEN
3840
3841 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
3842 name => 'FA_OVER_DEPRN_LIMIT',
3843 TRANSLATE=> FALSE, p_log_level_rec => p_log_level_rec);
3844 dpr_out.deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
3845 RETURN(FALSE);
3846 END IF;
3847
3848 dpr_out.full_rsv_flag := TRUE;
3849
3850 --
3851 -- Always set life complete once asset is fully reserved.
3852 -- This handles the case where the adjusted recoverable
3853 -- cost is less than recoverable cost
3854 --
3855 IF NOT dpr_out.life_comp_flag THEN
3856 dpr_out.life_comp_flag := TRUE;
3857 END IF;
3858 ELSE
3859 -- Reserve is now less than rec cost. Unset fully reserved flag
3860 -- and life complete flag.
3861 -- This is to restart calculating expense again
3862 dpr_out.full_rsv_flag := FALSE;
3863 dpr_out.life_comp_flag :=FALSE;
3864 END IF; -- adj_rec_cost_absval <= rsv_absval then
3865
3866 END IF; -- (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_YES) then
3867
3868 --
3869 -- If the Depreciate_Flag is 'NO', then don't depreciate
3870 --
3871 IF NOT dpr_cur_fy_flag THEN
3872
3873 IF deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE THEN
3874
3875 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faxcde',
3876 name => 'FA_NO_DEPRECIATION',
3877 TRANSLATE => FALSE,
3878 p_log_level_rec => p_log_level_rec);
3879 dpr_out.deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
3880 RETURN(FALSE);
3881 ELSE
3882 perd_deprn_exp := 0;
3883 perd_bonus_deprn_amount := 0;
3884 END IF;
3885
3886 END IF; -- not dpr_cur_fy_flag then
3887
3888 --
3889 -- For projection/what-if
3890 -- Set fully reserved flag if asset hits the end of life
3891 --
3892 IF (deprn_projecting_flag) AND
3893 (fyctr = fy_fully_rsv) AND
3894 (perd_ctr = actual_deprn_end_perd) THEN
3895 dpr_out.full_rsv_flag := TRUE;
3896 END IF;
3897
3898 -- Added the Below code to take care of the Bug# 7277598
3899 -- Below code calculates the Prorata Depreciable amount , if the asset is added with JP-250DB XX and NBV_AT_SWITCH in the Middle of FY
3900 IF l_request_short_name = 'FAWDPR' then
3901 IF (NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES') THEN --- Checking for Methods JP-250DB XX
3902 IF l_count = l_number_of_periods then
3903 dpr_out.full_rsv_flag := TRUE;
3904 dpr_out.life_comp_flag := TRUE;
3905 END IF;
3906 END IF;
3907 END IF;
3908 -- End of Addition BUG# 7277598
3909
3910 IF dpr_out.full_rsv_flag THEN
3911
3912 IF deprn_override_flag = fa_std_types.FA_NO_OVERRIDE THEN
3913
3914 IF (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_YES) THEN
3915
3916 IF (SIGN(adj_rec_cost) < 0 AND
3917 (adj_rec_cost > (cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj))) OR
3918 (SIGN(cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj) > 0 AND
3919 (adj_rec_cost < (cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj))) THEN
3920 perd_deprn_exp := 0;
3921 ELSE
3922 perd_deprn_exp := adj_rec_cost - (cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj);
3923 END IF;
3924
3925 ELSIF (dpr.over_depreciate_option = fa_std_types.FA_OVER_DEPR_DEPRN) THEN
3926 NULL;
3927 ELSE
3928 IF (SIGN(adj_rec_cost) < 0 AND
3929 (adj_rec_cost > (cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj))) OR
3930 (SIGN(cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj) > 0 AND
3931 (adj_rec_cost < (cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj))) THEN
3932
3933 -- Bug 8231467. The adj_rec_cost is new amount. Bur cur_deprn_rsv is still based on
3934 -- old adj_rec_cost. So we need to find out adj_deprn_rsv which is the reserve based
3935 -- on new adj_rec_cost. Let asset Cost:12000, STL:1 Year. Cur Period: Jan-01.
3936 -- By Oct-01, The reserve is 10000. The asset is fully reserved in Dec. Asset partialy
3937 -- retired(2000) with Oct-01 date. Now adj_rec_cost = 10000 and cur_deprn_rsv = 10000
3938 -- at this point of code. Exp_Oct = 833, Exp_Nov = 833. Year_expense = 1666. If you
3939 -- calculate with existing formula it gives (10000-(10000+1666)+0) = -1666. This should
3940 -- not be Exp_Dec. Rather than subtracting cur_deprn_rsv, we need to subtract the
3941 -- relative reserve based on cur_adj_rec_cost.
3942
3943 Begin
3944 SELECT fab1.adjusted_recoverable_cost
3945 INTO l_old_adj_rec_cost
3946 FROM fa_books fab1,fa_books fab2
3947 WHERE fab1.transaction_header_id_out = fab2.transaction_header_id_in
3948 AND fab1.asset_id = fab2.asset_id
3949 AND fab1.book_type_code = fab2.book_type_code
3950 AND fab2.asset_id = dpr.asset_id
3951 AND fab2.book_type_code = dpr.book --Bug 8475228
3952 AND fab2.transaction_header_id_out IS NULL;
3953 Exception
3954 When no_data_found Then
3955 null;
3956 End;
3957
3958 --Fix for bug 9360599
3959 IF (l_old_adj_rec_cost <> 0) THEN
3960 l_adj_deprn_rsv := (cur_deprn_rsv/l_old_adj_rec_cost) * adj_rec_cost;
3961 perd_deprn_exp := adj_rec_cost - (l_adj_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj);
3962 ELSE
3963 l_adj_deprn_rsv := 0;
3964 perd_deprn_exp := 0;
3965 END IF;
3966 --End of fix for bug 9360599
3967
3968 --perd_deprn_exp := 0;
3969 ELSE
3970 perd_deprn_exp := adj_rec_cost - (cur_deprn_rsv + NVL(year_deprn_exp,0)+ l_rsv_adj);
3971 END IF;
3972
3973 END IF;
3974
3975 -- bonus?
3976 -- According to hld, no bonus deprn amount should be charged in last period of life.
3977 -- Effects should be tested.
3978 perd_bonus_deprn_amount := 0;
3979
3980 END IF; -- deprn_override_flag = fa_std_types.FA_NO_OVERRIDE then
3981
3982 IF prod_rate_src_flag THEN
3983 --
3984 -- Reset to FALSE for Production-Based assets, because
3985 -- they never become marked as fully-reserved
3986 --
3987 dpr_out.full_rsv_flag := FALSE;
3988 END IF;
3989
3990 END IF; -- dpr_out.full_rsv_flag then
3991
3992 -- Added for Track Member Assets:
3993 --
3994 -- Round amount calculated
3995 --
3996 h_dummy_bool := fa_utils_pkg.faxrnd (perd_deprn_exp, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec);
3997 -- bonus
3998 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
3999 h_dummy_bool := fa_utils_pkg.faxrnd (perd_bonus_deprn_amount, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec);
4000 END IF;
4001
4002 IF NVL(dpr.tracking_method,'OTHER') = 'ALLOCATE' AND
4003 NVL(dpr_in.deprn_override_flag, fa_std_types.FA_NO_OVERRIDE)
4004 <> fa_std_types.FA_OVERRIDE_RECURSIVE THEN
4005
4006 -- Check if subtract ytd flag is enabled or not
4007 IF NVL(p_subtract_ytd_flag,'N') = 'Y' THEN
4008
4009 IF (fyctr = dpr.y_begin) THEN
4010 p_deprn_amount := dpr_in.ytd_deprn + perd_deprn_exp;
4011
4012 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4013 p_bonus_amount := dpr.bonus_ytd_deprn + perd_bonus_deprn_amount;
4014 END IF;
4015
4016 ELSE
4017 p_deprn_amount := NVL(year_deprn_exp,0) + perd_deprn_exp;
4018
4019 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4020 p_bonus_amount := year_bonus_deprn_amount + perd_bonus_deprn_amount;
4021 END IF;
4022
4023 END IF;
4024
4025 ELSE
4026 p_deprn_amount := perd_deprn_exp;
4027
4028 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4029 p_bonus_amount := perd_bonus_deprn_amount;
4030 END IF;
4031
4032 END IF; -- nvl(p_subtract_ytd_flag,'N') = 'Y' then
4033
4034 -- Set Mode following used_by_adjustment flag
4035 IF dpr.used_by_adjustment = TRUE THEN
4036 h_mode := 'ADJUSTMENT';
4037 ELSE
4038 h_mode := NULL;
4039 END IF;
4040
4041 IF (p_log_level_rec.statement_level) THEN
4042 fa_debug_pkg.ADD('faxcde', 'fadpdp(8*********): perd_deprn_exp', perd_deprn_exp);
4043 fa_debug_pkg.ADD('faxcde', 'perd_bonus_deprn_amount', perd_bonus_deprn_amount, p_log_level_rec => p_log_level_rec);
4044 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec => p_log_level_rec);
4045 fa_debug_pkg.ADD('faxcde', 'adj_rec_cost', adj_rec_cost, p_log_level_rec => p_log_level_rec);
4046 fa_debug_pkg.ADD('faxcde', 'perd_prod', perd_prod, p_log_level_rec => p_log_level_rec);
4047 fa_debug_pkg.ADD('faxcde', 'year_prod', year_prod, p_log_level_rec => p_log_level_rec);
4048 END IF;
4049
4050 -- Call FATRKM to call track member function
4051 IF NOT FATRKM (p_dpr => dpr,
4052 p_perd_deprn_exp => p_deprn_amount,
4053 p_perd_bonus_deprn_amount => p_bonus_amount,
4054 p_perd_ctr => perd_ctr,
4055 p_fyctr => fyctr,
4056 p_loop_end_year => dpr.y_end,
4057 p_loop_end_period => dpr.p_cl_end,
4058 p_exclude_salvage_value_flag => excl_sal_val_flag,
4059 p_deprn_basis_rule => deprn_basis_rule,
4060 p_deprn_override_flag => deprn_override_flag,
4061 p_subtract_ytd_flag => p_subtract_ytd_flag,
4062 p_life_complete_flag => dpr_out.life_comp_flag,
4063 p_fully_reserved_flag => dpr_out.full_rsv_flag,
4064 p_year_deprn_exp => year_deprn_exp,
4065 p_recoverable_cost => dpr.rec_cost,
4066 p_adj_rec_cost => adj_rec_cost,
4067 p_current_deprn_reserve => cur_deprn_rsv,
4068 p_nbv_threshold => nbv_frac_thresh,
4069 p_nbv_thresh_amount => nbv_amt_thresh,
4070 p_rec_cost_abs_value => rec_cost_absval,
4071 p_mode => h_mode,
4072 x_new_perd_exp => x_new_perd_exp,
4073 x_new_perd_bonus_deprn_amount => x_new_perd_bonus_deprn_amount,
4074 x_life_complete_flag => x_life_complete_flag,
4075 x_fully_reserved_flag => x_fully_reserved_flag,
4076 p_log_level_rec => p_log_level_rec) THEN
4077 RETURN(FALSE);
4078 ELSE
4079 perd_deprn_exp := x_new_perd_exp;
4080 perd_bonus_deprn_amount := x_new_perd_bonus_deprn_amount;
4081 dpr_out.life_comp_flag := x_life_complete_flag;
4082 dpr_out.full_rsv_flag := x_fully_reserved_flag;
4083 IF (p_log_level_rec.statement_level) THEN
4084 fa_debug_pkg.ADD('faxcde', 'fadpdp(9*********): perd_deprn_exp', perd_deprn_exp);
4085 fa_debug_pkg.ADD('faxcde', 'perd_bonus_deprn_amount', perd_bonus_deprn_amount, p_log_level_rec => p_log_level_rec);
4086 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec => p_log_level_rec);
4087 fa_debug_pkg.ADD('faxcde', 'adj_rec_cost', adj_rec_cost, p_log_level_rec => p_log_level_rec);
4088 fa_debug_pkg.ADD('faxcde', 'dpr_out.life_comp_flag', dpr_out.life_comp_flag, p_log_level_rec => p_log_level_rec);
4089 fa_debug_pkg.ADD('faxcde', 'dpr_out.full_rsv_flag', dpr_out.full_rsv_flag, p_log_level_rec => p_log_level_rec);
4090 END IF;
4091 END IF; -- not FATRKM (p_dpr => dpr,
4092
4093 END IF; -- Tracking_Method = 'ALLOCATE'?
4094
4095 year_deprn_exp := NVL(year_deprn_exp,0) + perd_deprn_exp;
4096 ytd_deprn_sum := ytd_deprn_sum + perd_deprn_exp;
4097 year_prod := year_prod + perd_prod ;
4098
4099 IF (p_log_level_rec.statement_level) THEN
4100 fa_debug_pkg.ADD('faxcde', 'fadpdp(8888*********): perd_deprn_exp', perd_deprn_exp);
4101 fa_debug_pkg.ADD('faxcde', 'perd_bonus_deprn_amount', perd_bonus_deprn_amount, p_log_level_rec => p_log_level_rec);
4102 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec => p_log_level_rec);
4103 fa_debug_pkg.ADD('faxcde', 'adj_rec_cost', adj_rec_cost, p_log_level_rec => p_log_level_rec);
4104 fa_debug_pkg.ADD('faxcde', 'perd_prod', perd_prod, p_log_level_rec => p_log_level_rec);
4105 fa_debug_pkg.ADD('faxcde', 'year_prod', year_prod, p_log_level_rec => p_log_level_rec);
4106 END IF;
4107 -- bonus: investigate how perd_bonus_deprn_amount can be calculated earlier
4108 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4109 year_bonus_deprn_amount := year_bonus_deprn_amount + perd_bonus_deprn_amount;
4110 ytd_bonus_deprn_sum := ytd_bonus_deprn_sum + perd_bonus_deprn_amount;
4111 END IF;
4112
4113 --
4114 -- Debug
4115 --
4116 IF (p_log_level_rec.statement_level) THEN
4117 fa_debug_pkg.ADD('faxcde', 'fadpdp(8): perd_deprn_exp', perd_deprn_exp);
4118 fa_debug_pkg.ADD('faxcde', 'perd_bonus_deprn_amount', perd_bonus_deprn_amount, p_log_level_rec => p_log_level_rec);
4119 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec => p_log_level_rec);
4120 fa_debug_pkg.ADD('faxcde', 'adj_rec_cost', adj_rec_cost, p_log_level_rec => p_log_level_rec);
4121 fa_debug_pkg.ADD('faxcde', 'perd_prod', perd_prod, p_log_level_rec => p_log_level_rec);
4122 fa_debug_pkg.ADD('faxcde', 'year_prod', year_prod, p_log_level_rec => p_log_level_rec);
4123 END IF;
4124
4125 -- bonus: perd_bonus_deprn_amount will now go into dpr_arr struct.
4126 -- bonus_value added to dpr_arr.
4127 dpr_arr(dpr_arr_ctr).value := perd_deprn_exp;
4128 dpr_arr(dpr_arr_ctr).bonus_value := perd_bonus_deprn_amount;
4129 dpr_arr(dpr_arr_ctr).period_num := perd_ctr;
4130 dpr_arr(dpr_arr_ctr).fiscal_year := fyctr;
4131
4132 -- Manual Override
4133 IF deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE AND NOT (deprn_projecting_flag) THEN
4134 dpr_out.deprn_override_flag:= deprn_override_flag;
4135 END IF;
4136 -- End of Manual Override
4137
4138 ----------------------------------------------
4139 -- Call Depreciable Basis Rule
4140 -- for depreciation
4141 ----------------------------------------------
4142 IF perd_ctr = perds_per_yr_dcal THEN
4143 h_eofy_flag :='Y';
4144 ELSE
4145 h_eofy_flag :='N';
4146 END IF;
4147
4148 -- Set deprn reserve for depreciable basis rule function
4149 cdb_deprn_rsv := NVL(cur_deprn_rsv,0)+ NVL(year_deprn_exp,0);
4150 cdb_bonus_deprn_rsv := NVL(cur_bonus_deprn_rsv,0) +
4151 NVL(year_bonus_deprn_amount,0);
4152
4153 --
4154 -- if excl_sal_val_flag='YES' then
4155 -- reduce salvage_value from adjusted cost
4156 --
4157 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
4158 cur_adj_cost := cur_adj_cost - dpr.salvage_value;
4159 END IF;
4160
4161 IF (p_log_level_rec.statement_level) THEN
4162 fa_debug_pkg.ADD('faxcde','deprn_period_dcal_begin' , deprn_period_dcal_begin, p_log_level_rec => p_log_level_rec);
4163 fa_debug_pkg.ADD('faxcde','perd_ctr' , perd_ctr, p_log_level_rec => p_log_level_rec);
4164 fa_debug_pkg.ADD('faxcde','cdb_deprn_rsv111111111' , cdb_deprn_rsv, p_log_level_rec => p_log_level_rec);
4165 END IF;
4166
4167 -- call deprn basis rule logic.
4168 -- if perd_deprn_exp <> 0 then
4169
4170 IF (fyctr = deprn_year_dcal_begin AND perd_ctr >= deprn_period_dcal_begin) OR
4171 fyctr > deprn_year_dcal_begin THEN
4172
4173 -- BUG# 3769466
4174 -- avoid deprn basis call when not needed
4175
4176 --Bug#8230037 - Addition condition on deprn_basis_rule_id to check for non zero value.
4177 -- - as cache is returning zero if deprn_basis_rule_id is null
4178 IF (nbv_deprn_basis_flag OR
4179 (fa_cache_pkg.fazccmt_record.deprn_basis_rule_id IS NOT NULL AND
4180 fa_cache_pkg.fazccmt_record.deprn_basis_rule_id <> 0 AND
4181 NOT (rate_source_rule = 'CALCULATED' AND
4182 cost_deprn_basis_flag AND
4183 NVL(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') ='N' AND
4184 NVL(p_subtract_ytd_flag,'N') = 'N' AND
4185 NVL(fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag, 'N') = 'N'))) THEN
4186
4187 -- Japan Tax Reform Project
4188 IF NVL(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag, 'NO') = 'YES' THEN
4189
4190 IF (p_log_level_rec.statement_level) THEN
4191 fa_debug_pkg.ADD('faxcde', '+++ JAPAN ', 'in guarantee rate call deprn basis', p_log_level_rec => p_log_level_rec);
4192 END IF;
4193
4194 h_adjusted_cost := NVL(cur_adj_cost,0);
4195
4196 ELSE
4197 h_adjusted_cost := NULL;
4198 END IF;
4199 -- Japan Tax Reform Project End
4200
4201 IF (NOT FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
4202 p_event_type => 'AFTER_DEPRN',
4203 p_dpr => dpr,
4204 p_fiscal_year => fyctr,
4205 p_period_num => perd_ctr,
4206 p_period_counter => fyctr*perds_per_yr_dcal+perd_ctr,
4207 p_adjusted_cost => h_adjusted_cost, -- Japan Tax Reforms Project
4208 p_current_total_rsv => cdb_deprn_rsv,
4209 p_current_rsv => cdb_deprn_rsv
4210 - NVL(cdb_bonus_deprn_rsv,0),
4211 p_current_total_ytd => ytd_deprn_sum,
4212 p_eofy_reserve => cur_eofy_reserve,
4213 p_used_by_adjustment => h_mode,
4214 p_eofy_flag => h_eofy_flag,
4215 px_new_adjusted_cost => cur_adj_cost,
4216 px_new_raf => dpr.rate_adj_factor,
4217 px_new_formula_factor => dpr.formula_factor,
4218 x_annual_deprn_rounding_flag => dpr.deprn_rounding_flag,
4219 p_log_level_rec => p_log_level_rec)) THEN
4220 fa_srvr_msg.add_message (calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
4221 RETURN (FALSE);
4222 END IF;
4223 ELSE
4224 IF (p_log_level_rec.statement_level) THEN
4225 fa_debug_pkg.add ('faxcde', 'skipping', 'deprn basis call', p_log_level_rec);
4226 END IF;
4227 END IF;
4228 END IF; -- (fyctr = deprn_year_dcal_begin and
4229
4230 IF (p_log_level_rec.statement_level) THEN
4231 fa_debug_pkg.ADD('faxcde','l_dpr_in.deprn_rounding_flag(after CALL_DEPRN_BASIS)',
4232 dpr.deprn_rounding_flag, p_log_level_rec);
4233 END IF;
4234
4235 --
4236 -- if excl_sal_val_flag='YES' then
4237 -- add salvage_value back to adjusted cost
4238 --
4239 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
4240 cur_adj_cost := cur_adj_cost + dpr.salvage_value;
4241 END IF;
4242
4243 IF (p_log_level_rec.statement_level) THEN
4244 fa_debug_pkg.ADD('faxcde','l_dpr_in.deprn_rounding_flag(after CALL_DEPRN_BASIS)',
4245 cur_adj_cost, p_log_level_rec);
4246 fa_debug_pkg.ADD('faxcde','l_dpr_in.deprn_rounding_flag(after CALL_DEPRN_BASIS)',
4247 dpr.salvage_value, p_log_level_rec);
4248 END IF;
4249
4250 dpr_arr_ctr := dpr_arr_ctr + 1;
4251
4252 IF (l_ind <> 0) THEN
4253 --
4254 -- Maintain Books Summary Table
4255 --
4256 IF (p_log_level_rec.statement_level) THEN
4257 fa_debug_pkg.ADD('faxcde','Maintain Books Summary Table',
4258 TO_CHAR(l_ind)||':'||TO_CHAR(fa_amort_pvt.t_deprn_amount.COUNT));
4259 END IF;
4260
4261 IF (l_ind <= fa_amort_pvt.t_deprn_amount.COUNT) THEN
4262
4263 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
4264 fa_amort_pvt.t_adjusted_cost(l_ind + 1) := cur_adj_cost - dpr.salvage_value;
4265 ELSE
4266 fa_amort_pvt.t_adjusted_cost(l_ind + 1) := cur_adj_cost;
4267 END IF;
4268
4269 fa_amort_pvt.t_adjusted_capacity(l_ind + 1) := dpr.adj_capacity; --Bug7487450
4270
4271 fa_amort_pvt.t_formula_factor(l_ind + 1) := dpr.formula_factor;
4272 fa_amort_pvt.t_deprn_amount(l_ind) :=
4273 perd_deprn_exp +
4274 fa_amort_pvt.t_expense_adjustment_amount(l_ind);
4275 fa_amort_pvt.t_bonus_deprn_amount(l_ind) := perd_bonus_deprn_amount;
4276 fa_amort_pvt.t_production(l_ind) := nvl(perd_prod, 0); --Bug7487450
4277
4278 IF (l_ind = 1) THEN
4279 fa_amort_pvt.t_deprn_reserve(l_ind) :=
4280 fa_amort_pvt.t_deprn_amount(l_ind) +
4281 fa_amort_pvt.t_reserve_adjustment_amount(l_ind);
4282 fa_amort_pvt.t_bonus_deprn_reserve(l_ind) := perd_bonus_deprn_amount;
4283 fa_amort_pvt.t_impairment_reserve(l_ind) :=
4284 fa_amort_pvt.t_impairment_amount(l_ind);
4285 fa_amort_pvt.t_ltd_production(l_ind) := fa_amort_pvt.t_production(l_ind); --Bug7487450
4286 ELSE
4287 fa_amort_pvt.t_deprn_reserve(l_ind) :=
4288 fa_amort_pvt.t_deprn_reserve(l_ind - 1) +
4289 fa_amort_pvt.t_deprn_amount(l_ind) +
4290 fa_amort_pvt.t_reserve_adjustment_amount(l_ind);
4291 fa_amort_pvt.t_bonus_deprn_reserve(l_ind) :=
4292 fa_amort_pvt.t_bonus_deprn_reserve(l_ind- 1) +
4293 perd_bonus_deprn_amount;
4294 fa_amort_pvt.t_impairment_reserve(l_ind) :=
4295 fa_amort_pvt.t_impairment_reserve(l_ind - 1) +
4296 fa_amort_pvt.t_impairment_amount(l_ind);
4297 fa_amort_pvt.t_ltd_production(l_ind) := fa_amort_pvt.t_ltd_production(l_ind - 1 ) +
4298 fa_amort_pvt.t_production(l_ind); --Bug7487450
4299 END IF;
4300
4301 IF dpr.bonus_rule IS NULL THEN
4302 fa_amort_pvt.t_bonus_rate(l_ind) := NULL;
4303 ELSE
4304 fa_amort_pvt.t_bonus_rate(l_ind) := dpr_out.bonus_rate_used;
4305 END IF;
4306
4307 IF (fa_amort_pvt.t_period_num(l_ind) = 1) THEN
4308 fa_amort_pvt.t_ytd_deprn(l_ind) := fa_amort_pvt.t_deprn_amount(l_ind);
4309 fa_amort_pvt.t_bonus_ytd_deprn(l_ind) := perd_bonus_deprn_amount;
4310 fa_amort_pvt.t_ytd_impairment(l_ind) :=
4311 fa_amort_pvt.t_impairment_amount(l_ind);
4312 fa_amort_pvt.t_ytd_production(l_ind) := fa_amort_pvt.t_production(l_ind); --Bug7487450
4313
4314 IF (l_ind = 1) THEN
4315 fa_amort_pvt.t_eofy_reserve(l_ind) := 0;
4316 fa_amort_pvt.t_eofy_adj_cost(l_ind) := 0;
4317 fa_amort_pvt.t_eofy_formula_factor(l_ind) := 1;
4318 ELSE
4319 fa_amort_pvt.t_eofy_reserve(l_ind) :=
4320 fa_amort_pvt.t_deprn_reserve(l_ind - 1);
4321 fa_amort_pvt.t_eofy_adj_cost(l_ind) :=
4322 fa_amort_pvt.t_adjusted_cost(l_ind - 1);
4323 fa_amort_pvt.t_eofy_formula_factor(l_ind) :=
4324 fa_amort_pvt.t_formula_factor(l_ind - 1);
4325 END IF;
4326
4327 ELSE
4328
4329 IF (l_ind = 1) THEN
4330 fa_amort_pvt.t_ytd_deprn(l_ind) := fa_amort_pvt.t_deprn_amount(l_ind);
4331 fa_amort_pvt.t_bonus_ytd_deprn(l_ind) := perd_bonus_deprn_amount;
4332 fa_amort_pvt.t_eofy_reserve(l_ind) := 0;
4333 fa_amort_pvt.t_eofy_adj_cost(l_ind) := 0;
4334 fa_amort_pvt.t_eofy_formula_factor(l_ind) := 1;
4335 fa_amort_pvt.t_ytd_impairment(l_ind) :=
4336 fa_amort_pvt.t_impairment_amount(l_ind);
4337 fa_amort_pvt.t_ytd_production(l_ind) := fa_amort_pvt.t_production(l_ind); --Bug7487450
4338 ELSE
4339 fa_amort_pvt.t_ytd_deprn(l_ind) :=
4340 fa_amort_pvt.t_ytd_deprn(l_ind - 1) +
4341 fa_amort_pvt.t_deprn_amount(l_ind);
4342 fa_amort_pvt.t_bonus_ytd_deprn(l_ind) :=
4343 fa_amort_pvt.t_bonus_ytd_deprn(l_ind - 1) +
4344 perd_bonus_deprn_amount;
4345 fa_amort_pvt.t_eofy_reserve(l_ind) :=
4346 fa_amort_pvt.t_eofy_reserve(l_ind - 1);
4347 fa_amort_pvt.t_eofy_adj_cost(l_ind) :=
4348 fa_amort_pvt.t_eofy_adj_cost(l_ind - 1);
4349 fa_amort_pvt.t_eofy_formula_factor(l_ind) :=
4350 fa_amort_pvt.t_eofy_formula_factor(l_ind - 1);
4351 fa_amort_pvt.t_ytd_impairment(l_ind) :=
4352 fa_amort_pvt.t_ytd_impairment(l_ind - 1) +
4353 fa_amort_pvt.t_impairment_amount(l_ind);
4354 fa_amort_pvt.t_ytd_production(l_ind) :=
4355 fa_amort_pvt.t_ytd_production(l_ind - 1) +
4356 fa_amort_pvt.t_production(l_ind); --Bug7487450
4357 END IF;
4358
4359 END IF; -- (fa_amort_pvt.t_period_num(l_ind) = 1) then
4360
4361 IF (l_ind = 1) THEN
4362 fa_amort_pvt.t_eop_adj_cost(l_ind) := 0;
4363 ELSE
4364 fa_amort_pvt.t_eop_adj_cost(l_ind) :=
4365 fa_amort_pvt.t_adjusted_cost(l_ind - 1);
4366 END IF;
4367
4368 fa_amort_pvt.t_eop_formula_factor(l_ind) :=
4369 fa_amort_pvt.t_formula_factor(l_ind);
4370
4371 dpr_out.new_impairment_rsv := fa_amort_pvt.t_impairment_reserve(l_ind);
4372
4373 IF (p_log_level_rec.statement_level) THEN
4374 fa_debug_pkg.ADD('faxcde','period_counter', fa_amort_pvt.t_period_counter(l_ind));
4375 fa_debug_pkg.ADD('faxcde','deprn_amount', fa_amort_pvt.t_deprn_amount(l_ind));
4376 fa_debug_pkg.ADD('faxcde','ytd_deprn', fa_amort_pvt.t_ytd_deprn(l_ind));
4377 fa_debug_pkg.ADD('faxcde','deprn_reserve', fa_amort_pvt.t_deprn_reserve(l_ind));
4378 fa_debug_pkg.ADD('faxcde','bonus_deprn_amount', fa_amort_pvt.t_bonus_deprn_amount(l_ind));
4379 fa_debug_pkg.ADD('faxcde','bonus_ytd_deprn', fa_amort_pvt.t_bonus_ytd_deprn(l_ind));
4380 fa_debug_pkg.ADD('faxcde','bonus_deprn_reserve', fa_amort_pvt.t_bonus_deprn_reserve(l_ind));
4381 fa_debug_pkg.ADD('faxcde','eofy_reserve', fa_amort_pvt.t_eofy_reserve(l_ind));
4382 fa_debug_pkg.ADD('faxcde','eofy_adj_cost', fa_amort_pvt.t_eofy_adj_cost(l_ind));
4383 fa_debug_pkg.ADD('faxcde','eofy_formula_factor', fa_amort_pvt.t_eofy_formula_factor(l_ind));
4384 fa_debug_pkg.ADD('faxcde','eop_adj_cost', fa_amort_pvt.t_eop_adj_cost(l_ind));
4385 fa_debug_pkg.ADD('faxcde','eop_formula_factor', fa_amort_pvt.t_eop_formula_factor(l_ind));
4386 fa_debug_pkg.ADD('faxcde','imp_rsv', fa_amort_pvt.t_impairment_reserve(l_ind));
4387 fa_debug_pkg.ADD('faxcde','adjusted_capacity', fa_amort_pvt.t_adjusted_capacity(l_ind));
4388 fa_debug_pkg.ADD('faxcde','production', fa_amort_pvt.t_production(l_ind));
4389 fa_debug_pkg.ADD('faxcde','ytd_production', fa_amort_pvt.t_ytd_production(l_ind));
4390 fa_debug_pkg.ADD('faxcde','ltd_production', fa_amort_pvt.t_ltd_production(l_ind));
4391 END IF;
4392
4393
4394 --
4395 -- Revaluation related amounts needs to be corrected
4396 -- fa_amort_pvt.t_reval_amortization(l_ind) :=
4397 -- fa_amort_pvt.t_ytd_reval_deprn_expense(l_ind) :=
4398 -- fa_amort_pvt.t_reval_reserve(l_ind) :=
4399 -- fa_amort_pvt.t_remaining_life1(l_ind) :=
4400 -- fa_amort_pvt.t_remaining_life2(l_ind) :=
4401
4402 l_ind := l_ind + 1;
4403 END IF; -- (l_ind <= fa_amort_pvt.t_deprn_amount.COUNT) then
4404
4405 END IF; -- (l_ind <> 0))
4406
4407 IF (p_log_level_rec.statement_level) THEN
4408 fa_debug_pkg.ADD(l_calling_fn, 'p_ind', p_ind, p_log_level_rec => p_log_level_rec);
4409 fa_debug_pkg.ADD(l_calling_fn, 'dpr_out.full_rsv_flag', dpr_out.full_rsv_flag, p_log_level_rec => p_log_level_rec);
4410 fa_debug_pkg.ADD(l_calling_fn, 'adj_rec_cost', adj_rec_cost, p_log_level_rec => p_log_level_rec);
4411 fa_debug_pkg.ADD(l_calling_fn, 'cur_deprn_rsv', cur_deprn_rsv, p_log_level_rec => p_log_level_rec);
4412 fa_debug_pkg.ADD(l_calling_fn, 'year_deprn_exp', year_deprn_exp, p_log_level_rec => p_log_level_rec);
4413 END IF;
4414
4415 --
4416 -- Stop and exit period loop if
4417 -- 1. This is not group related trx
4418 -- 2. method is NBV base
4419 -- 3. reserve will be equal to limit
4420 -- 4. reserve before deprn is more than the limit
4421 -- 5. This is not projection.
4422 --
4423 IF (p_ind = 0) AND
4424 (nbv_deprn_basis_flag) AND
4425 (dpr_out.full_rsv_flag) AND
4426 (adj_rec_cost = (cur_deprn_rsv + NVL(year_deprn_exp,0))) AND
4427 ((adj_rec_cost > 0 AND adj_rec_cost <= cur_deprn_rsv) OR
4428 (adj_rec_cost < 0 AND adj_rec_cost >= cur_deprn_rsv)) AND
4429 (NOT(deprn_projecting_flag)) THEN
4430
4431 IF (p_log_level_rec.statement_level) THEN
4432 fa_debug_pkg.ADD(l_calling_fn, 'Exiting PERIOD LOOP', '.', p_log_level_rec => p_log_level_rec);
4433 fa_debug_pkg.ADD(l_calling_fn, 'Fully reserved during recalculation',
4434 TO_CHAR(adj_rec_cost)||':'||TO_CHAR(cur_deprn_rsv + year_deprn_exp));
4435 END IF;
4436
4437 EXIT;
4438
4439 END IF; -- (p_ind = 0) and
4440
4441 END LOOP; -- End of period loop
4442
4443 --
4444 -- Round amount calculated
4445 h_dummy_bool := fa_utils_pkg.faxrnd (year_deprn_exp, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec);
4446
4447 -- bonus
4448 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4449 h_dummy_bool := fa_utils_pkg.faxrnd (year_bonus_deprn_amount, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec);
4450 END IF;
4451
4452 IF cur_adj_cost = 0 THEN
4453 rab_rc_ratio := 0;
4454 ELSE
4455 rab_rc_ratio := cur_reval_amo_basis / cur_adj_cost;
4456 END IF;
4457
4458 year_reval_exp := NVL(year_deprn_exp,0) * rab_rc_ratio;
4459 h_dummy_bool := fa_utils_pkg.faxrnd (year_reval_exp, dpr.book, dpr.set_of_books_id, p_log_level_rec => p_log_level_rec);
4460
4461 IF (amo_reval_rsv_flag) THEN
4462 year_reval_amo := year_reval_exp;
4463 ELSE
4464 year_reval_amo := 0;
4465 END IF;
4466 deprn_exp_sum := deprn_exp_sum + NVL(year_deprn_exp,0);
4467 cur_deprn_rsv := cur_deprn_rsv + NVL(year_deprn_exp,0);
4468
4469 -- bonus
4470 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4471 bonus_deprn_exp_sum := bonus_deprn_exp_sum + year_bonus_deprn_amount;
4472 cur_bonus_deprn_rsv := cur_bonus_deprn_rsv + year_bonus_deprn_amount;
4473 END IF;
4474
4475 reval_exp_sum := reval_exp_sum + year_reval_exp;
4476 reval_amo_sum := reval_amo_sum + year_reval_amo;
4477 cur_reval_rsv := cur_reval_rsv - year_reval_amo;
4478 prod_sum := prod_sum + year_prod;
4479 cur_ltd_prod := cur_ltd_prod + year_prod;
4480
4481 --
4482 -- Debug
4483 --
4484 IF (p_log_level_rec.statement_level) THEN
4485 fa_debug_pkg.ADD('faxcde', 'fadpdp(9): deprn_exp_sum', deprn_exp_sum, p_log_level_rec);
4486 fa_debug_pkg.ADD('faxcde', 'cur_deprn_rsv', cur_deprn_rsv, p_log_level_rec);
4487 fa_debug_pkg.ADD('faxcde', 'reval_exp_sum', reval_exp_sum, p_log_level_rec);
4488 fa_debug_pkg.ADD('faxcde', 'reval_amo_sum', reval_amo_sum, p_log_level_rec);
4489 fa_debug_pkg.ADD('faxcde', 'cur_reval_rsv', cur_reval_rsv, p_log_level_rec);
4490 fa_debug_pkg.ADD('faxcde', 'prod_sum', prod_sum, p_log_level_rec);
4491 fa_debug_pkg.ADD('faxcde', 'cur_ltd_prod', cur_ltd_prod, p_log_level_rec);
4492 fa_debug_pkg.ADD('faxcde', 'year_deprn_exp', year_deprn_exp, p_log_level_rec);
4493 fa_debug_pkg.ADD('faxcde', 'ytd_deprn_sum', ytd_deprn_sum, p_log_level_rec);
4494 END IF;
4495
4496 IF (deprn_end_perd = perds_per_yr_dcal) THEN
4497
4498 -- bonus? We need to investigate how to treat prior_bonus_fy_exp_sum
4499 --
4500 -- prior_fy_exp_sum needs to include dpr.ytd_deprn to make sure
4501 -- subtraction method to work correctly for subsequent years
4502 --
4503 IF (fyctr = dpr.y_begin) THEN
4504 --prior_fy_exp_sum := prior_fy_exp_sum + NVL(year_deprn_exp,0) + dpr.ytd_deprn; /* Removed for bug 8677907 */
4505 prior_fy_bonus_exp_sum := prior_fy_bonus_exp_sum + year_bonus_deprn_amount + dpr.bonus_ytd_deprn;
4506 ELSE
4507 prior_fy_exp_sum := prior_fy_exp_sum + NVL(year_deprn_exp,0);
4508 prior_fy_bonus_exp_sum := prior_fy_bonus_exp_sum + year_bonus_deprn_amount;
4509 END IF;
4510
4511 END IF; -- (deprn_end_perd = perds_per_yr_dcal) then
4512
4513 --
4514 -- If necessary, recompute the current adjusted cost based on
4515 -- the new depreciation reserve
4516 -- Also, recompute the current revaluation amortization basis
4517 -- to be the new revaluation reserve
4518 --
4519 IF nbv_deprn_basis_flag AND deprn_end_perd = perds_per_yr_dcal THEN
4520 --
4521 -- Instead of using adj_rec_cost, still use rec_cost to
4522 -- calculate asset's nbv after normal life completed
4523 --
4524 cur_reval_amo_basis := cur_reval_rsv;
4525
4526 --
4527 -- Debug
4528 --
4529 IF (p_log_level_rec.statement_level) THEN
4530 fa_debug_pkg.ADD('faxcde', 'cur_reval_amo_basis', cur_reval_amo_basis, p_log_level_rec => p_log_level_rec);
4531 END IF;
4532
4533 END IF; -- nbv_deprn_basis_flag and deprn_end_perd = perds_per_yr_dcal then
4534
4535 --
4536 -- Populate YTD deprn as of end of calculation.
4537 --
4538 IF (fyctr = dpr.y_begin) THEN
4539 dpr_out.new_ytd_deprn := dpr_out.new_ytd_deprn + NVL(year_deprn_exp,0);
4540 ELSE
4541 dpr_out.new_ytd_deprn := NVL(year_deprn_exp,0);
4542 END IF;
4543
4544 --
4545 -- For second year during catchup, rounding flag should be set
4546 -- to null.
4547 dpr.deprn_rounding_flag := NULL;
4548
4549 -- Set eofy amount
4550 IF deprn_end_perd = perds_per_yr_dcal THEN
4551 cur_eofy_reserve := cur_deprn_rsv;
4552 END IF;
4553
4554 --
4555 -- Stop and exit period loop if
4556 -- 1. This is not group related trx
4557 -- 2. method is NBV base
4558 -- 3. reserve is equal to limit
4559 -- 4. reserve before deprn is more than the limit
4560 -- 5. This is not projection.
4561 --
4562 IF (p_ind = 0) AND
4563 (nbv_deprn_basis_flag) AND
4564 (dpr_out.full_rsv_flag) AND
4565 (adj_rec_cost = (cur_deprn_rsv)) AND
4566 ((adj_rec_cost > 0 AND adj_rec_cost <= cur_deprn_rsv - NVL(year_deprn_exp,0)) OR
4567 (adj_rec_cost < 0 AND adj_rec_cost >= cur_deprn_rsv - NVL(year_deprn_exp,0))) AND
4568 (NOT(deprn_projecting_flag)) THEN
4569 fa_debug_pkg.ADD(l_calling_fn, 'EXITING YEAR LOOP', '.', p_log_level_rec => p_log_level_rec);
4570 fa_debug_pkg.ADD(l_calling_fn, 'Fully reserved during recalculation',
4571 TO_CHAR(adj_rec_cost)||':'||TO_CHAR(cur_deprn_rsv + year_deprn_exp));
4572 cur_adj_cost := 0;
4573 EXIT;
4574 END IF;
4575
4576 END LOOP; -- End fiscal year loop --
4577
4578 --
4579 -- We increment fy by 1 to emulate the C lang for loop behavior
4580 -- where the loop counter is incremented before the loop condition
4581 -- is tested. PL/SQL doesnt.
4582 --
4583 fy_ctr := fy_ctr + 1;
4584
4585 -- bug 894937 and 1330860
4586 -- '+' changed to '-'
4587 IF (nbv_deprn_basis_flag AND excl_sal_val_flag) THEN
4588 cur_adj_cost := cur_adj_cost - dpr.salvage_value;
4589 END IF;
4590
4591 --
4592 -- Bug4037112: Need to return reserve that includes
4593 -- Reserve adjustments amount which can only
4594 -- find in fa_amort_pvt pl/sql table.
4595 --
4596 IF (l_ind<>0) AND
4597 (l_ind <= fa_amort_pvt.t_deprn_amount.COUNT) THEN
4598 dpr_out.new_deprn_rsv := fa_amort_pvt.t_deprn_reserve(l_ind-1)+
4599 fa_amort_pvt.t_reserve_adjustment_amount(l_ind) +
4600 fa_amort_pvt.t_expense_adjustment_amount(l_ind);
4601 ELSE
4602 dpr_out.new_deprn_rsv := cur_deprn_rsv;
4603 END IF;
4604
4605 IF NVL(dpr.bonus_rule, 'NONE') <> 'NONE' THEN
4606 dpr_out.new_bonus_deprn_rsv := cur_bonus_deprn_rsv;
4607 ELSE
4608 dpr_out.new_bonus_deprn_rsv := 0;
4609 END IF;
4610
4611 dpr_out.new_adj_cost := cur_adj_cost;
4612 dpr_out.new_reval_rsv := cur_reval_rsv;
4613 dpr_out.new_reval_amo_basis := cur_reval_amo_basis;
4614 dpr_out.new_ltd_prod := cur_ltd_prod;
4615 dpr_out.deprn_exp := deprn_exp_sum;
4616 -- bonus? necessary? if so we need to add to dpr_out_struct.
4617 -- dpr_out.bonus_deprn_amount := bonus_deprn_exp_sum;
4618 dpr_out.bonus_deprn_exp := bonus_deprn_exp_sum; -- YYOON
4619 dpr_out.reval_exp := reval_exp_sum;
4620 dpr_out.reval_amo := reval_amo_sum;
4621 dpr_out.prod := prod_sum;
4622 dpr_out.ann_adj_reval_exp := dpr_out.ann_adj_exp * rab_rc_ratio;
4623 h_dummy_bool := fa_utils_pkg.faxrnd(dpr_out.ann_adj_reval_exp, dpr.book, dpr.set_of_books_id, p_log_level_rec);
4624 dpr_out.new_eofy_reserve := cur_eofy_reserve;
4625
4626 IF (p_log_level_rec.statement_level) THEN
4627 fa_debug_pkg.ADD('faxcde', 'dpr_out.deprn_override_flag',dpr_out.deprn_override_flag, p_log_level_rec);
4628 END IF;
4629
4630 IF (amo_reval_rsv_flag) THEN
4631 dpr_out.ann_adj_reval_amo := dpr_out.ann_adj_reval_exp;
4632 ELSE
4633 dpr_out.ann_adj_reval_amo := 0;
4634 END IF;
4635
4636 -- old bonus code, where is -1 evaluated.
4637 -- Maybe: if prod_rate_src_flag or nvl(dpr.bonus_rule, 'NONE') = 'NONE' then
4638 IF NVL(dpr.bonus_rule, 'NONE') = 'NONE' THEN
4639 dpr_out.bonus_rate_used := -1;
4640 END IF;
4641
4642 -- if the period is the last period of current the fiscal year, or
4643 -- the year is greater than current fiscal year then reset deprn
4644 -- expense of all prior fiscal years to 0, otherwise increase
4645 -- prior_fy_exp by sum of deprn expense for all prior fiscal years
4646 -- of requested periods
4647 --
4648 IF (fy_ctr - 1 <= cur_fy) THEN
4649
4650 IF (deprn_end_perd = perds_per_yr_dcal AND fy_ctr = cur_fy) THEN
4651 dpr_out.new_prior_fy_exp := 0;
4652 dpr_out.new_prior_fy_bonus_exp := 0;
4653 ELSE
4654 dpr_out.new_prior_fy_exp := prior_fy_exp_sum + dpr.prior_fy_exp;
4655 dpr_out.new_prior_fy_bonus_exp := prior_fy_bonus_exp_sum + dpr.prior_fy_bonus_exp;
4656 END IF;
4657
4658 ELSE
4659 dpr_out.new_prior_fy_exp := 0;
4660 dpr_out.new_prior_fy_bonus_exp := 0;
4661 END IF;
4662
4663 --
4664 -- Debug
4665 --
4666 IF (p_log_level_rec.statement_level) THEN
4667 h_dummy_bool := fa_cde_pkg.faprdos(dpr_out, p_log_level_rec => p_log_level_rec);
4668 END IF;
4669
4670 RETURN (TRUE);
4671
4672 EXCEPTION
4673 WHEN OTHERS THEN
4674 fa_srvr_msg.add_sql_error (calling_fn => 'fa_cde_pkg.faxcde', p_log_level_rec => p_log_level_rec);
4675 RETURN (FALSE);
4676
4677 END FAXCDE;
4678
4679 FUNCTION faprds
4680 (
4681 X_dpr IN fa_std_types.dpr_struct
4682 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
4683 RETURN BOOLEAN IS
4684 BEGIN <<FAPRDS>>
4685
4686 fa_debug_pkg.ADD('faxcde','Contents of dpr_struct for asset_id',X_dpr.asset_id, p_log_level_rec => p_log_level_rec);
4687 fa_debug_pkg.ADD('faxcde','asset_num',X_dpr.asset_num, p_log_level_rec => p_log_level_rec);
4688 fa_debug_pkg.ADD('faxcde','book',X_dpr.book, p_log_level_rec => p_log_level_rec);
4689 fa_debug_pkg.ADD('faxcde','calendar_type',X_dpr.calendar_type, p_log_level_rec => p_log_level_rec);
4690 fa_debug_pkg.ADD('faxcde','ceil_name',X_dpr.ceil_name, p_log_level_rec => p_log_level_rec);
4691 fa_debug_pkg.ADD('faxcde','bonus_rule',X_dpr.bonus_rule, p_log_level_rec => p_log_level_rec);
4692 fa_debug_pkg.ADD('faxcde','method_code',X_dpr.method_code, p_log_level_rec => p_log_level_rec);
4693 fa_debug_pkg.ADD('faxcde','adj_cost',X_dpr.adj_cost, p_log_level_rec => p_log_level_rec);
4694 fa_debug_pkg.ADD('faxcde','rec_cost',X_dpr.rec_cost, p_log_level_rec => p_log_level_rec);
4695 fa_debug_pkg.ADD('faxcde','reval_amo_basis',X_dpr.reval_amo_basis, p_log_level_rec => p_log_level_rec);
4696 fa_debug_pkg.ADD('faxcde','deprn_rsv',X_dpr.deprn_rsv, p_log_level_rec => p_log_level_rec);
4697 fa_debug_pkg.ADD('faxcde','reval_rsv',X_dpr.reval_rsv, p_log_level_rec => p_log_level_rec);
4698 fa_debug_pkg.ADD('faxcde','adj_rate',X_dpr.adj_rate, p_log_level_rec => p_log_level_rec);
4699 fa_debug_pkg.ADD('faxcde','rate_adj_factor',X_dpr.rate_adj_factor, p_log_level_rec => p_log_level_rec);
4700 fa_debug_pkg.ADD('faxcde','capacity',X_dpr.capacity, p_log_level_rec => p_log_level_rec);
4701 fa_debug_pkg.ADD('faxcde','adj_capacity',X_dpr.adj_capacity, p_log_level_rec => p_log_level_rec);
4702 fa_debug_pkg.ADD('faxcde','ltd_prod',X_dpr.ltd_prod, p_log_level_rec => p_log_level_rec);
4703 fa_debug_pkg.ADD('faxcde','adj_rec_cost',X_dpr.adj_rec_cost, p_log_level_rec => p_log_level_rec);
4704 fa_debug_pkg.ADD('faxcde','salvage_value',X_dpr.salvage_value, p_log_level_rec => p_log_level_rec);
4705 fa_debug_pkg.ADD('faxcde','prior_fy_exp',X_dpr.prior_fy_exp, p_log_level_rec => p_log_level_rec);
4706 fa_debug_pkg.ADD('faxcde','ytd_deprn',X_dpr.ytd_deprn, p_log_level_rec => p_log_level_rec);
4707 fa_debug_pkg.ADD('faxcde','asset_id',X_dpr.asset_id, p_log_level_rec => p_log_level_rec);
4708 fa_debug_pkg.ADD('faxcde','jdate_in_service',X_dpr.jdate_in_service, p_log_level_rec => p_log_level_rec);
4709 fa_debug_pkg.ADD('faxcde','prorate_jdate',X_dpr.prorate_jdate, p_log_level_rec => p_log_level_rec);
4710 fa_debug_pkg.ADD('faxcde','deprn_start_jdate',X_dpr.deprn_start_jdate, p_log_level_rec => p_log_level_rec);
4711 fa_debug_pkg.ADD('faxcde','jdate_retired',X_dpr.jdate_retired, p_log_level_rec => p_log_level_rec);
4712 fa_debug_pkg.ADD('faxcde','ret_prorate_jdate',X_dpr.ret_prorate_jdate, p_log_level_rec => p_log_level_rec);
4713 fa_debug_pkg.ADD('faxcde','life',X_dpr.life, p_log_level_rec => p_log_level_rec);
4714 fa_debug_pkg.ADD('faxcde','COST111111',X_dpr.cost, p_log_level_rec => p_log_level_rec);
4715 fa_debug_pkg.ADD('faxcde','prorate_year_pcal_begin',X_dpr.y_begin, p_log_level_rec => p_log_level_rec);
4716 fa_debug_pkg.ADD('faxcde','y_end',X_dpr.y_end, p_log_level_rec => p_log_level_rec);
4717 fa_debug_pkg.ADD('faxcde','p_cl_begin',X_dpr.p_cl_begin, p_log_level_rec => p_log_level_rec);
4718 fa_debug_pkg.ADD('faxcde','p_cl_end',X_dpr.p_cl_end, p_log_level_rec => p_log_level_rec);
4719 fa_debug_pkg.ADD('faxcde','pc_life_end',X_dpr.pc_life_end, p_log_level_rec => p_log_level_rec);
4720 fa_debug_pkg.ADD('faxcde','mrc_sob_type_code',X_dpr.mrc_sob_type_code, p_log_level_rec =>
4721 p_log_level_rec);
4722 fa_debug_pkg.ADD('faxcde','set_of_books_id',X_dpr.set_of_books_id, p_log_level_rec =>
4723 p_log_level_rec);
4724
4725
4726 IF (X_dpr.rsv_known_flag) THEN
4727 fa_debug_pkg.ADD('faxcde','rsv_known_flag','TRUE', p_log_level_rec => p_log_level_rec);
4728 ELSE
4729 fa_debug_pkg.ADD('faxcde','rsv_known_flag','FALSE', p_log_level_rec => p_log_level_rec);
4730 END IF;
4731
4732 fa_debug_pkg.ADD('faxcde','deprn_rounding_flag',X_dpr.deprn_rounding_flag, p_log_level_rec => p_log_level_rec);
4733
4734 RETURN (TRUE);
4735
4736 EXCEPTION
4737 WHEN OTHERS THEN
4738 fa_srvr_msg.add_sql_error (calling_fn => 'fa_cde_pkg.faprds', p_log_level_rec => p_log_level_rec);
4739 RETURN (FALSE);
4740
4741 END FAPRDS;
4742
4743 FUNCTION faprdos (X_dpr IN fa_std_types.dpr_out_struct,
4744 p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
4745 RETURN BOOLEAN IS
4746
4747 BEGIN <<FAPRDOS>>
4748
4749 fa_debug_pkg.ADD('faxcde','new_deprn_rsv',X_dpr.new_deprn_rsv, p_log_level_rec => p_log_level_rec);
4750 fa_debug_pkg.ADD('faxcde','new_ytd_deprn',X_dpr.new_ytd_deprn, p_log_level_rec => p_log_level_rec);
4751 fa_debug_pkg.ADD('faxcde','new_adj_cost',X_dpr.new_adj_cost, p_log_level_rec => p_log_level_rec);
4752 fa_debug_pkg.ADD('faxcde','new_reval_rsv',X_dpr.new_reval_rsv, p_log_level_rec => p_log_level_rec);
4753 fa_debug_pkg.ADD('faxcde','new_reval_amo_basis',X_dpr.new_reval_amo_basis, p_log_level_rec => p_log_level_rec);
4754 fa_debug_pkg.ADD('faxcde','new_adj_capacity',X_dpr.new_adj_capacity, p_log_level_rec => p_log_level_rec);
4755 fa_debug_pkg.ADD('faxcde','new_ltd_prod',X_dpr.new_ltd_prod, p_log_level_rec => p_log_level_rec);
4756 fa_debug_pkg.ADD('faxcde','deprn_exp',X_dpr.deprn_exp, p_log_level_rec => p_log_level_rec);
4757 fa_debug_pkg.ADD('faxcde','reval_exp',X_dpr.reval_exp, p_log_level_rec => p_log_level_rec);
4758 fa_debug_pkg.ADD('faxcde','reval_amo',X_dpr.reval_amo, p_log_level_rec => p_log_level_rec);
4759 fa_debug_pkg.ADD('faxcde','prod',X_dpr.prod, p_log_level_rec => p_log_level_rec);
4760 fa_debug_pkg.ADD('faxcde','ann_adj_exp',X_dpr.ann_adj_exp, p_log_level_rec => p_log_level_rec);
4761 fa_debug_pkg.ADD('faxcde','ann_adj_reval_exp',X_dpr.ann_adj_reval_exp, p_log_level_rec => p_log_level_rec);
4762 fa_debug_pkg.ADD('faxcde','ann_adj_reval_amo',X_dpr.ann_adj_reval_amo, p_log_level_rec => p_log_level_rec);
4763 fa_debug_pkg.ADD('faxcde','bonus_rate_used',X_dpr.bonus_rate_used, p_log_level_rec => p_log_level_rec);
4764
4765 IF (X_dpr.full_rsv_flag) THEN
4766 fa_debug_pkg.ADD('faxcde','full_rsv_flag','TRUE', p_log_level_rec => p_log_level_rec);
4767 ELSE
4768 fa_debug_pkg.ADD('faxcde','full_rsv_flag','FALSE', p_log_level_rec => p_log_level_rec);
4769 END IF;
4770
4771 IF (X_dpr.life_comp_flag) THEN
4772 fa_debug_pkg.ADD('faxcde','life_comp_flag','TRUE', p_log_level_rec => p_log_level_rec);
4773 ELSE
4774 fa_debug_pkg.ADD('faxcde','life_comp_flag','FALSE', p_log_level_rec => p_log_level_rec);
4775 END IF;
4776
4777 fa_debug_pkg.ADD('faxcde','new_prior_fy_exp',X_dpr.new_prior_fy_exp, p_log_level_rec => p_log_level_rec);
4778
4779 RETURN (TRUE);
4780
4781 EXCEPTION
4782 WHEN OTHERS THEN
4783 fa_srvr_msg.add_sql_error (calling_fn => 'fa_cde_pkg.faprdos', p_log_level_rec => p_log_level_rec);
4784 RETURN (FALSE);
4785 END FAPRDOS;
4786
4787 FUNCTION fadgpoar RETURN INTEGER IS
4788
4789 -- value VARCHAR2(40);
4790
4791 BEGIN <<FADGPOAR>>
4792
4793 IF (NOT g_tested_use_annual_round) THEN
4794 -- fnd_profile.get('FA_ANNUAL_ROUND', value);
4795 IF fa_cache_pkg.fa_annual_round = 'ALWAYS' THEN
4796 g_use_annual_round := ROUND_ALWAYS;
4797 ELSE
4798 g_use_annual_round := ROUND_WITH_RESTRICTIONS;
4799 END IF;
4800
4801 g_tested_use_annual_round := TRUE;
4802 END IF;
4803
4804 RETURN g_use_annual_round;
4805
4806 EXCEPTION
4807 WHEN OTHERS THEN
4808 RETURN (g_use_annual_round);
4809 END FADGPOAR;
4810
4811
4812 FUNCTION faodda(book IN VARCHAR2,
4813 Deprn_Override_Used_By IN VARCHAR2, --Bug11886090
4814 asset_id IN NUMBER,
4815 bonus_rule IN VARCHAR2,
4816 fyctr IN NUMBER,
4817 perd_ctr IN NUMBER,
4818 prod_rate_src_flag IN BOOLEAN,
4819 deprn_projecting_flag IN BOOLEAN,
4820 p_ytd_deprn IN NUMBER,
4821 p_bonus_ytd_deprn IN NUMBER,
4822 override_depr_amt OUT NOCOPY NUMBER,
4823 override_bonus_amt OUT NOCOPY NUMBER,
4824 deprn_override_flag OUT NOCOPY VARCHAR2,
4825 return_code OUT NOCOPY NUMBER,
4826 p_mrc_sob_type_code IN VARCHAR2,
4827 p_set_of_books_id IN NUMBER,
4828 p_recoverable_cost IN NUMBER,
4829 p_salvage_value IN NUMBER,
4830 p_update_override_status IN BOOLEAN,
4831 p_over_depreciate_option IN NUMBER DEFAULT NULL, --Bug 8487934
4832 p_asset_type IN VARCHAR2 DEFAULT NULL, --Bug 8487934
4833 p_deprn_rsv IN NUMBER DEFAULT NULL, --Bug 8487934
4834 p_cur_adj_cost IN NUMBER DEFAULT NULL, --Bug 8487934
4835 p_override_period_counter IN NUMBER DEFAULT NULL,-- Bug 8211842
4836 p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
4837
4838 h_calendar_type VARCHAR2(15);
4839 h_fy_name VARCHAR2(30);
4840 subtract_ytd_flag VARCHAR2(1);
4841 h_num_per_fy NUMBER(5);
4842 h_set_of_books_id NUMBER;
4843 h_prim_set_of_books_id NUMBER;
4844 h_reporting_flag VARCHAR2(1);
4845 h_asset_id NUMBER(15);
4846 h_deprn_override_id NUMBER(15);
4847 h_success BOOLEAN;
4848 deprn_summary fa_std_types.fa_deprn_row_struct;
4849 perd_name VARCHAR2(15);
4850 report_cost NUMBER;
4851 l_exchange_rate NUMBER;
4852 l_avg_rate NUMBER;
4853 l_period_counter NUMBER; -- Bug 8211842
4854 l_posted_deprn BOOLEAN := FALSE; -- Bug 8211842
4855 h_dummy_bool BOOLEAN; -- Bug 10085448
4856 l_calling_fn VARCHAR2(40) := 'fa_cde_pkg.faodda';
4857
4858 faodda_err EXCEPTION;
4859 faodda_err2 EXCEPTION; /*Bug#7953789 */
4860
4861 BEGIN <<FAODDA>>
4862
4863 return_code:= 11;
4864
4865 IF (p_log_level_rec.statement_level) THEN
4866 fa_debug_pkg.ADD('faodda', 'book_type_code', book, p_log_level_rec => p_log_level_rec);
4867 fa_debug_pkg.ADD('faodda', 'asset_id', asset_id, p_log_level_rec => p_log_level_rec);
4868 fa_debug_pkg.ADD('faodda', 'deprn_override_used_by', deprn_override_used_by, p_log_level_rec => p_log_level_rec); --Bug11886090
4869 fa_debug_pkg.ADD('faodda', 'p_update_override_status', p_update_override_status, p_log_level_rec => p_log_level_rec);
4870 fa_debug_pkg.ADD('faodda', 'p_mrc_sob_type_code', p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec);
4871
4872 END IF;
4873
4874
4875 -- Modified for MRC
4876 -- couldn't get set_of_books_id correctly,
4877 -- so added p_mrc_sob_type_code to paramter
4878 IF p_mrc_sob_type_code = 'R' THEN
4879 h_set_of_books_id := p_set_of_books_id;
4880 h_reporting_flag := p_mrc_sob_type_code;
4881 ELSE
4882 h_set_of_books_id := p_set_of_books_id;
4883 h_reporting_flag := p_mrc_sob_type_code;
4884 END IF;
4885
4886 IF (p_log_level_rec.statement_level) THEN
4887 fa_debug_pkg.ADD('faodda', 'set_of_books_id', h_set_of_books_id, p_log_level_rec => p_log_level_rec);
4888 fa_debug_pkg.ADD('faodda', 'reporting_flag', h_reporting_flag, p_log_level_rec => p_log_level_rec);
4889 END IF;
4890
4891 return_code:=12;
4892
4893 -- select the corresponding period_counter for the current period: fyctr, perd_ctr
4894 -- Get calendar Info: type, fy_name and num_per_fiscal_year
4895 h_calendar_type:= fa_cache_pkg.fazcbc_record.deprn_calendar;
4896 h_fy_name:= fa_cache_pkg.fazcbc_record.fiscal_year_name;
4897 h_num_per_fy:= fa_cache_pkg.fazcct_record.number_per_fiscal_year;
4898
4899 return_code:= 13;
4900
4901
4902 -- FIGURE OUT THE PERIOD_NAME for the current fyctr and perd_ctr
4903 IF perd_ctr <> NVL(g_pre_period_ctr, 0) OR fyctr <> NVL(g_pre_fyctr,0) THEN
4904
4905 -- Bug 8211842: Fetch period counter also
4906 SELECT cp.period_name,
4907 fy.fiscal_year * h_num_per_fy + cp.period_num
4908 INTO perd_name,
4909 l_period_counter
4910 FROM fa_calendar_periods cp, fa_fiscal_year fy
4911 WHERE cp.calendar_type = h_calendar_type AND
4912 cp.period_num = perd_ctr AND
4913 cp.start_date >= fy.start_date AND
4914 cp.end_date <= fy.end_date AND
4915 fy.fiscal_year_name = h_fy_name AND
4916 fy.fiscal_year = fyctr;
4917
4918 g_pre_period_name:= perd_name;
4919 g_pre_period_ctr:= perd_ctr;
4920 g_pre_fyctr:= fyctr;
4921 ELSE
4922 perd_name := g_pre_period_name;
4923 END IF;
4924
4925 h_asset_id:= asset_id;
4926
4927 IF (p_log_level_rec.statement_level) THEN
4928 fa_debug_pkg.ADD('faodda', 'period_name', perd_name, p_log_level_rec => p_log_level_rec);
4929 END IF;
4930
4931
4932 -- Bug 8211842: If p_override_period_counter is populated,
4933 -- Look for posted depreciation overrides for periods before
4934 -- p_override_period_counter
4935 if (p_override_period_counter is not null) and
4936 (l_period_counter < p_override_period_counter) then
4937
4938 SELECT deprn_amount, bonus_deprn_amount, subtract_ytd_flag, deprn_override_id
4939 INTO override_depr_amt, override_bonus_amt, subtract_ytd_flag, h_deprn_override_id
4940 FROM FA_DEPRN_OVERRIDE
4941 WHERE book_type_code = book
4942 AND asset_id = h_asset_id
4943 AND period_name = perd_name
4944 AND used_by = 'DEPRECIATION'
4945 AND status = 'POSTED';
4946
4947 l_posted_deprn := TRUE;
4948
4949 elsif deprn_override_used_by = 'ADJ' THEN --Bug11886090
4950 SELECT deprn_amount
4951 , bonus_deprn_amount
4952 , subtract_ytd_flag
4953 , deprn_override_id
4954 INTO override_depr_amt
4955 , override_bonus_amt
4956 , subtract_ytd_flag
4957 , h_deprn_override_id
4958 FROM FA_DEPRN_OVERRIDE
4959 WHERE book_type_code = book
4960 AND asset_id = h_asset_id
4961 AND period_name = perd_name
4962 AND used_by = 'ADJUSTMENT'
4963 AND status = 'POST';
4964 elsif deprn_override_used_by = 'RET' THEN --Bug11886090
4965 SELECT deprn_amount
4966 , bonus_deprn_amount
4967 , subtract_ytd_flag
4968 , deprn_override_id
4969 INTO override_depr_amt
4970 , override_bonus_amt
4971 , subtract_ytd_flag
4972 , h_deprn_override_id
4973 FROM FA_DEPRN_OVERRIDE
4974 WHERE book_type_code = book
4975 AND asset_id = h_asset_id
4976 AND period_name = perd_name
4977 AND used_by = 'RETIREMENT'
4978 AND status = 'POST';
4979 ELSE
4980 SELECT deprn_amount
4981 , bonus_deprn_amount
4982 , subtract_ytd_flag
4983 , deprn_override_id
4984 INTO override_depr_amt
4985 , override_bonus_amt
4986 , subtract_ytd_flag
4987 , h_deprn_override_id
4988 FROM FA_DEPRN_OVERRIDE
4989 WHERE book_type_code = book
4990 AND asset_id = h_asset_id
4991 AND period_name = perd_name
4992 AND used_by = 'DEPRECIATION'
4993 AND status = 'POST';
4994 END IF;
4995
4996
4997 IF (p_log_level_rec.statement_level) THEN
4998 fa_debug_pkg.ADD('faodda', 'primary override_depr_amt', override_depr_amt, p_log_level_rec);
4999 fa_debug_pkg.ADD('faodda', 'primary override_bonus_amt', override_bonus_amt, p_log_level_rec);
5000 fa_debug_pkg.ADD('faodda', 'deprn_projecting_flag', deprn_projecting_flag, p_log_level_rec);
5001 fa_debug_pkg.ADD('faodda', 'p_ytd_deprn', p_ytd_deprn, p_log_level_rec);
5002 fa_debug_pkg.ADD('faodda', 'p_bonus_ytd_deprn', p_bonus_ytd_deprn, p_log_level_rec);
5003 fa_debug_pkg.ADD('faodda', 'p_recoverable_cost', p_recoverable_cost, p_log_level_rec);
5004 fa_debug_pkg.ADD('faodda', 'p_salvage_value', p_salvage_value, p_log_level_rec);
5005 END IF;
5006
5007 -- Bug#-8527619 - start
5008 if (p_over_depreciate_option = 1 or p_over_depreciate_option = 0) and
5009 deprn_override_used_by = 'DEP' and --Bug11886090
5010 nvl(p_cur_adj_cost,0) = 0 and
5011 nvl(override_depr_amt,0) <> 0 then --fully reserved
5012
5013 override_depr_amt :=null;
5014 return_code:= 2;
5015 raise faodda_err2;
5016
5017 end if;
5018 --Bug#-8527619 - end
5019
5020 -- Data Validation for manual override feature
5021 IF (NVL(bonus_rule,'NONE') = 'NONE' AND override_bonus_amt IS NOT NULL) THEN
5022 -- need to raise an error even for projection because projection needs to output the bonus account on the report.
5023 fa_srvr_msg.add_message(calling_fn => 'fa_cde_pkg.faodda',
5024 name => 'FA_NO_BONUS_RULE',
5025 TRANSLATE => FALSE,
5026 p_log_level_rec => p_log_level_rec);
5027 return_code:= 3;
5028 RAISE faodda_err;
5029 END IF;
5030
5031 IF deprn_override_used_by = 'ADJ' THEN --Bug11886090 used_by_adjustment = TRUE THEN
5032
5033 IF (h_reporting_flag <> 'R') THEN
5034 primary_cost:= p_recoverable_cost + p_salvage_value;
5035 ELSE
5036 report_cost:= p_recoverable_cost + p_salvage_value;
5037 END IF;
5038
5039 IF (p_log_level_rec.statement_level) THEN
5040 fa_debug_pkg.ADD('faodda', 'primary_cost', primary_cost, p_log_level_rec => p_log_level_rec);
5041 fa_debug_pkg.ADD('faodda', 'report_cost', report_cost, p_log_level_rec => p_log_level_rec);
5042 END IF;
5043
5044 -- ratio = Reporting Books Cost / Primary books Cost for adjustment.
5045 -- the above calculation can be used once the depreciaion
5046 -- program was built in one-step.
5047 -- = use latest average rate for depreciation until one-step depreciation is built.
5048
5049 l_avg_rate:= report_cost / primary_cost;
5050
5051 IF (p_log_level_rec.statement_level) THEN
5052 fa_debug_pkg.ADD('faodda', 'l_avg_rate', l_avg_rate, p_log_level_rec => p_log_level_rec);
5053 END IF;
5054
5055 ELSE -- Depreciation Run
5056 IF (h_reporting_flag = 'R') THEN
5057 SELECT bk.cost
5058 INTO report_cost
5059 FROM fa_mc_books bk
5060 WHERE bk.book_type_code = book
5061 AND bk.asset_id = h_asset_id
5062 AND bk.transaction_header_id_out IS NULL
5063 AND bk.set_of_books_id = p_set_of_books_id;
5064
5065 IF (p_log_level_rec.statement_level) THEN
5066 fa_debug_pkg.ADD('faodda', 'report_cost', report_cost, p_log_level_rec => p_log_level_rec);
5067 END IF;
5068
5069 SELECT bk.cost
5070 INTO primary_cost
5071 FROM fa_books bk
5072 WHERE bk.book_type_code = book
5073 AND bk.asset_id = h_asset_id
5074 AND bk.transaction_header_id_out IS NULL;
5075
5076 IF (p_log_level_rec.statement_level) THEN
5077 fa_debug_pkg.ADD('faxcde', 'faodda:primary_cost', primary_cost, p_log_level_rec => p_log_level_rec);
5078 END IF;
5079
5080 l_avg_rate:= report_cost / primary_cost;
5081
5082 IF (p_log_level_rec.statement_level) THEN
5083 fa_debug_pkg.ADD('faodda', 'l_avg_rate', l_avg_rate, p_log_level_rec => p_log_level_rec);
5084 END IF;
5085 END IF;
5086 END IF;
5087
5088 IF override_depr_amt IS NOT NULL THEN
5089
5090 deprn_override_flag:= fa_std_types.FA_OVERRIDE_DPR;
5091 deprn_override_flag:= fa_std_types.FA_OVERRIDE_DPR;
5092
5093 IF (h_reporting_flag = 'R') THEN
5094 override_depr_amt:= override_depr_amt * l_avg_rate;
5095 -- Bug 10085448 : Round the value
5096 h_dummy_bool := fa_utils_pkg.faxrnd(override_depr_amt, book,
5097 p_set_of_books_id, p_log_level_rec => p_log_level_rec);
5098 END IF;
5099
5100 IF override_bonus_amt IS NOT NULL AND NOT(prod_rate_src_flag) THEN
5101
5102 deprn_override_flag:= fa_std_types.FA_OVERRIDE_DPR_BONUS;
5103
5104 IF (h_reporting_flag = 'R') THEN
5105 override_bonus_amt:= override_bonus_amt * l_avg_rate;
5106 -- Bug 10085448 : Round the value
5107 h_dummy_bool := fa_utils_pkg.faxrnd(override_bonus_amt, book,
5108 p_set_of_books_id, p_log_level_rec => p_log_level_rec);
5109 END IF;
5110
5111 END IF;
5112
5113 ELSIF override_bonus_amt IS NOT NULL AND NOT(prod_rate_src_flag) THEN
5114
5115 deprn_override_flag:= fa_std_types.FA_OVERRIDE_BONUS;
5116
5117 IF (h_reporting_flag = 'R') THEN
5118 override_bonus_amt:= override_bonus_amt * l_avg_rate;
5119 -- Bug 10085448 : Round the value
5120 h_dummy_bool := fa_utils_pkg.faxrnd(override_bonus_amt, book,
5121 p_set_of_books_id, p_log_level_rec => p_log_level_rec);
5122 END IF;
5123
5124 ELSE
5125 deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
5126 END IF;
5127
5128 IF deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE AND
5129 NOT (deprn_projecting_flag) AND
5130 h_reporting_flag = 'P' THEN
5131
5132 -- Bug 8211842: Update the status only if it is not
5133 -- posted depreciation overrrides
5134 if not l_posted_deprn and nvl(deprn_override_used_by, 'DEP') <> 'PRE' then --16275774
5135
5136 fa_std_types.deprn_override_trigger_enabled:= FALSE;
5137
5138 IF nvl(deprn_override_used_by, 'DEP') <> 'ADJ' THEN --Bug11886090
5139 UPDATE fa_deprn_override
5140 SET status = 'POSTED'
5141 WHERE deprn_override_id = h_deprn_override_id;
5142
5143 ELSIF p_update_override_status THEN
5144 UPDATE fa_deprn_override
5145 SET status = 'SELECTED'
5146 WHERE deprn_override_id = h_deprn_override_id;
5147
5148 END IF;
5149
5150 fa_std_types.deprn_override_trigger_enabled:= TRUE;
5151
5152 end if;
5153
5154 END IF;
5155
5156 return_code:= 4;
5157
5158 -- When user provided YTD amount
5159 IF NVL(subtract_ytd_flag,'N') = 'Y' THEN
5160 override_depr_amt := override_depr_amt - (p_ytd_deprn - p_bonus_ytd_deprn);
5161 override_bonus_amt := override_bonus_amt - p_bonus_ytd_deprn;
5162 END IF;
5163
5164 IF (p_log_level_rec.statement_level) THEN
5165 fa_debug_pkg.ADD('faodda', 'override_depr_amt', override_depr_amt, p_log_level_rec => p_log_level_rec);
5166 fa_debug_pkg.ADD('faodda', 'override_bonus_amt', override_bonus_amt, p_log_level_rec => p_log_level_rec);
5167 fa_debug_pkg.ADD('faodda', 'deprn_override_flag', deprn_override_flag, p_log_level_rec => p_log_level_rec);
5168 END IF;
5169
5170 RETURN(TRUE);
5171
5172 EXCEPTION
5173 --Bug#7953789 - start
5174 WHEN faodda_err2 THEN
5175 return(TRUE);
5176 --Bug#7953789 - end
5177
5178 WHEN faodda_err THEN
5179 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5180 RETURN(FALSE);
5181
5182 WHEN NO_DATA_FOUND THEN
5183 deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
5184 return_code:= 5;
5185 RETURN(TRUE);
5186
5187 WHEN OTHERS THEN
5188 deprn_override_flag:= fa_std_types.FA_NO_OVERRIDE;
5189 return_code:= 6;
5190 fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5191 RETURN(TRUE);
5192
5193 END FAODDA;
5194
5195 ------------------------------------------------------------------
5196 -- Function:
5197 -- FATRKM
5198 --
5199 -- Description:
5200 -- Main entry to call Tracking feature
5201 -- This function will call TRACK_MEMBER function
5202 --
5203 ------------------------------------------------------------------
5204 FUNCTION fatrkm(p_dpr IN fa_std_types.dpr_struct,
5205 p_perd_deprn_exp IN NUMBER,
5206 p_perd_bonus_deprn_amount IN NUMBER,
5207 p_perd_ctr IN NUMBER,
5208 p_fyctr IN NUMBER,
5209 p_loop_end_year IN NUMBER,
5210 p_loop_end_period IN NUMBER,
5211 p_exclude_salvage_value_flag IN BOOLEAN,
5212 p_deprn_basis_rule IN VARCHAR2,
5213 p_deprn_override_flag IN OUT NOCOPY VARCHAR2,
5214 p_subtract_ytd_flag IN VARCHAR2,
5215 p_life_complete_flag IN BOOLEAN,
5216 p_fully_reserved_flag IN BOOLEAN,
5217 p_year_deprn_exp IN NUMBER,
5218 p_recoverable_cost IN NUMBER,
5219 p_adj_rec_cost IN NUMBER,
5220 p_current_deprn_reserve IN NUMBER,
5221 p_nbv_threshold IN NUMBER,
5222 p_nbv_thresh_amount IN NUMBER,
5223 p_rec_cost_abs_value IN NUMBER,
5224 p_mode IN VARCHAR2 DEFAULT NULL,
5225 x_new_perd_exp OUT NOCOPY NUMBER,
5226 x_new_perd_bonus_deprn_amount OUT NOCOPY NUMBER,
5227 x_life_complete_flag OUT NOCOPY BOOLEAN,
5228 x_fully_reserved_flag OUT NOCOPY BOOLEAN,
5229 p_log_level_rec IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
5230
5231 l_calling_fn VARCHAR2(50) := 'fa_cde_pkg.fatrkm';
5232 --* Variables to call TRACK ASSETS
5233 h_book_type_code VARCHAR2(30);
5234 h_group_asset_id NUMBER(15);
5235 h_deprn_bonus_rule VARCHAR2(15);
5236 h_exclude_salvage_value_flag VARCHAR2(1);
5237 h_tracking_method VARCHAR2(15);
5238 h_alloc_fully_ret_flag VARCHAR2(1);
5239 h_alloc_fully_rsv_flag VARCHAR2(1);
5240 h_excess_alloc_option VARCHAR2(15);
5241 h_depreciation_option VARCHAR2(15);
5242 h_member_rollup_flag VARCHAR2(1);
5243 h_group_override VARCHAR2(1);
5244
5245 h_new_deprn_amount NUMBER;
5246 h_new_bonus_amount NUMBER;
5247
5248 h_life_complete_flag VARCHAR2(1);
5249 h_fully_reserved_flag VARCHAR2(1);
5250
5251 x_ret_code NUMBER;
5252
5253 BEGIN <<FATRKM>>
5254
5255 IF (p_log_level_rec.statement_level) THEN
5256 fa_debug_pkg.ADD(l_calling_fn, 'fatrkm', 'Just Started', p_log_level_rec => p_log_level_rec);
5257 END IF;
5258
5259 -- Set Data into variables to call TRACK_ASSETS
5260
5261 h_book_type_code := p_dpr.book;
5262 h_group_asset_id := p_dpr.asset_id;
5263 h_deprn_bonus_rule := p_dpr.bonus_rule;
5264
5265 IF (p_exclude_salvage_value_flag) THEN
5266 h_exclude_salvage_value_flag := 'Y';
5267 ELSE
5268 h_exclude_salvage_value_flag := 'N';
5269 END IF;
5270
5271 h_tracking_method := p_dpr.tracking_method;
5272 h_alloc_fully_ret_flag := p_dpr.allocate_to_fully_ret_flag;
5273 h_alloc_fully_rsv_flag := p_dpr.allocate_to_fully_rsv_flag;
5274 h_excess_alloc_option := p_dpr.excess_allocation_option;
5275 h_depreciation_option := p_dpr.depreciation_option;
5276 h_member_rollup_flag := p_dpr.member_rollup_flag;
5277
5278 IF p_deprn_override_flag <> fa_std_types.FA_NO_OVERRIDE THEN
5279 h_group_override := 'Y';
5280 ELSE
5281 h_group_override := 'N';
5282 END IF;
5283
5284 IF (p_log_level_rec.statement_level) THEN
5285 fa_debug_pkg.ADD(l_calling_fn, 'book_type_code ', h_book_type_code, p_log_level_rec);
5286 fa_debug_pkg.ADD(l_calling_fn, 'group_asset_id ', h_group_asset_id, p_log_level_rec);
5287 fa_debug_pkg.ADD(l_calling_fn, 'period_counter ', p_perd_ctr, p_log_level_rec);
5288 fa_debug_pkg.ADD(l_calling_fn, 'fiscal_year ', p_fyctr, p_log_level_rec);
5289 fa_debug_pkg.ADD(l_calling_fn, 'loop_end_year ', p_loop_end_year, p_log_level_rec);
5290 fa_debug_pkg.ADD(l_calling_fn, 'loop_end_periods ', p_loop_end_period, p_log_level_rec);
5291 fa_debug_pkg.ADD(l_calling_fn, 'exclude_salvage_value_flag ', h_exclude_salvage_value_flag, p_log_level_rec);
5292 fa_debug_pkg.ADD(l_calling_fn, 'group_bonus_rule ', h_deprn_bonus_rule, p_log_level_rec);
5293 fa_debug_pkg.ADD(l_calling_fn, 'group_deprn_amount ', p_perd_deprn_exp, p_log_level_rec);
5294 fa_debug_pkg.ADD(l_calling_fn, 'group_bonus_amount ', p_perd_bonus_deprn_amount, p_log_level_rec);
5295 fa_debug_pkg.ADD(l_calling_fn, 'tracking_method ', h_tracking_method, p_log_level_rec);
5296 fa_debug_pkg.ADD(l_calling_fn, 'allocate_to_fully_ret_flag ', h_alloc_fully_ret_flag, p_log_level_rec);
5297 fa_debug_pkg.ADD(l_calling_fn, 'allocate_to_fully_rsv_flag ', h_alloc_fully_rsv_flag, p_log_level_rec);
5298 fa_debug_pkg.ADD(l_calling_fn, 'excess_allocation_option ', h_excess_alloc_option, p_log_level_rec);
5299 fa_debug_pkg.ADD(l_calling_fn, 'depreciation_option ', h_depreciation_option, p_log_level_rec);
5300 fa_debug_pkg.ADD(l_calling_fn, 'member_rollup_flag ', h_member_rollup_flag, p_log_level_rec);
5301 fa_debug_pkg.ADD(l_calling_fn, 'group_override_flag ', h_group_override, p_log_level_rec);
5302 fa_debug_pkg.ADD(l_calling_fn, 'subtract_ytd_flag ', p_subtract_ytd_flag, p_log_level_rec);
5303 fa_debug_pkg.ADD(l_calling_fn, 'mode ', p_mode, p_log_level_rec);
5304 END IF;
5305
5306 x_ret_code := FA_TRACK_MEMBER_PVT.TRACK_ASSETS(
5307 P_book_type_code => h_book_type_code,
5308 P_group_asset_id => h_group_asset_id,
5309 P_period_counter => p_perd_ctr,
5310 P_fiscal_year => p_fyctr,
5311 P_loop_end_year => p_loop_end_year,
5312 P_loop_end_period => p_loop_end_period,
5313 P_group_deprn_basis => p_deprn_basis_rule,
5314 P_group_exclude_salvage => h_exclude_salvage_value_flag,
5315 P_group_bonus_rule => h_deprn_bonus_rule,
5316 P_group_deprn_amount => p_perd_deprn_exp,
5317 P_group_bonus_amount => p_perd_bonus_deprn_amount,
5318 P_tracking_method => h_tracking_method,
5319 P_allocate_to_fully_ret_flag => h_alloc_fully_ret_flag,
5320 P_allocate_to_fully_rsv_flag => h_alloc_fully_rsv_flag,
5321 P_excess_allocation_option => h_excess_alloc_option,
5322 P_depreciation_option => h_depreciation_option,
5323 P_member_rollup_flag => h_member_rollup_flag,
5324 P_subtraction_flag => p_subtract_ytd_flag,
5325 P_group_level_override => h_group_override,
5326 P_mode => p_mode,
5327 P_mrc_sob_type_code => p_dpr.mrc_sob_type_code,
5328 P_set_of_books_id => p_dpr.set_of_books_id,
5329 X_new_deprn_amount => h_new_deprn_amount,
5330 X_new_bonus_amount => h_new_bonus_amount,
5331 p_log_level_rec => p_log_level_rec);
5332 IF x_ret_code <> 0 THEN
5333 fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5334 RETURN (FALSE);
5335 ELSE
5336 IF (p_log_level_rec.statement_level) THEN
5337 fa_debug_pkg.ADD(l_calling_fn, 'new_deprn_amount ', h_new_deprn_amount, p_log_level_rec => p_log_level_rec);
5338 fa_debug_pkg.ADD(l_calling_fn, 'new_bonus_amount ', h_new_bonus_amount, p_log_level_rec => p_log_level_rec);
5339 END IF;
5340
5341 p_deprn_override_flag := h_group_override;
5342
5343 IF h_new_deprn_amount IS NULL THEN
5344 x_new_perd_exp := 0;
5345 END IF;
5346
5347 IF h_new_bonus_amount IS NULL THEN
5348 x_new_perd_bonus_deprn_amount := 0;
5349 END IF;
5350
5351 IF h_new_deprn_amount <= p_perd_deprn_exp THEN
5352 x_new_perd_exp := h_new_deprn_amount;
5353 x_new_perd_bonus_deprn_amount := h_new_bonus_amount;
5354
5355 IF h_new_deprn_amount = p_perd_deprn_exp THEN
5356 x_life_complete_flag := p_life_complete_flag;
5357 x_fully_reserved_flag := p_fully_reserved_flag;
5358 ELSE
5359 x_life_complete_flag := FALSE;
5360 x_fully_reserved_flag := FALSE;
5361 END IF;
5362 ELSIF (p_life_complete_flag AND p_fully_reserved_flag) THEN
5363
5364 -- Fix for Bug #6417506. Need to comment the return false and
5365 -- pass back the values for life complete and fully rsvd flags.
5366 --return(FALSE);
5367 x_life_complete_flag := p_life_complete_flag;
5368 x_fully_reserved_flag := p_fully_reserved_flag;
5369
5370 ELSE
5371 x_ret_code := 0;
5372
5373 x_ret_code := FA_TRACK_MEMBER_PVT.CHECK_GROUP_AMOUNTS(
5374 P_book_type_code => h_book_type_code,
5375 P_group_asset_id => h_group_asset_id,
5376 P_period_counter => p_perd_ctr,
5377 P_perd_deprn_exp => h_new_deprn_amount,
5378 P_year_deprn_exp => p_year_deprn_exp,
5379 P_recoverable_cost => p_recoverable_cost,
5380 P_adj_rec_cost => p_adj_rec_cost,
5381 P_current_deprn_reserve => p_current_deprn_reserve,
5382 P_nbv_threshold => p_nbv_threshold,
5383 P_nbv_thresh_amount => P_nbv_thresh_amount,
5384 P_rec_cost_abs_value => P_rec_cost_abs_value,
5385 X_life_complete_flag => h_life_complete_flag,
5386 X_fully_reserved_flag => h_fully_reserved_flag,
5387 p_log_level_rec => p_log_level_rec);
5388 IF x_ret_code <> 0 THEN
5389 fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5390 RETURN (FALSE);
5391 ELSE
5392 IF NVL(h_life_complete_flag,'N') = 'Y' THEN
5393 x_life_complete_flag := TRUE;
5394 ELSE
5395 x_life_complete_flag := FALSE;
5396 END IF;
5397
5398 IF NVL(h_fully_reserved_flag,'N') = 'Y' THEN
5399 x_fully_reserved_flag := TRUE;
5400 ELSE
5401 x_fully_reserved_flag := FALSE;
5402 END IF;
5403 x_new_perd_exp := h_new_deprn_amount;
5404 x_new_perd_bonus_deprn_amount := h_new_bonus_amount;
5405 END IF;
5406
5407 END IF;
5408
5409 END IF;
5410
5411 RETURN(TRUE);
5412
5413 EXCEPTION
5414 WHEN OTHERS THEN
5415 fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
5416 RETURN(TRUE);
5417
5418 END FATRKM;
5419
5420 PROCEDURE faxgpolr (X_Book_Type_Code IN VARCHAR2,
5421 X_Asset_Id IN NUMBER,
5422 X_Polish_Rule IN NUMBER,
5423 X_Deprn_Factor IN NUMBER,
5424 X_Alternate_Deprn_Factor IN NUMBER,
5425 X_Polish_Adj_Calc_Basis_Flag IN VARCHAR2,
5426 X_Recoverable_Cost IN NUMBER,
5427 X_Fiscal_Year IN NUMBER,
5428 X_Current_Period IN NUMBER,
5429 X_Periods_Per_Year IN NUMBER,
5430 X_Year_Retired IN BOOLEAN,
5431 X_Projecting_Flag IN BOOLEAN,
5432 X_MRC_Sob_Type_Code IN VARCHAR2,
5433 X_set_of_books_id IN NUMBER,
5434 X_Rate IN OUT NOCOPY NUMBER,
5435 X_Depreciate_Flag IN OUT NOCOPY BOOLEAN,
5436 X_Current_Adjusted_Cost IN OUT NOCOPY NUMBER,
5437 X_Adjusted_Recoverable_Cost IN OUT NOCOPY NUMBER,
5438 X_Success OUT NOCOPY INTEGER,
5439 X_Calling_Fn IN VARCHAR2,
5440 p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
5441
5442 IS
5443
5444 l_calling_fn VARCHAR2(80);
5445 l_year_retired VARCHAR2(1);
5446 l_old_rate NUMBER;
5447 l_old_depreciate_flag VARCHAR2(3);
5448 l_old_adjusted_cost NUMBER;
5449 l_old_adjusted_rec_cost NUMBER;
5450 l_new_rate NUMBER;
5451 l_new_depreciate_flag VARCHAR2(3);
5452 l_new_adjusted_cost NUMBER;
5453 l_new_adjusted_rec_cost NUMBER;
5454 l_success NUMBER;
5455
5456 faxgpolr_err EXCEPTION;
5457
5458 BEGIN
5459
5460 l_old_rate := X_Rate;
5461 l_old_adjusted_cost := X_Current_Adjusted_Cost;
5462 l_old_adjusted_rec_cost := X_Adjusted_Recoverable_Cost;
5463
5464 IF (X_Depreciate_Flag) THEN
5465 l_old_depreciate_flag := 'YES';
5466 ELSE
5467 l_old_depreciate_flag := 'NO';
5468 END IF;
5469
5470 IF (X_Year_Retired) THEN
5471 l_year_retired := 'Y';
5472 ELSE
5473 l_year_retired := 'N';
5474 END IF;
5475
5476 IF (X_Projecting_Flag) THEN
5477 l_calling_fn := 'fa_cde_pkg.whatif.faxgpolr';
5478 ELSE
5479 l_calling_fn := 'fa_cde_pkg.faxgpolr';
5480 END IF;
5481
5482 FA_POLISH_PVT.Calc_Polish_Rate_Cost (
5483 p_Book_Type_Code => X_Book_Type_Code,
5484 p_Asset_Id => X_Asset_Id,
5485 p_Polish_Rule => X_Polish_Rule,
5486 p_Deprn_Factor => X_Deprn_Factor,
5487 p_Alternate_Deprn_Factor => X_Alternate_Deprn_Factor,
5488 p_Polish_Adj_Calc_Basis_Flag => NVL(X_Polish_Adj_Calc_Basis_Flag, 'N'),
5489 p_Rate => l_old_rate,
5490 p_Depreciate_Flag => l_old_depreciate_flag,
5491 p_Adjusted_Cost => l_old_adjusted_cost,
5492 p_Recoverable_Cost => X_Recoverable_Cost,
5493 p_Adjusted_Recoverable_Cost => l_old_adjusted_rec_cost,
5494 p_Fiscal_Year => X_Fiscal_Year,
5495 p_Period_Num => X_Current_Period,
5496 p_Periods_Per_Year => X_Periods_Per_Year,
5497 p_Year_Retired => l_year_retired,
5498 p_MRC_Sob_Type_Code => X_MRC_Sob_Type_Code,
5499 p_set_of_books_id => X_set_of_books_id,
5500 x_Rate => l_new_rate,
5501 x_Depreciate_Flag => l_new_depreciate_flag,
5502 x_Adjusted_Cost => l_new_adjusted_cost,
5503 x_Adjusted_Recoverable_Cost => l_new_adjusted_rec_cost,
5504 x_Success => l_success,
5505 p_Calling_Fn => l_calling_fn,
5506 p_log_level_rec => p_log_level_rec);
5507
5508 IF (l_success <> 1) THEN
5509 RAISE faxgpolr_err;
5510 END IF;
5511
5512 X_Rate := l_new_rate;
5513 X_Current_Adjusted_Cost := l_new_adjusted_cost;
5514 x_Adjusted_Recoverable_cost := l_new_adjusted_rec_cost;
5515
5516 IF (l_new_depreciate_flag = 'YES') THEN
5517 X_Depreciate_Flag := TRUE;
5518 ELSE
5519 X_Depreciate_Flag := FALSE;
5520 END IF;
5521
5522 X_Success := 1;
5523
5524 EXCEPTION
5525 WHEN faxgpolr_err THEN
5526 fa_srvr_msg.add_sql_error (calling_fn => 'fa_cde_pkg.faxgpolr', p_log_level_rec => p_log_level_rec);
5527 X_rate := 0;
5528 X_Success := 0;
5529
5530 WHEN OTHERS THEN
5531 fa_srvr_msg.add_sql_error (calling_fn => 'fa_cde_pkg.faxgpolr', p_log_level_rec => p_log_level_rec);
5532 X_rate := 0;
5533 X_Success := 0;
5534
5535 END faxgpolr;
5536
5537 END FA_CDE_PKG;