DBA Data[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;