DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_REVALUATION_PVT

Source


1 PACKAGE BODY fa_revaluation_pvt AS
2 /* $Header: FAVRVLB.pls 120.21.12020000.5 2013/03/29 11:26:22 saalampa ship $   */
3    g_old_nbv       NUMBER;
4    g_new_nbv       NUMBER;
5    g_dpr_out       fa_std_types.dpr_out_struct;
6 
7    FUNCTION do_reval (
8       px_trans_rec            IN OUT NOCOPY   fa_api_types.trans_rec_type,
9       px_asset_hdr_rec        IN OUT NOCOPY   fa_api_types.asset_hdr_rec_type,
10       p_asset_desc_rec        IN              fa_api_types.asset_desc_rec_type,
11       p_asset_type_rec        IN              fa_api_types.asset_type_rec_type,
12       p_asset_cat_rec         IN              fa_api_types.asset_cat_rec_type,
13       p_asset_fin_rec_old     IN              fa_api_types.asset_fin_rec_type,
14       p_asset_deprn_rec_old   IN              fa_api_types.asset_deprn_rec_type,
15       p_period_rec            IN              fa_api_types.period_rec_type,
16       p_mrc_sob_type_code     IN              VARCHAR2,
17       p_reval_options_rec     IN              fa_api_types.reval_options_rec_type,
18       p_calling_fn            IN              VARCHAR2
19    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
20       RETURN BOOLEAN
21    IS
22       l_th_rowid              VARCHAR2 (30);
23       l_bks_rowid             VARCHAR2 (30);
24       l_status                BOOLEAN;
25       l_asset_fin_rec_new     fa_api_types.asset_fin_rec_type;
26       l_asset_deprn_rec_new   fa_api_types.asset_deprn_rec_type;
27       l_reval_out_rec         fa_std_types.reval_out_struct;
28       -- rx columns
29       l_concat_cat            VARCHAR2 (220);
30       l_cat_segs              fa_rx_shared_pkg.seg_array;
31       l_override_defaults     VARCHAR2 (80);
32       l_reval_fully_rsvd      VARCHAR2 (80);
33       l_revalue_cip_assets    VARCHAR2 (80);
34       --Secondary changes
35       l_secondary_asset_hdr_rec        fa_api_types.asset_hdr_rec_type;
36       l_secondary_trans_rec               fa_api_types.trans_rec_type;
37       l_secondary_sob_id                   number;
38 
39       CURSOR yes_no_meaning (p_lookup_code VARCHAR2)
40       IS
41          SELECT NVL (meaning, p_lookup_code)
42            FROM fa_lookups
43           WHERE lookup_code = p_lookup_code AND lookup_type = 'YESNO';
44 
45       l_calling_fn            VARCHAR2 (35)        := 'fa_reval_pvt.do_reval';
46       reval_err               EXCEPTION;
47 
48       -- Bug7719742
49       l_method_type                  NUMBER := 0;
50       l_success                      INTEGER;
51       l_rate_in_use                  NUMBER;
52 
53       l_nbv_old NUMBER := 0;
54       l_nbv_delta NUMBER := 0;
55 
56       /*ER 14644811 */
57       l_dpr_row         FA_STD_TYPES.FA_DEPRN_ROW_STRUCT;
58       l_running_mode    VARCHAR2(20);
59       l_capital_adj     NUMBER;
60       l_general_fund    NUMBER;
61 
62    BEGIN
63       --set up transaction types for adjustments vs. addition voids
64       -- reval is currently not allowed in period of addition
65       px_trans_rec.transaction_type_code := 'REVALUATION';
66 
67       IF (p_reval_options_rec.run_mode = 'RUN')
68       THEN
69          -- insert transaction headers
70          IF (p_mrc_sob_type_code <> 'R')
71          THEN
72             -- we need the thid first before reval engine or do we
73             SELECT fa_transaction_headers_s.NEXTVAL
74               INTO px_trans_rec.transaction_header_id
75               FROM DUAL;
76 
77             -- Bug 15877517 : Reinitialize who_info as well
78             px_trans_rec.who_info.creation_date := sysdate;
79             px_trans_rec.who_info.last_update_date := sysdate;
80 
81          END IF;
82       END IF;
83 
84       -- load the structs needed by reval engine
85       -- this may come later inside fareven, thus passing the
86       -- common api structs to that routine
87 
88       -- copy current old recs to new and reval engine will overlay them
89       -- with the new values where appropriate
90       l_asset_fin_rec_new := p_asset_fin_rec_old;
91       l_asset_deprn_rec_new := p_asset_deprn_rec_old;
92 
93       IF (NVL(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y') THEN
94 
95              l_nbv_old := (p_asset_fin_rec_old.recoverable_cost
96                          - p_asset_deprn_rec_old.deprn_reserve
97                          + NVL(p_asset_fin_rec_old.salvage_value,0)
98                          - NVL (p_asset_deprn_rec_old.impairment_reserve, 0));
99 
100              IF p_reval_options_rec.value_type = 'NBV'
101              THEN
102                   l_nbv_delta := p_reval_options_rec.reval_percent - l_nbv_old;
103              ELSIF p_reval_options_rec.value_type = 'AMT'
104              THEN
105                   l_nbv_delta := p_reval_options_rec.reval_percent;
106              ELSIF p_reval_options_rec.value_type = 'PER' THEN
107                   l_nbv_delta := l_nbv_old*(p_reval_options_rec.reval_percent/100);
108              END IF;
109 
110       END IF;
111 
112       IF p_reval_options_rec.period_end_reval_flag = 'Y' THEN
113          px_trans_rec.transaction_key := 'PR' ;
114       END IF;
115 
116       IF (l_nbv_delta < 0 ) AND
117          (NVL(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y') THEN
118           --New transaction key
119           px_trans_rec.transaction_key := 'RL';
120           -- call the revaluation loss engine
121           IF NOT reval_loss (px_trans_rec                => px_trans_rec,
122                       p_asset_hdr_rec             => px_asset_hdr_rec,
123                       p_asset_desc_rec            => p_asset_desc_rec,
124                       p_asset_type_rec            => p_asset_type_rec,
125                       p_asset_cat_rec             => p_asset_cat_rec,
126                       p_asset_fin_rec_old         => p_asset_fin_rec_old,
127                       px_asset_fin_rec_new        => l_asset_fin_rec_new,
128                       p_asset_deprn_rec_old       => p_asset_deprn_rec_old,
129                       px_asset_deprn_rec_new      => l_asset_deprn_rec_new,
130                       p_period_rec                => p_period_rec,
131                       p_mrc_sob_type_code         => p_mrc_sob_type_code,
132                       p_reval_options_rec         => p_reval_options_rec,
133                       x_reval_out                 => l_reval_out_rec,
134                       p_log_level_rec             => p_log_level_rec)
135           THEN
136              RAISE reval_err;
137           END IF;
138       ELSE
139           -- call the revaluation GAIN engine
140           IF NOT fareven (px_trans_rec                => px_trans_rec,
141                       p_asset_hdr_rec             => px_asset_hdr_rec,
142                       p_asset_desc_rec            => p_asset_desc_rec,
143                       p_asset_type_rec            => p_asset_type_rec,
144                       p_asset_cat_rec             => p_asset_cat_rec,
145                       p_asset_fin_rec_old         => p_asset_fin_rec_old,
146                       px_asset_fin_rec_new        => l_asset_fin_rec_new,
147                       p_asset_deprn_rec_old       => p_asset_deprn_rec_old,
148                       px_asset_deprn_rec_new      => l_asset_deprn_rec_new,
149                       p_period_rec                => p_period_rec,
150                       p_mrc_sob_type_code         => p_mrc_sob_type_code,
151                       p_reval_options_rec         => p_reval_options_rec,
152                       x_reval_out                 => l_reval_out_rec,
153                       p_log_level_rec             => p_log_level_rec)
154           THEN
155              RAISE reval_err;
156           END IF;
157       END IF;
158 
159       /* Bug 7488356 - Begin
160       The following logic is added only for SORP.
161       When the Impairment is followed by Revaluation,
162       This particular flag should be set to 'NONE' such that catchup wont be calculated*/
163       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
164       THEN
165          IF (l_asset_fin_rec_new.adjustment_required_status = 'ADD')
166    THEN
167        l_asset_fin_rec_new.adjustment_required_status := 'NONE';
168   END IF;
169       END IF;
170       /* Bug 7488356 - End*/
171 
172       IF (p_log_level_rec.statement_level)
173       THEN
174          fa_debug_pkg.ADD (l_calling_fn,
175                            'after call to fareven run_mode',
176                            p_reval_options_rec.run_mode
177                           , p_log_level_rec => p_log_level_rec);
178          fa_debug_pkg.ADD (l_calling_fn,
179                            'after call to fareven insert_txn_flag',
180                            l_reval_out_rec.insert_txn_flag
181                           , p_log_level_rec => p_log_level_rec);
182       END IF;
183 
184       -- if run_mode = RUN, then call the table handlers to process
185       -- the revaluation else insert into the temp table for preview report
186       IF (    p_reval_options_rec.run_mode = 'RUN'
187           AND l_reval_out_rec.insert_txn_flag
188          )
189       THEN
190          -- insert transaction headers
191          IF (p_mrc_sob_type_code <> 'R')
192          THEN
193             IF (p_log_level_rec.statement_level)
194             THEN
195                fa_debug_pkg.ADD (l_calling_fn,
196                                  'trx_date before insert',
197                                  px_trans_rec.transaction_date_entered
198                                 , p_log_level_rec => p_log_level_rec);
199             END IF;
200          -- SLA UPTAKE
201          -- assign an event for the transaction
202          -- at this point key info asset/book/trx info is known from above code
203          --   *** but trx_date_entered may not be correct! - revisit ***
204 
205          if not fa_xla_events_pvt.create_transaction_event
206               (p_asset_hdr_rec => px_asset_hdr_rec,
207                p_asset_type_rec=> p_asset_type_rec,
208                px_trans_rec    => px_trans_rec,
209                p_event_status  => NULL,
210                p_calling_fn    => l_calling_fn
211                ,p_log_level_rec => p_log_level_rec) then
212             raise reval_err;
213          end if;
214 
215             /*=================================================================
216             Secondary Changes Start
217             If primary and secondary sob_id is different then we need to
218             create/update/delete event for secondary ledger*/
219              l_secondary_sob_id := FA_XLA_EVENTS_PVT.get_secondary_sob_id(px_asset_hdr_rec.book_type_code);
220              if(l_secondary_sob_id is not null) then
221                l_secondary_asset_hdr_rec := px_asset_hdr_rec;
222                l_secondary_trans_rec              := px_trans_rec;
223 
224                l_secondary_asset_hdr_rec.set_of_books_id := l_secondary_sob_id;
225 
226                  if not fa_xla_events_pvt.create_transaction_event
227                       (p_asset_hdr_rec => l_secondary_asset_hdr_rec,
228                        p_asset_type_rec=> p_asset_type_rec,
229                        px_trans_rec    => l_secondary_trans_rec,
230                        p_event_status  => NULL,
231                        p_calling_fn    => l_calling_fn
232                        ,p_log_level_rec => p_log_level_rec) then
233                     raise reval_err;
234                  end if;
235              end if;
236             /*Secondary Changes End
237             ==================================================================*/
238 
239             fa_transaction_headers_pkg.insert_row
240                (x_rowid                             => l_th_rowid,
241                 x_transaction_header_id             => px_trans_rec.transaction_header_id,
242                 x_book_type_code                    => px_asset_hdr_rec.book_type_code,
243                 x_asset_id                          => px_asset_hdr_rec.asset_id,
244                 x_transaction_type_code             => px_trans_rec.transaction_type_code,
245                 x_transaction_date_entered          => px_trans_rec.transaction_date_entered,
246                 x_date_effective                    => px_trans_rec.who_info.creation_date,
247                 x_last_update_date                  => px_trans_rec.who_info.last_update_date,
248                 x_last_updated_by                   => px_trans_rec.who_info.last_updated_by,
249                 x_transaction_name                  => px_trans_rec.transaction_name,
250                 x_invoice_transaction_id            => NULL,
251                 x_source_transaction_header_id      => px_trans_rec.source_transaction_header_id,
252                 x_mass_reference_id                 => px_trans_rec.mass_reference_id,
253                 x_last_update_login                 => px_trans_rec.who_info.last_update_login,
254                 x_transaction_subtype               => px_trans_rec.transaction_subtype,
255                 x_attribute1                        => px_trans_rec.desc_flex.attribute1,
256                 x_attribute2                        => px_trans_rec.desc_flex.attribute2,
257                 x_attribute3                        => px_trans_rec.desc_flex.attribute3,
258                 x_attribute4                        => px_trans_rec.desc_flex.attribute4,
259                 x_attribute5                        => px_trans_rec.desc_flex.attribute5,
260                 x_attribute6                        => px_trans_rec.desc_flex.attribute6,
261                 x_attribute7                        => px_trans_rec.desc_flex.attribute7,
262                 x_attribute8                        => px_trans_rec.desc_flex.attribute8,
263                 x_attribute9                        => px_trans_rec.desc_flex.attribute9,
264                 x_attribute10                       => px_trans_rec.desc_flex.attribute10,
265                 x_attribute11                       => px_trans_rec.desc_flex.attribute11,
266                 x_attribute12                       => px_trans_rec.desc_flex.attribute12,
267                 x_attribute13                       => px_trans_rec.desc_flex.attribute13,
268                 x_attribute14                       => px_trans_rec.desc_flex.attribute14,
269                 x_attribute15                       => px_trans_rec.desc_flex.attribute15,
270                 x_attribute_category_code           => px_trans_rec.desc_flex.attribute_category_code,
271                 x_transaction_key                   => px_trans_rec.transaction_key,
272                 x_amortization_start_date           => px_trans_rec.amortization_start_date,
273                 x_calling_interface                 => px_trans_rec.calling_interface,
274                 x_mass_transaction_id               => px_trans_rec.mass_transaction_id,
275                 x_member_transaction_header_id      => px_trans_rec.member_transaction_header_id,
276                 x_trx_reference_id                  => px_trans_rec.trx_reference_id,
277                 x_event_id                          => px_trans_rec.event_id,
278                 x_return_status                     => l_status,
279                 x_calling_fn                        => l_calling_fn
280                , p_log_level_rec => p_log_level_rec);
281 
282             IF NOT l_status
283             THEN
284                RAISE reval_err;
285             END IF;
286          END IF;                                        -- primary / reporting
287 
288          /*ER 14644811 */
289          if p_reval_options_rec.period_end_reval_flag = 'Y' then
290             l_dpr_row.asset_id             := px_asset_hdr_rec.asset_id;
291             l_dpr_row.book                 := px_asset_hdr_rec.book_type_code;
292             l_dpr_row.period_ctr           := p_period_rec.period_counter;
293             l_dpr_row.dist_id              := 0;
294             l_dpr_row.mrc_sob_type_code    := p_mrc_sob_type_code;
295             l_dpr_row.set_of_books_id      := px_asset_hdr_rec.set_of_books_id;
296             l_running_mode                 := 'STANDARD';
297 
298             if (p_log_level_rec.statement_level) then
299                fa_debug_pkg.add(l_calling_fn, 'Calling', 'query_balances_int', p_log_level_rec => p_log_level_rec);
300             end if;
301 
302             fa_query_balances_pkg.query_balances_int(
303                                    X_DPR_ROW               => l_dpr_row,
304                                    X_RUN_MODE              => l_running_mode,
305                                    X_DEBUG                 => FALSE,
306                                    X_SUCCESS               => l_status,
307                                    X_CALLING_FN            => l_calling_fn,
308                                    X_TRANSACTION_HEADER_ID => -1, p_log_level_rec => p_log_level_rec);
309 
310             if (NOT l_status) then
311 
312                if (p_log_level_rec.statement_level) then
313                   fa_debug_pkg.add(l_calling_fn, 'ERROR',
314                                    'Calling fa_query_balances_pkg.query_balances_int', p_log_level_rec => p_log_level_rec);
315                end if;
316 
317                raise reval_err;
318             end if;
319 
320             if nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y' then
321                l_capital_adj := l_dpr_row.capital_adjustment - nvl(l_asset_deprn_rec_new.reval_amortization,0) + nvl(l_asset_deprn_rec_new.DEPRN_AMOUNT,0);
322                l_general_fund := l_dpr_row.general_fund + nvl(l_asset_deprn_rec_new.DEPRN_AMOUNT,0);
323             else
324                l_capital_adj := 0;
325                l_general_fund := 0;
326             end if;
327 
328             IF (p_mrc_sob_type_code <> 'R') then
329                INSERT INTO FA_DEPRN_SUMMARY( BOOK_TYPE_CODE
330                                            , ASSET_ID
331                                            , PERIOD_COUNTER
332                                            , DEPRN_RUN_DATE
333                                            , DEPRN_AMOUNT
334                                            , YTD_DEPRN
335                                            , DEPRN_RESERVE
336                                            , DEPRN_SOURCE_CODE
337                                            , ADJUSTED_COST
338                                            , BONUS_RATE
339                                            , REVAL_AMORTIZATION
340                                            , REVAL_DEPRN_EXPENSE
341                                            , REVAL_RESERVE
342                                            , YTD_REVAL_DEPRN_EXPENSE
343                                            , PRODUCTION
344                                            , YTD_PRODUCTION
345                                            , LTD_PRODUCTION
346                                            , REVAL_AMORTIZATION_BASIS
347                                            , PRIOR_FY_EXPENSE
348                                            , BONUS_DEPRN_AMOUNT
349                                            , BONUS_YTD_DEPRN
350                                            , BONUS_DEPRN_RESERVE
351                                            , BONUS_DEPRN_ADJUSTMENT_AMOUNT
352                                            , PRIOR_FY_BONUS_EXPENSE
353                                            , DEPRN_OVERRIDE_FLAG
354                                            , SYSTEM_DEPRN_AMOUNT
355                                            , SYSTEM_BONUS_DEPRN_AMOUNT
356                                            , IMPAIRMENT_AMOUNT
357                                            , YTD_IMPAIRMENT
358                                            , IMPAIRMENT_RESERVE
359                                            , CAPITAL_ADJUSTMENT
360                                            , GENERAL_FUND
361                                            , DEPRN_ADJUSTMENT_AMOUNT
362                                            , REVAL_LOSS_BALANCE
363                                   ) VALUES ( px_asset_hdr_rec.book_type_code                 -- BOOK_TYPE_CODE
364                                            , px_asset_hdr_rec.asset_id                       -- ASSET_ID
365                                            , p_period_rec.period_counter                     -- PERIOD_COUNTER
366                                            , px_trans_rec.who_info.last_update_date          -- DEPRN_RUN_DATE
367                                            , l_asset_deprn_rec_new.deprn_amount +
368                                              nvl(l_dpr_row.deprn_exp, 0)                     -- DEPRN_AMOUNT
369                                            , l_asset_deprn_rec_new.ytd_deprn +
370                                              nvl(l_dpr_row.deprn_exp, 0)                     -- YTD_DEPRN
371                                            , l_asset_deprn_rec_new.deprn_reserve             -- DEPRN_RESERVE
372                                            , 'DEPRN'                                         -- DEPRN_SOURCE_CODE
373                                            , p_asset_fin_rec_old.adjusted_cost               -- ADJUSTED_COST
374                                            , g_dpr_out.bonus_rate_used                       -- BONUS_RATE
375                                            , l_asset_deprn_rec_new.reval_amortization        -- REVAL_AMORTIZATION
376                                            , l_asset_deprn_rec_new.reval_deprn_expense       -- REVAL_DEPRN_EXPENSE
377                                            , l_asset_deprn_rec_new.reval_deprn_reserve       -- REVAL_RESERVE
378                                            , l_asset_deprn_rec_new.reval_ytd_deprn           -- YTD_REVAL_DEPRN_EXPENSE
379                                            , l_asset_deprn_rec_new.production                -- PRODUCTION
380                                            , l_asset_deprn_rec_new.ytd_production            -- YTD_PRODUCTION
381                                            , l_asset_deprn_rec_new.ltd_production            -- LTD_PRODUCTION
382                                            , l_asset_deprn_rec_new.reval_amortization_basis  -- REVAL_AMORTIZATION_BASIS
383                                            , l_asset_deprn_rec_new.prior_fy_expense          -- PRIOR_FY_EXPENSE
384                                            , l_asset_deprn_rec_new.bonus_deprn_amount +      -- BONUS_DEPRN_AMOUNT
385                                              nvl(l_dpr_row.bonus_deprn_amount, 0)
386                                            , l_asset_deprn_rec_new.bonus_ytd_deprn +
387                                              nvl(l_dpr_row.bonus_deprn_amount, 0)            -- BONUS_YTD_DEPRN
388                                            , l_asset_deprn_rec_new.bonus_deprn_reserve       -- BONUS_DEPRN_RESERVE
389                                            ,  nvl(l_dpr_row.bonus_deprn_amount, 0)           -- BONUS_DEPRN_ADJUSTMENT_AMOUNT
390                                            , l_asset_deprn_rec_new.prior_fy_bonus_expense    -- PRIOR_FY_BONUS_EXPENSE
391                                            , g_dpr_out.deprn_override_flag                   -- DEPRN_OVERRIDE_FLAG
392                                            , l_asset_deprn_rec_new.DEPRN_AMOUNT              -- SYSTEM_DEPRN_AMOUNT
393                                            , l_asset_deprn_rec_new.bonus_deprn_amount        -- SYSTEM_BONUS_DEPRN_AMOUNT
394                                            , l_dpr_row.impairment_amount                     -- IMPAIRMENT_AMOUNT
395                                            , l_asset_deprn_rec_new.ytd_impairment +
396                                              l_dpr_row.impairment_amount                     -- YTD_IMPAIRMENT
397                                            , l_asset_deprn_rec_new.impairment_reserve        -- IMPAIRMENT_RESERVE
398                                            , l_capital_adj                                   -- CAPITAL_ADJUSTMENT
399                                            , l_general_fund                                  -- GENERAL_FUND
400                                            , nvl(l_dpr_row.deprn_exp, 0)                     -- DEPRN_ADJUSTMENT_AMOUNT
401                                            , NVL(l_asset_deprn_rec_new.reval_loss_balance,0) -- REVAL_LOSS_BALANCE
402                    );
403             else
404                INSERT INTO FA_MC_DEPRN_SUMMARY(SET_OF_BOOKS_ID
405                                              , BOOK_TYPE_CODE
406                                              , ASSET_ID
407                                              , PERIOD_COUNTER
408                                              , DEPRN_RUN_DATE
409                                              , DEPRN_AMOUNT
410                                              , YTD_DEPRN
411                                              , DEPRN_RESERVE
412                                              , DEPRN_SOURCE_CODE
413                                              , ADJUSTED_COST
414                                              , BONUS_RATE
415                                              , REVAL_AMORTIZATION
416                                              , REVAL_DEPRN_EXPENSE
417                                              , REVAL_RESERVE
418                                              , YTD_REVAL_DEPRN_EXPENSE
419                                              , PRODUCTION
420                                              , YTD_PRODUCTION
421                                              , LTD_PRODUCTION
422                                              , REVAL_AMORTIZATION_BASIS
423                                              , PRIOR_FY_EXPENSE
424                                              , BONUS_DEPRN_AMOUNT
425                                              , BONUS_YTD_DEPRN
426                                              , BONUS_DEPRN_RESERVE
427                                              , BONUS_DEPRN_ADJUSTMENT_AMOUNT
428                                              , PRIOR_FY_BONUS_EXPENSE
429                                              , DEPRN_OVERRIDE_FLAG
430                                              , SYSTEM_DEPRN_AMOUNT
431                                              , SYSTEM_BONUS_DEPRN_AMOUNT
432                                              , IMPAIRMENT_AMOUNT
433                                              , YTD_IMPAIRMENT
434                                              , IMPAIRMENT_RESERVE
435                                              , CAPITAL_ADJUSTMENT
436                                              , GENERAL_FUND
437                                              , DEPRN_ADJUSTMENT_AMOUNT
438                                              , REVAL_LOSS_BALANCE
439                                     ) VALUES ( px_asset_hdr_rec.set_of_books_id                -- SET_OF_BOOKS_ID
440                                              , px_asset_hdr_rec.book_type_code                 -- BOOK_TYPE_CODE
441                                              , px_asset_hdr_rec.asset_id                       -- ASSET_ID
442                                              , p_period_rec.period_counter                     -- PERIOD_COUNTER
443                                              , px_trans_rec.who_info.last_update_date          -- DEPRN_RUN_DATE
444                                              , l_asset_deprn_rec_new.deprn_amount +
445                                                nvl(l_dpr_row.deprn_exp, 0)                     -- DEPRN_AMOUNT
446                                              , l_asset_deprn_rec_new.ytd_deprn +
447                                                nvl(l_dpr_row.deprn_exp, 0)                     -- YTD_DEPRN
448                                              , l_asset_deprn_rec_new.deprn_reserve             -- DEPRN_RESERVE
449                                              , 'DEPRN'                                         -- DEPRN_SOURCE_CODE
450                                              , p_asset_fin_rec_old.adjusted_cost               -- ADJUSTED_COST
451                                              , g_dpr_out.bonus_rate_used                       -- BONUS_RATE
452                                              , l_asset_deprn_rec_new.reval_amortization        -- REVAL_AMORTIZATION
453                                              , l_asset_deprn_rec_new.reval_deprn_expense       -- REVAL_DEPRN_EXPENSE
454                                              , l_asset_deprn_rec_new.reval_deprn_reserve       -- REVAL_RESERVE
455                                              , l_asset_deprn_rec_new.reval_ytd_deprn           -- YTD_REVAL_DEPRN_EXPENSE
456                                              , l_asset_deprn_rec_new.production                -- PRODUCTION
457                                              , l_asset_deprn_rec_new.ytd_production            -- YTD_PRODUCTION
458                                              , l_asset_deprn_rec_new.ltd_production            -- LTD_PRODUCTION
459                                              , l_asset_deprn_rec_new.reval_amortization_basis  -- REVAL_AMORTIZATION_BASIS
460                                              , l_asset_deprn_rec_new.prior_fy_expense          -- PRIOR_FY_EXPENSE
461                                              , l_asset_deprn_rec_new.bonus_deprn_amount +      -- BONUS_DEPRN_AMOUNT
462                                                nvl(l_dpr_row.bonus_deprn_amount, 0)
463                                              , l_asset_deprn_rec_new.bonus_ytd_deprn +
464                                                nvl(l_dpr_row.bonus_deprn_amount, 0)            -- BONUS_YTD_DEPRN
465                                              , l_asset_deprn_rec_new.bonus_deprn_reserve       -- BONUS_DEPRN_RESERVE
466                                              , nvl(l_dpr_row.bonus_deprn_amount, 0)            -- BONUS_DEPRN_ADJUSTMENT_AMOUNT
467                                              , l_asset_deprn_rec_new.prior_fy_bonus_expense    -- PRIOR_FY_BONUS_EXPENSE
468                                              , g_dpr_out.deprn_override_flag                   -- DEPRN_OVERRIDE_FLAG
469                                              , l_asset_deprn_rec_new.DEPRN_AMOUNT              -- SYSTEM_DEPRN_AMOUNT
470                                              , l_asset_deprn_rec_new.bonus_deprn_amount        -- SYSTEM_BONUS_DEPRN_AMOUNT
471                                              , l_dpr_row.impairment_amount                     -- IMPAIRMENT_AMOUNT
472                                              , l_asset_deprn_rec_new.ytd_impairment +
473                                                l_dpr_row.impairment_amount                     -- YTD_IMPAIRMENT
474                                              , l_asset_deprn_rec_new.impairment_reserve        -- IMPAIRMENT_RESERVE
475                                              , l_capital_adj                                   -- CAPITAL_ADJUSTMENT
476                                              , l_general_fund                                  -- GENERAL_FUND
477                                              , nvl(l_dpr_row.deprn_exp, 0)                     -- DEPRN_ADJUSTMENT_AMOUNT
478                                              , NVL(l_asset_deprn_rec_new.reval_loss_balance,0) -- REVAL_LOSS_BALANCE
479                    );
480 
481             end if;
482 
483             if not FA_INS_DETAIL_PKG.FAXINDD
484                          (X_book_type_code           => px_asset_hdr_rec.book_type_code,
485                           X_asset_id                 => px_asset_hdr_rec.asset_id,
486                           X_period_counter           => p_period_rec.period_counter,
487                           X_cost                     => l_asset_fin_rec_new.cost,
488                           X_deprn_reserve            => nvl(l_asset_deprn_rec_new.deprn_reserve, 0),
489                           X_deprn_adjustment_amount  => nvl(l_dpr_row.deprn_exp, 0),
490                           X_reval_reserve            => nvl(l_asset_deprn_rec_new.reval_deprn_reserve, 0),
491                           X_ytd                      => nvl(l_asset_deprn_rec_new.ytd_deprn, 0) + nvl(l_dpr_row.deprn_exp, 0),
492                           X_ytd_reval_dep_exp        => nvl(l_asset_deprn_rec_new.reval_ytd_deprn, 0),
493                           X_bonus_ytd                => nvl(l_asset_deprn_rec_new.bonus_ytd_deprn, 0) + nvl(l_dpr_row.bonus_deprn_amount, 0),
494                           X_bonus_deprn_reserve      => nvl(l_asset_deprn_rec_new.bonus_deprn_reserve, 0),
495                           X_init_message_flag        => 'NO',
496                           X_bonus_deprn_adj_amount   => nvl(l_dpr_row.bonus_deprn_amount, 0) ,
497                           X_bonus_deprn_amount       => l_asset_deprn_rec_new.bonus_deprn_amount + + nvl(l_dpr_row.bonus_deprn_amount, 0),
498                           X_deprn_amount             => l_asset_deprn_rec_new.deprn_amount + nvl(l_dpr_row.deprn_exp, 0),
499                           X_reval_amortization       => l_asset_deprn_rec_new.reval_amortization,
500                           X_reval_deprn_expense      => l_asset_deprn_rec_new.reval_deprn_expense,
501                           X_impairment_amount        => l_dpr_row.impairment_amount,
502                           X_ytd_impairment           => l_asset_deprn_rec_new.ytd_impairment + l_dpr_row.impairment_amount,
503                           X_impairment_reserve       => l_asset_deprn_rec_new.impairment_reserve,
504                           X_capital_adjustment       => l_capital_adj,
505                           X_general_fund             => l_general_fund,
506                           X_b_row                    => FALSE,
507                           X_mrc_sob_type_code        => p_mrc_sob_type_code,
508                           X_set_of_books_id          => px_asset_hdr_rec.set_of_books_id,
509                           p_log_level_rec            => p_log_level_rec
510                          ) then raise
511                reval_err;
512             end if;
513          end if;
514          -- terminate the active row
515          fa_books_pkg.deactivate_row
516             (x_asset_id                       => px_asset_hdr_rec.asset_id,
517              x_book_type_code                 => px_asset_hdr_rec.book_type_code,
518              x_transaction_header_id_out      => px_trans_rec.transaction_header_id,
519              x_date_ineffective               => px_trans_rec.who_info.last_update_date,
520              x_mrc_sob_type_code              => p_mrc_sob_type_code,
521              x_set_of_books_id                => px_asset_hdr_rec.set_of_books_id,
522              x_calling_fn                     => l_calling_fn
523             , p_log_level_rec => p_log_level_rec);
524 
525          IF (p_log_level_rec.statement_level)
526          THEN
527             fa_debug_pkg.ADD (l_calling_fn,
528                               'after fa_books_pkg.deactivate_row',
529                               1
530                              , p_log_level_rec => p_log_level_rec);
531          END IF;
532 
533          -- fa books
534          fa_books_pkg.insert_row
535             (x_rowid                             => l_bks_rowid,
536              x_book_type_code                    => px_asset_hdr_rec.book_type_code,
537              x_asset_id                          => px_asset_hdr_rec.asset_id,
538              x_date_placed_in_service            => l_asset_fin_rec_new.date_placed_in_service,
539              x_date_effective                    => px_trans_rec.who_info.last_update_date,
540              x_deprn_start_date                  => l_asset_fin_rec_new.deprn_start_date,
541              x_deprn_method_code                 => l_asset_fin_rec_new.deprn_method_code,
542              x_life_in_months                    => l_asset_fin_rec_new.life_in_months,
543              x_rate_adjustment_factor            => l_asset_fin_rec_new.rate_adjustment_factor,
544              x_adjusted_cost                     => l_asset_fin_rec_new.adjusted_cost,
545              x_cost                              => l_asset_fin_rec_new.COST,
546              x_original_cost                     => l_asset_fin_rec_new.original_cost,
547              x_salvage_value                     => l_asset_fin_rec_new.salvage_value,
548              x_prorate_convention_code           => l_asset_fin_rec_new.prorate_convention_code,
549              x_prorate_date                      => l_asset_fin_rec_new.prorate_date,
550              x_cost_change_flag                  => l_asset_fin_rec_new.cost_change_flag,
551              x_adjustment_required_status        => l_asset_fin_rec_new.adjustment_required_status,
552              x_capitalize_flag                   => l_asset_fin_rec_new.capitalize_flag,
553              x_retirement_pending_flag           => l_asset_fin_rec_new.retirement_pending_flag,
554              x_depreciate_flag                   => l_asset_fin_rec_new.depreciate_flag,
555              x_disabled_flag                     => l_asset_fin_rec_new.disabled_flag,
556              --HH
557              x_last_update_date                  => px_trans_rec.who_info.last_update_date,
558              x_last_updated_by                   => px_trans_rec.who_info.last_updated_by,
559              x_date_ineffective                  => NULL,
560              x_transaction_header_id_in          => px_trans_rec.transaction_header_id,
561              x_transaction_header_id_out         => NULL,
562              x_itc_amount_id                     => l_asset_fin_rec_new.itc_amount_id,
563              x_itc_amount                        => l_asset_fin_rec_new.itc_amount,
564              x_retirement_id                     => l_asset_fin_rec_new.retirement_id,
565              x_tax_request_id                    => l_asset_fin_rec_new.tax_request_id,
566              x_itc_basis                         => l_asset_fin_rec_new.itc_basis,
567              x_basic_rate                        => l_asset_fin_rec_new.basic_rate,
568              x_adjusted_rate                     => l_asset_fin_rec_new.adjusted_rate,
569              x_bonus_rule                        => l_asset_fin_rec_new.bonus_rule,
570              x_ceiling_name                      => l_asset_fin_rec_new.ceiling_name,
571              x_recoverable_cost                  => l_asset_fin_rec_new.recoverable_cost,
572              x_last_update_login                 => px_trans_rec.who_info.last_update_login,
573              x_adjusted_capacity                 => l_asset_fin_rec_new.adjusted_capacity,
574              x_fully_rsvd_revals_counter         => l_asset_fin_rec_new.fully_rsvd_revals_counter,
575              x_idled_flag                        => l_asset_fin_rec_new.idled_flag,
576              x_period_counter_capitalized        => l_asset_fin_rec_new.period_counter_capitalized,
577              x_pc_fully_reserved                 => l_asset_fin_rec_new.period_counter_fully_reserved,
578              x_period_counter_fully_retired      => l_asset_fin_rec_new.period_counter_fully_retired,
579              x_production_capacity               => l_asset_fin_rec_new.production_capacity,
580              x_reval_amortization_basis          => l_asset_fin_rec_new.reval_amortization_basis,
581              x_reval_ceiling                     => l_asset_fin_rec_new.reval_ceiling,
582              x_unit_of_measure                   => l_asset_fin_rec_new.unit_of_measure,
583              x_unrevalued_cost                   => l_asset_fin_rec_new.unrevalued_cost,
584              x_annual_deprn_rounding_flag        => l_asset_fin_rec_new.annual_deprn_rounding_flag,
585              x_percent_salvage_value             => l_asset_fin_rec_new.percent_salvage_value,
586              x_allowed_deprn_limit               => l_asset_fin_rec_new.allowed_deprn_limit,
587              x_allowed_deprn_limit_amount        => l_asset_fin_rec_new.allowed_deprn_limit_amount,
588              x_period_counter_life_complete      => l_asset_fin_rec_new.period_counter_life_complete,
589              x_adjusted_recoverable_cost         => l_asset_fin_rec_new.adjusted_recoverable_cost,
590              x_short_fiscal_year_flag            => l_asset_fin_rec_new.short_fiscal_year_flag,
591              x_conversion_date                   => l_asset_fin_rec_new.conversion_date,
592              x_orig_deprn_start_date             => l_asset_fin_rec_new.orig_deprn_start_date,
593              x_remaining_life1                   => l_asset_fin_rec_new.remaining_life1,
594              x_remaining_life2                   => l_asset_fin_rec_new.remaining_life2,
595              x_old_adj_cost                      => l_asset_fin_rec_new.old_adjusted_cost,
596              x_formula_factor                    => l_asset_fin_rec_new.formula_factor,
597              x_gf_attribute1                     => l_asset_fin_rec_new.global_attribute1,
598              x_gf_attribute2                     => l_asset_fin_rec_new.global_attribute2,
599              x_gf_attribute3                     => l_asset_fin_rec_new.global_attribute3,
600              x_gf_attribute4                     => l_asset_fin_rec_new.global_attribute4,
601              x_gf_attribute5                     => l_asset_fin_rec_new.global_attribute5,
602              x_gf_attribute6                     => l_asset_fin_rec_new.global_attribute6,
603              x_gf_attribute7                     => l_asset_fin_rec_new.global_attribute7,
604              x_gf_attribute8                     => l_asset_fin_rec_new.global_attribute8,
605              x_gf_attribute9                     => l_asset_fin_rec_new.global_attribute9,
606              x_gf_attribute10                    => l_asset_fin_rec_new.global_attribute10,
607              x_gf_attribute11                    => l_asset_fin_rec_new.global_attribute11,
608              x_gf_attribute12                    => l_asset_fin_rec_new.global_attribute12,
609              x_gf_attribute13                    => l_asset_fin_rec_new.global_attribute13,
610              x_gf_attribute14                    => l_asset_fin_rec_new.global_attribute14,
611              x_gf_attribute15                    => l_asset_fin_rec_new.global_attribute15,
612              x_gf_attribute16                    => l_asset_fin_rec_new.global_attribute16,
613              x_gf_attribute17                    => l_asset_fin_rec_new.global_attribute17,
614              x_gf_attribute18                    => l_asset_fin_rec_new.global_attribute18,
615              x_gf_attribute19                    => l_asset_fin_rec_new.global_attribute19,
616              x_gf_attribute20                    => l_asset_fin_rec_new.global_attribute20,
617              x_global_attribute_category         => l_asset_fin_rec_new.global_attribute_category,
618              x_group_asset_id                    => l_asset_fin_rec_new.group_asset_id,
619              x_salvage_type                      => l_asset_fin_rec_new.salvage_type,
620              x_deprn_limit_type                  => l_asset_fin_rec_new.deprn_limit_type,
621              x_over_depreciate_option            => l_asset_fin_rec_new.over_depreciate_option,
622              x_super_group_id                    => l_asset_fin_rec_new.super_group_id,
623              x_reduction_rate                    => l_asset_fin_rec_new.reduction_rate,
624              x_reduce_addition_flag              => l_asset_fin_rec_new.reduce_addition_flag,
625              x_reduce_adjustment_flag            => l_asset_fin_rec_new.reduce_adjustment_flag,
626              x_reduce_retirement_flag            => l_asset_fin_rec_new.reduce_retirement_flag,
627              x_recognize_gain_loss               => l_asset_fin_rec_new.recognize_gain_loss,
628              x_recapture_reserve_flag            => l_asset_fin_rec_new.recapture_reserve_flag,
629              x_limit_proceeds_flag               => l_asset_fin_rec_new.limit_proceeds_flag,
630              x_terminal_gain_loss                => l_asset_fin_rec_new.terminal_gain_loss,
631              x_exclude_proceeds_from_basis       => l_asset_fin_rec_new.exclude_proceeds_from_basis,
632              x_retirement_deprn_option           => l_asset_fin_rec_new.retirement_deprn_option,
633              x_tracking_method                   => l_asset_fin_rec_new.tracking_method,
634              x_allocate_to_fully_rsv_flag        => l_asset_fin_rec_new.allocate_to_fully_rsv_flag,
635              x_allocate_to_fully_ret_flag        => l_asset_fin_rec_new.allocate_to_fully_ret_flag,
636              x_exclude_fully_rsv_flag            => l_asset_fin_rec_new.exclude_fully_rsv_flag,
637              x_excess_allocation_option          => l_asset_fin_rec_new.excess_allocation_option,
638              x_depreciation_option               => l_asset_fin_rec_new.depreciation_option,
639              x_member_rollup_flag                => l_asset_fin_rec_new.member_rollup_flag,
640              x_ytd_proceeds                      => l_asset_fin_rec_new.ytd_proceeds,
641              x_ltd_proceeds                      => l_asset_fin_rec_new.ltd_proceeds,
642              x_eofy_reserve                      => l_asset_fin_rec_new.eofy_reserve,
643              x_cip_cost                          => l_asset_fin_rec_new.cip_cost,
644              x_terminal_gain_loss_amount         => l_asset_fin_rec_new.terminal_gain_loss_amount,
645              x_ltd_cost_of_removal               => l_asset_fin_rec_new.ltd_cost_of_removal,
646              x_cash_generating_unit_id           => l_asset_fin_rec_new.cash_generating_unit_id,
647              x_mrc_sob_type_code                 => p_mrc_sob_type_code,
648              x_set_of_books_id                   => px_asset_hdr_rec.set_of_books_id,
649              x_return_status                     => l_status,
650              x_calling_fn                        => l_calling_fn
651             , p_log_level_rec => p_log_level_rec);
652 
653          IF NOT l_status
654          THEN
655             RAISE reval_err;
656          END IF;
657 
658          IF (p_log_level_rec.statement_level)
659          THEN
660             fa_debug_pkg.ADD (l_calling_fn, 'after books insert', 1, p_log_level_rec => p_log_level_rec);
661          END IF;
662          --bug7719742
663          --Added the following code to populate the rat_in_use column during revaluation
664          if nvl(fa_cache_pkg.fazccmt_record.guarantee_rate_method_flag,'NO') = 'YES' then
665 
666                  FA_CDE_PKG.faxgfr (X_Book_Type_Code   => px_asset_hdr_rec.book_type_code,
667                                   X_Asset_Id               => px_asset_hdr_rec.asset_id,
668                                   X_Short_Fiscal_Year_Flag => NULL,
669                                   X_Conversion_Date        => NULL,
670                                   X_Prorate_Date           => NULL,
671                                   X_Orig_Deprn_Start_Date  => NULL,
672                                   C_Prorate_Date           => NULL,
673                                   C_Conversion_Date        => NULL,
674                                   C_Orig_Deprn_Start_Date  => NULL,
675                                   X_Method_Code            => l_asset_fin_rec_new.deprn_method_code,
676                                   X_Life_In_Months         => l_asset_fin_rec_new.life_in_months,
677                                   X_Fiscal_Year            => -99,
678                                   X_Current_Period         => -99,
679                                   X_calling_interface      => 'AFTER_REV',
680                                   X_Rate                   => l_rate_in_use,
681                                   X_Method_Type            => l_method_type,
682                                   X_Success                => l_success, p_log_level_rec => p_log_level_rec);
683 
684                  if (l_success <= 0) then
685                      fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
686                      raise reval_err;
687                  end if;
688 
689                  UPDATE FA_BOOKS
690                  SET rate_in_use = l_rate_in_use
691                  WHERE book_type_code = px_asset_hdr_rec.book_type_code
692                  AND asset_id = px_asset_hdr_rec.asset_id
693                  AND date_ineffective is null;
694 
695          end if;
696       ELSIF (p_reval_options_rec.run_mode = 'PREVIEW')
697       THEN                                              -- run_mode is preview
698          -- insert into temp report table (ITF?)
699          -- we could also build an array here and insert in bulk periodically (as we do in faxinaj)
700 
701          -- Get the category in concatenated string for the asset's current category.
702          IF NOT fa_cache_pkg.fazsys(p_log_level_rec)
703          THEN
704             RAISE reval_err;
705          END IF;
706 
707          IF p_log_level_rec.statement_level
708          THEN
709             fa_debug_pkg.ADD
710                           (l_calling_fn,
711                            'calling concat_category with cat struct: ',
712                            fa_cache_pkg.fazsys_record.category_flex_structure
713                           , p_log_level_rec => p_log_level_rec);
714             fa_debug_pkg.ADD (l_calling_fn,
715                               'calling concat_category with cat id: ',
716                               p_asset_cat_rec.category_id
717                              , p_log_level_rec => p_log_level_rec);
718          END IF;
719 
720          fa_rx_shared_pkg.concat_category
721              (struct_id          => fa_cache_pkg.fazsys_record.category_flex_structure,
722               ccid               => p_asset_cat_rec.category_id,
723               concat_string      => l_concat_cat,
724               segarray           => l_cat_segs);
725 
726          -- need to reset the flags to YES/NO here
727          IF (NVL (p_reval_options_rec.override_defaults_flag, 'N') = 'Y')
728          THEN
729             l_override_defaults := 'YES';
730          ELSE
731             l_override_defaults := 'NO';
732          END IF;
733 
734          IF (NVL (p_reval_options_rec.reval_fully_rsvd_flag, 'N') = 'Y')
735          THEN
736             l_reval_fully_rsvd := 'YES';
737          ELSE
738             l_reval_fully_rsvd := 'NO';
739          END IF;
740 
741          -- get translated values for YESNO flags
742          OPEN yes_no_meaning (l_override_defaults);
743 
744          FETCH yes_no_meaning
745           INTO l_override_defaults;
746 
747          CLOSE yes_no_meaning;
748 
749          OPEN yes_no_meaning (l_reval_fully_rsvd);
750 
751          FETCH yes_no_meaning
752           INTO l_reval_fully_rsvd;
753 
754          CLOSE yes_no_meaning;
755 
756          IF p_log_level_rec.statement_level
757          THEN
758             fa_debug_pkg.ADD (l_calling_fn,
759                               'inserting into: ',
760                               'fa_mass_reval_rep_itf'
761                              , p_log_level_rec => p_log_level_rec);
762          END IF;
763 
764          -- Bug6666666 SORP Added columns OLD_NBV and NEW_NBV
765          IF p_log_level_rec.statement_level
766          THEN
767             fa_debug_pkg.ADD (l_calling_fn || ' SORP', 'OLD_NBV', g_old_nbv, p_log_level_rec => p_log_level_rec);
768             fa_debug_pkg.ADD (l_calling_fn || ' SORP', 'NEW_NBV', g_new_nbv, p_log_level_rec => p_log_level_rec);
769          END IF;
770 
771          INSERT INTO fa_mass_reval_rep_itf
772                      (request_id,
773                       mass_reval_id,
774                       book_type_code,
775                       transaction_date_entered,
776                       asset_id,
777                       asset_number,
778                       description,
779                       asset_type,
780                       asset_category_id, CATEGORY,
781                       old_life,
782                       new_life,
783                       old_cost, new_cost,
784                       old_deprn_reserve,
785                       new_deprn_reserve,
786                       old_reval_reserve,
787                       new_reval_reserve,
788                       reval_ceiling,
789                       reval_percent, override_defaults,
790                       reval_fully_rsvd,
791                       life_extension_factor,
792                       life_extension_ceiling,
793                       max_fully_rsvd_revals, old_nbv,
794                       new_nbv, last_update_date,
795                       last_updated_by,
796                       created_by,
797                       creation_date,
798                       last_update_login
799                      )
800               VALUES (px_trans_rec.mass_reference_id,
801                       px_trans_rec.mass_transaction_id,
802                       px_asset_hdr_rec.book_type_code,
803                       px_trans_rec.transaction_date_entered,
804                       px_asset_hdr_rec.asset_id,
805                       p_asset_desc_rec.asset_number,
806                       p_asset_desc_rec.description,
807                       p_asset_type_rec.asset_type,
808                       p_asset_cat_rec.category_id, l_concat_cat,
809                       p_asset_fin_rec_old.life_in_months,
810                       l_asset_fin_rec_new.life_in_months,
811                       p_asset_fin_rec_old.COST, l_asset_fin_rec_new.COST,
812                       p_asset_deprn_rec_old.deprn_reserve,
813                       l_asset_deprn_rec_new.deprn_reserve,
814                       p_asset_deprn_rec_old.reval_deprn_reserve,
815                       l_asset_deprn_rec_new.reval_deprn_reserve,
816                       l_asset_fin_rec_new.reval_ceiling,
817                       p_reval_options_rec.reval_percent, l_override_defaults,
818                       l_reval_fully_rsvd,
819                       p_reval_options_rec.life_extension_factor,
820                       p_reval_options_rec.life_extension_ceiling,
821                       p_reval_options_rec.max_fully_rsvd_revals, g_old_nbv,
822                       g_new_nbv, px_trans_rec.who_info.last_update_date,
823                       px_trans_rec.who_info.last_updated_by,
824                       px_trans_rec.who_info.last_updated_by,
825                       px_trans_rec.who_info.last_update_date,
826                       px_trans_rec.who_info.last_update_login
827                      );
828 
829          IF p_log_level_rec.statement_level
830          THEN
831             fa_debug_pkg.ADD (l_calling_fn,
832                               'after inserting into: ',
833                               'fa_mass_reval_rep_itf'
834                              , p_log_level_rec => p_log_level_rec);
835          END IF;
836       END IF;                                                      -- run_mode
837 
838       RETURN TRUE;
839    EXCEPTION
840       WHEN reval_err
841       THEN
842          fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
843          RETURN FALSE;
844       WHEN OTHERS
845       THEN
846          fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
847          RETURN FALSE;
848    END do_reval;
849 
850 -----------------------------------------------------------------------------
851 
852    -- this function contains validation for reval on an asset
853    FUNCTION validate_reval (
854       p_trans_rec             IN   fa_api_types.trans_rec_type,
855       p_asset_hdr_rec         IN   fa_api_types.asset_hdr_rec_type,
856       p_asset_desc_rec        IN   fa_api_types.asset_desc_rec_type,
857       p_asset_type_rec        IN   fa_api_types.asset_type_rec_type,
858       p_asset_cat_rec         IN   fa_api_types.asset_cat_rec_type,
859       p_asset_fin_rec_old     IN   fa_api_types.asset_fin_rec_type,
860       p_asset_deprn_rec_old   IN   fa_api_types.asset_deprn_rec_type,
861       p_reval_options_rec     IN   fa_api_types.reval_options_rec_type
862    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
863       RETURN BOOLEAN
864    IS
865       l_calling_fn   VARCHAR2 (35) := 'do_adjustment_pvt.validate_adj';
866    BEGIN
867       RETURN TRUE;
868    EXCEPTION
869       WHEN OTHERS
870       THEN
871          fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
872          RETURN FALSE;
873    END validate_reval;
874 
875    FUNCTION fareven (
876       px_trans_rec             IN OUT NOCOPY   fa_api_types.trans_rec_type,
877       p_asset_hdr_rec          IN              fa_api_types.asset_hdr_rec_type,
878       p_asset_desc_rec         IN              fa_api_types.asset_desc_rec_type,
879       p_asset_type_rec         IN              fa_api_types.asset_type_rec_type,
880       p_asset_cat_rec          IN              fa_api_types.asset_cat_rec_type,
881       p_asset_fin_rec_old      IN              fa_api_types.asset_fin_rec_type,
882       px_asset_fin_rec_new     IN OUT NOCOPY   fa_api_types.asset_fin_rec_type,
883       p_asset_deprn_rec_old    IN              fa_api_types.asset_deprn_rec_type,
884       px_asset_deprn_rec_new   IN OUT NOCOPY   fa_api_types.asset_deprn_rec_type,
885       p_period_rec             IN              fa_api_types.period_rec_type,
886       p_mrc_sob_type_code      IN              VARCHAR2,
887       p_reval_options_rec      IN              fa_api_types.reval_options_rec_type,
888       x_reval_out              OUT NOCOPY      fa_std_types.reval_out_struct
889    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
890       RETURN BOOLEAN
891    IS
892       l_asset_fin_rec_adj        fa_api_types.asset_fin_rec_type;
893       l_reval_rate               NUMBER;
894       l_life_extension_factor    NUMBER;
895       l_life_extension_ceiling   NUMBER;
896       l_method_id                NUMBER;
897       l_depr_last_year_flag      BOOLEAN;
898       l_rate_source_rule         VARCHAR2 (25);
899       l_deprn_basis_rule         VARCHAR2 (25);
900       l_recalc_life              NUMBER;
901       l_life_ceiling             NUMBER;
902       l_reval_ceiling_flag       BOOLEAN;
903       l_fully_rsvd_flag          BOOLEAN;
904       l_dpr_in                   fa_std_types.dpr_struct;
905       l_dpr_out                  fa_std_types.dpr_out_struct;
906       l_dpr_arr                  fa_std_types.dpr_arr_type;
907       l_running_mode             NUMBER         := fa_std_types.fa_dpr_normal;
908       l_reval_amo_basis          NUMBER;
909       l_bonus_deprn_exp          NUMBER;
910       l_deprn_exp                NUMBER;
911       l_impairment_exp           NUMBER;
912       l_salvage_value            NUMBER;
913       l_adj_in                   fa_adjust_type_pkg.fa_adj_row_struct;
914       l_cost_acct                VARCHAR2 (25);
915       l_cip_cost_acct            VARCHAR2 (25);
916       l_reval_rsv_acct           VARCHAR2 (25);
917       l_deprn_rsv_acct           VARCHAR2 (25);
918       l_deprn_exp_acct           VARCHAR2 (25);
919       -- GBertot: enabled revaluation of YTD deprn.
920       l_ytd_deprn_acct           VARCHAR2 (25);
921       -- Bonus Deprn YYOON
922       l_bonus_deprn_exp_acct     VARCHAR2 (25);
923       l_bonus_deprn_rsv_acct     VARCHAR2 (25);
924       -- End of Bonus Deprn Change
925       l_impairment_exp_acct      VARCHAR2 (25);
926       l_impairment_rsv_acct      VARCHAR2 (25);
927       l_reval_dep_rsv_flag       VARCHAR2 (5);
928       l_amor_reval_rsv_flag      VARCHAR2 (5);
929       -- GBertot: enabled revaluation of YTD Deprn.
930       l_reval_ytd_deprn_flag     VARCHAR2 (5);
931       l_deprn_calendar           VARCHAR2 (30);
932       l_fy_name                  VARCHAR2 (30);
933       l_last_period_counter      NUMBER;
934       l_fy                       NUMBER;
935       l_period_num               NUMBER;
936       l_polish_rule              NUMBER;
937       l_skip_asset               BOOLEAN;
938       l_calling_fn               VARCHAR2 (40)
939                                               := 'FA_REVALUATION_PVT.fareven';
940       fareven_err                EXCEPTION;
941       v_imp_effect               NUMBER;
942       p_reval_gain               NUMBER;
943       p_imp_loss_impact          NUMBER;
944       p_impair_loss_acct         NUMBER;
945       p_temp_imp_deprn_effect    NUMBER;
946       l_sorp_reval_adj           NUMBER;
947       p_reval_rsv_deprn_effect   NUMBER;
948 
949       l_ind   binary_integer;
950       l_gain_amount     number;
951       l_reval_loss_exp  number;
952       l_reval_deprn_exp number;
953       l_reval_loss_acct varchar2(25);
954       l_proc_flag       varchar2(1) := 'G' ;
955       l_reval_loss_balance number := 0;
956       cursor c_get_reval_loss(c_asset_id number,c_book varchar2)
957           is
958        select sum(decode(debit_credit_flag,'DR',adjustment_amount,-adjustment_amount))
959          from fa_adjustments
960         where asset_id = c_asset_id
961           and book_type_code = c_book
962           and adjustment_type = 'REVAL LOSS';
963 
964       cursor c_mc_get_reval_loss(c_asset_id number,c_book varchar2,c_sob_id number)
965           is
966        select sum(decode(debit_credit_flag,'DR',adjustment_amount,-adjustment_amount))
967          from fa_mc_adjustments
968         where asset_id = c_asset_id
969           and book_type_code = c_book
970           and adjustment_type = 'REVAL LOSS'
971           and set_of_books_id = c_sob_id;
972 
973    BEGIN
974       IF (p_log_level_rec.statement_level)
975       THEN
976          fa_debug_pkg.ADD ('fareven', 'begin', 1, p_log_level_rec => p_log_level_rec);
977       END IF;
978 
979       -- validations come here
980       IF (p_asset_fin_rec_old.reval_ceiling IS NULL)
981       THEN
982          l_reval_ceiling_flag := FALSE;
983       ELSE
984          l_reval_ceiling_flag := TRUE;
985       END IF;
986 
987       IF (p_reval_options_rec.run_mode = 'RUN')
988       THEN
989          x_reval_out.insert_txn_flag := TRUE;
990       END IF;
991 
992       /*Bug8551852# - Made condition common for sorp/non sorp book */
993       IF (ABS (p_asset_fin_rec_old.recoverable_cost) <=
994                                      (ABS (p_asset_deprn_rec_old.deprn_reserve)+ABS(nvl(p_asset_deprn_rec_old.impairment_reserve,0))))
995       THEN
996          l_fully_rsvd_flag := TRUE;
997       ELSE
998          l_fully_rsvd_flag := FALSE;
999       END IF;
1000 
1001 
1002       IF (    p_asset_fin_rec_old.production_capacity IS NOT NULL
1003           AND l_fully_rsvd_flag
1004          )
1005       THEN
1006          x_reval_out.insert_txn_flag := FALSE;
1007          GOTO fareven_exit_noerr;
1008       END IF;
1009 
1010       IF NOT fa_cache_pkg.fazccmt
1011                            (x_method      => p_asset_fin_rec_old.deprn_method_code,
1012                             x_life        => p_asset_fin_rec_old.life_in_months
1013                            , p_log_level_rec => p_log_level_rec)
1014       THEN
1015          RAISE fareven_err;
1016       END IF;
1017 
1018       IF (    fa_cache_pkg.fazccmt_record.rate_source_rule =
1019                                                      fa_std_types.fad_rsr_flat
1020           AND l_fully_rsvd_flag
1021          )
1022       THEN
1023          x_reval_out.insert_txn_flag := FALSE;
1024          GOTO fareven_exit_noerr;
1025       END IF;
1026 
1027       IF (fa_cache_pkg.fazccmt_record.deprn_basis_rule_id IS NOT NULL)
1028       THEN
1029          l_polish_rule := fa_cache_pkg.fazcdbr_record.polish_rule;
1030       END IF;
1031 
1032       IF (NVL (l_polish_rule, fa_std_types.fad_dbr_polish_none) IN
1033              (fa_std_types.fad_dbr_polish_1,
1034               fa_std_types.fad_dbr_polish_2,
1035               fa_std_types.fad_dbr_polish_3,
1036               fa_std_types.fad_dbr_polish_4,
1037               fa_std_types.fad_dbr_polish_5
1038              )
1039          )
1040       THEN
1041          x_reval_out.insert_txn_flag := FALSE;
1042          GOTO fareven_exit_noerr;
1043       END IF;
1044 
1045       l_reval_dep_rsv_flag :=
1046                            fa_cache_pkg.fazcbc_record.reval_deprn_reserve_flag;
1047       l_reval_ytd_deprn_flag :=
1048                                fa_cache_pkg.fazcbc_record.reval_ytd_deprn_flag;
1049       l_amor_reval_rsv_flag :=
1050                         fa_cache_pkg.fazcbc_record.amortize_reval_reserve_flag;
1051       l_last_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter;
1052       l_deprn_calendar := fa_cache_pkg.fazcbc_record.deprn_calendar;
1053       l_fy_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
1054 
1055       -- Bug#6666666 SORP Start
1056       IF (p_log_level_rec.statement_level)  THEN
1057 
1058                       fa_debug_pkg.ADD ('fareven' || ' SORP',
1059                               'p_asset_fin_rec_old.salvage_value',
1060                               p_asset_fin_rec_old.salvage_value
1061                              , p_log_level_rec => p_log_level_rec);
1062 
1063          fa_debug_pkg.ADD ('fareven' || ' SORP',
1064                            'SORP_Enabled_flag',
1065                            NVL (fa_cache_pkg.fazcbc_record.sorp_enabled_flag,
1066                                 'N'
1067                                )
1068                           );
1069       END IF;
1070 
1071       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1072       THEN
1073          IF (p_log_level_rec.statement_level)
1074          THEN
1075             fa_debug_pkg.ADD ('fareven' || ' SORP',
1076                               'Linked_flag',
1077                               p_reval_options_rec.linked_flag
1078                              , p_log_level_rec => p_log_level_rec);
1079             fa_debug_pkg.ADD ('fareven' || ' SORP',
1080                               'Value_type',
1081                               p_reval_options_rec.value_type
1082                              , p_log_level_rec => p_log_level_rec);
1083             fa_debug_pkg.ADD ('fareven' || ' SORP',
1084                               'Value',
1085                               p_reval_options_rec.reval_percent
1086                              , p_log_level_rec => p_log_level_rec);
1087             fa_debug_pkg.ADD ('fareven' || ' SORP',
1088                               'p_asset_fin_rec_old.recoverable_cost',
1089                               p_asset_fin_rec_old.recoverable_cost
1090                              , p_log_level_rec => p_log_level_rec);
1091             fa_debug_pkg.ADD ('fareven' || ' SORP',
1092                               'p_asset_deprn_rec_old.deprn_reserve',
1093                               p_asset_deprn_rec_old.deprn_reserve
1094                              , p_log_level_rec => p_log_level_rec);
1095             fa_debug_pkg.ADD ('fareven' || ' SORP',
1096                               'p_asset_deprn_rec_old.impairment_reserve',
1097                               NVL (p_asset_deprn_rec_old.impairment_reserve,
1098                                    0)
1099                              );
1100             fa_debug_pkg.ADD ('fareven' || ' SORP',
1101                               'RUN_MODE',
1102                               p_reval_options_rec.run_mode
1103                              , p_log_level_rec => p_log_level_rec);
1104          END IF;
1105 
1106          IF p_reval_options_rec.value_type = 'NBV'
1107          THEN
1108             x_reval_out.cost_adj :=
1109                  p_reval_options_rec.reval_percent
1110                - (  p_asset_fin_rec_old.recoverable_cost
1111                   - p_asset_deprn_rec_old.deprn_reserve
1112                                   +NVL(p_asset_fin_rec_old.salvage_value,0)
1113                   - NVL (p_asset_deprn_rec_old.impairment_reserve, 0)
1114                  );
1115             g_old_nbv :=
1116                (  p_asset_fin_rec_old.recoverable_cost
1117                 - p_asset_deprn_rec_old.deprn_reserve
1118                                 +NVL(p_asset_fin_rec_old.salvage_value,0)
1119                 - NVL (p_asset_deprn_rec_old.impairment_reserve, 0)
1120                );
1121             g_new_nbv := p_reval_options_rec.reval_percent;
1122          ELSIF p_reval_options_rec.value_type = 'AMT'
1123          THEN
1124             x_reval_out.cost_adj := p_reval_options_rec.reval_percent;
1125             g_old_nbv :=
1126                (  p_asset_fin_rec_old.recoverable_cost
1127                 - p_asset_deprn_rec_old.deprn_reserve
1128                                 +NVL(p_asset_fin_rec_old.salvage_value,0)
1129                 - NVL (p_asset_deprn_rec_old.impairment_reserve, 0)
1130                );
1131             g_new_nbv := g_old_nbv + p_reval_options_rec.reval_percent;
1132          ELSIF p_reval_options_rec.value_type = 'PER'
1133          THEN
1134             l_reval_rate := p_reval_options_rec.reval_percent / 100;
1135 
1136 
1137                IF (p_log_level_rec.statement_level)
1138                THEN
1139                   fa_debug_pkg.ADD ('fareven' || ' SORP',
1140                                     'PERIOD_COUNTER_FULLY_RESERVED',
1141                                     'NULL'
1142                                    , p_log_level_rec => p_log_level_rec);
1143                END IF;
1144 
1145                IF (l_reval_ceiling_flag)
1146                THEN
1147                   IF (p_log_level_rec.statement_level)
1148                   THEN
1149                      fa_debug_pkg.ADD ('fareven' || ' SORP',
1150                                        'l_reval_ceiling_flag',
1151                                        'TRUE'
1152                                       , p_log_level_rec => p_log_level_rec);
1153                   END IF;
1154 
1155                   IF ((  (  p_asset_fin_rec_old.recoverable_cost
1156                           - p_asset_deprn_rec_old.deprn_reserve
1157                          )
1158                        * (1 + l_reval_rate)
1159                       ) > p_asset_fin_rec_old.reval_ceiling
1160                      )
1161                   THEN
1162                      l_reval_rate :=
1163                           (  p_asset_fin_rec_old.reval_ceiling
1164                            / (  p_asset_fin_rec_old.recoverable_cost
1165                               - p_asset_deprn_rec_old.deprn_reserve
1166                                                           +NVL(p_asset_fin_rec_old.salvage_value,0)
1167                               - NVL (p_asset_deprn_rec_old.impairment_reserve,
1168                                      0
1169                                     )
1170                              )
1171                           )
1172                         - 1;
1173                   END IF;
1174                END IF;
1175 
1176                x_reval_out.cost_adj :=
1177                     (  p_asset_fin_rec_old.recoverable_cost
1178                      - p_asset_deprn_rec_old.deprn_reserve
1179                                          +NVL(p_asset_fin_rec_old.salvage_value,0)
1180                      - NVL (p_asset_deprn_rec_old.impairment_reserve, 0)
1181                     )
1182                   * l_reval_rate;
1183 
1184 
1185             g_old_nbv :=
1186                (  p_asset_fin_rec_old.recoverable_cost
1187                 - p_asset_deprn_rec_old.deprn_reserve
1188                                 +NVL(p_asset_fin_rec_old.salvage_value,0)
1189                 - NVL (p_asset_deprn_rec_old.impairment_reserve, 0)
1190                );
1191             g_new_nbv := g_old_nbv + x_reval_out.cost_adj;
1192          END IF;
1193 
1194          IF (p_log_level_rec.statement_level)
1195          THEN
1196             fa_debug_pkg.ADD ('fareven' || ' SORP',
1197                               'x_reval_out.cost_adj',
1198                               x_reval_out.cost_adj
1199                              , p_log_level_rec => p_log_level_rec);
1200             fa_debug_pkg.ADD ('fareven' || ' SORP', 'g_old_nbv', g_old_nbv, p_log_level_rec => p_log_level_rec);
1201             fa_debug_pkg.ADD ('fareven' || ' SORP', 'g_new_nbv', g_new_nbv, p_log_level_rec => p_log_level_rec);
1202          END IF;
1203 
1204          l_reval_loss_exp := 0;
1205          l_reval_deprn_exp := 0;
1206      -- This Call is made to caluclate impairment related amounts while performing linked revaluation
1207          IF     nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1208             AND p_reval_options_rec.linked_flag = 'YES'
1209          THEN
1210             l_gain_amount := x_reval_out.cost_adj;
1211             if not fa_sorp_revaluation_pkg.process_loss_reversal( p_asset_hdr_rec     => p_asset_hdr_rec,
1212                                                                   p_period_rec        => p_period_rec,
1213                                                                   p_mrc_sob_type_code => p_mrc_sob_type_code,
1214                                                                   p_set_of_books_id   => p_asset_hdr_rec.set_of_books_id,
1215                                                                   p_reval_options_rec => p_reval_options_rec,
1216                                                                   p_fully_rsvd_flag   => l_fully_rsvd_flag,
1217                                                                   p_flag              => 'P',
1218                                                                   px_gain_amt         => l_gain_amount,
1219                                                                   px_reval_loss_exp   => l_reval_loss_exp,
1220                                                                   px_deprn_exp        => l_reval_deprn_exp,
1221                                                                   p_log_level_rec     => p_log_level_rec) then
1222                raise fareven_err;
1223             end if;
1224             IF (p_log_level_rec.statement_level)
1225             THEN
1226                fa_debug_pkg.ADD ('fareven', 'After','Processing reval losses happened before impairment linked', p_log_level_rec => p_log_level_rec);
1227                fa_debug_pkg.ADD ('fareven', 'l_gain_amount', l_gain_amount, p_log_level_rec => p_log_level_rec);
1228                fa_debug_pkg.ADD ('fareven', 'l_reval_deprn_exp', l_reval_deprn_exp, p_log_level_rec => p_log_level_rec);
1229                fa_debug_pkg.ADD ('fareven', 'l_reval_loss_exp', l_reval_loss_exp, p_log_level_rec => p_log_level_rec);
1230                fa_debug_pkg.ADD ('fareven' || ' SORP','Calling FA_SORP_REVALUATION_PKG.fa_sorp_link_reval','START', p_log_level_rec => p_log_level_rec);
1231             END IF;
1232 
1233             fa_sorp_revaluation_pkg.fa_sorp_link_reval
1234                                         (--g_old_nbv,
1235                                          l_gain_amount,
1236                                          p_reval_options_rec.mass_reval_id,
1237                                          p_asset_hdr_rec.asset_id,
1238                                          p_asset_hdr_rec.book_type_code,
1239                                          p_reval_options_rec.run_mode,
1240                                          px_trans_rec.mass_reference_id,
1241                                          p_mrc_sob_type_code,
1242                                          p_asset_cat_rec.category_id,
1243                                          p_reval_options_rec.reval_type_flag,
1244                                          p_asset_hdr_rec.set_of_books_id,
1245                                          p_imp_loss_impact,
1246                                          p_reval_gain,
1247                                          p_impair_loss_acct,
1248                                          p_temp_imp_deprn_effect,
1249                                          p_reval_rsv_deprn_effect
1250                                         , p_log_level_rec => p_log_level_rec);
1251 
1252             IF (p_log_level_rec.statement_level)
1253             THEN
1254                fa_debug_pkg.ADD
1255                        ('fareven' || ' SORP',
1256                         'Calling FA_SORP_REVALUATION_PKG.fa_sorp_link_reval',
1257                         'END'
1258                        , p_log_level_rec => p_log_level_rec);
1259                fa_debug_pkg.ADD
1260                             ('fareven' || ' SORP',
1261                              'Calling FA_SORP_REVALUATION_PKG.fa_imp_itf_upd',
1262                              'START'
1263                             , p_log_level_rec => p_log_level_rec);
1264 
1265                fa_debug_pkg.ADD
1266                             ('fareven' || ' SORP',
1267                              'p_reval_gain',
1268                              p_reval_gain
1269                             , p_log_level_rec => p_log_level_rec);
1270             END IF;
1271 
1272             -- This call is made to update FA_ITF_IMPAIRMENTS table with reversed amounts
1273             IF p_reval_options_rec.run_mode = 'RUN' and p_reval_gain is not null
1274             THEN
1275                fa_sorp_revaluation_pkg.fa_imp_itf_upd
1276                                       (px_trans_rec.mass_reference_id,
1277                                        p_asset_hdr_rec.book_type_code,
1278                                        p_asset_hdr_rec.asset_id,
1279                                        px_trans_rec.who_info.last_updated_by,
1280                                        px_trans_rec.who_info.last_update_date
1281                                       , p_log_level_rec => p_log_level_rec);
1282             END IF;
1283 
1284             IF (p_log_level_rec.statement_level)
1285             THEN
1286                fa_debug_pkg.ADD
1287                            ('fareven' || ' SORP',
1288                             'Calling FA_SORP_REVALUATION_PKG.fa_imp_itf_upd',
1289                             'END'
1290                            , p_log_level_rec => p_log_level_rec);
1291             END IF;
1292          END IF;
1293       ELSE
1294          l_reval_rate := p_reval_options_rec.reval_percent / 100;
1295       END IF;
1296 
1297       -- Bug#6666666 SORP End
1298       l_life_extension_factor := p_reval_options_rec.life_extension_factor;
1299       l_life_extension_ceiling := p_reval_options_rec.life_extension_ceiling;
1300 
1301       -- Get Book Based Revaluation Rules from Book Controls Cache
1302       -- Get some more information from the Book Controls Cache
1303       IF (p_log_level_rec.statement_level)
1304       THEN
1305          fa_debug_pkg.ADD ('fareven', 'step', 2, p_log_level_rec => p_log_level_rec);
1306       END IF;
1307 
1308       -- Find the Depreciation Basis Rule and Rate Source Rule
1309       -- for this depreciation method
1310       IF NOT fa_cache_pkg.fazccmt
1311                            (x_method      => p_asset_fin_rec_old.deprn_method_code,
1312                             x_life        => p_asset_fin_rec_old.life_in_months
1313                            , p_log_level_rec => p_log_level_rec)
1314       THEN
1315          RAISE fareven_err;
1316       END IF;
1317 
1318       l_method_id := fa_cache_pkg.fazccmt_record.method_id;
1319 
1320       IF fa_cache_pkg.fazccmt_record.depreciate_lastyear_flag = 'YES'
1321       THEN
1322          l_depr_last_year_flag := TRUE;
1323       ELSE
1324          l_depr_last_year_flag := FALSE;
1325       END IF;
1326 
1327       l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
1328       l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
1329 
1330       IF (p_log_level_rec.statement_level)
1331       THEN
1332          fa_debug_pkg.ADD ('fareven', '3', 3, p_log_level_rec => p_log_level_rec);
1333       END IF;
1334 
1335       -- Bug#6666666 SORP Start
1336       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
1337       THEN
1338          IF (l_reval_ceiling_flag)
1339          THEN
1340             IF ((p_asset_fin_rec_old.COST * (1 + l_reval_rate)) >
1341                                              p_asset_fin_rec_old.reval_ceiling
1342                )
1343             THEN
1344                l_reval_rate :=
1345                     (  p_asset_fin_rec_old.reval_ceiling
1346                      / p_asset_fin_rec_old.COST
1347                     )
1348                   - 1;
1349             END IF;
1350          END IF;
1351       END IF;
1352 
1353       -- Bug#6666666 SORP End
1354       IF (p_log_level_rec.statement_level)
1355       THEN
1356          fa_debug_pkg.ADD ('fareven', 'l_reval_rate', l_reval_rate, p_log_level_rec => p_log_level_rec);
1357       END IF;
1358 
1359       --Calculate adjustment to asset cost
1360       -- Bug#6666666 SORP Start
1361       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
1362       THEN
1363          x_reval_out.cost_adj := p_asset_fin_rec_old.COST * l_reval_rate;
1364       END IF;
1365 
1366       -- Bug#6666666 SORP End
1367        -- Round to correct precision
1368       IF NOT fa_utils_pkg.faxrnd (x_reval_out.cost_adj,
1369                                   p_asset_hdr_rec.book_type_code,
1370                                   p_asset_hdr_rec.set_of_books_id,
1371                                   p_log_level_rec => p_log_level_rec)
1372       THEN
1373          RAISE fareven_err;
1374       END IF;
1375 
1376       -- Added for SORP
1377       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
1378       THEN
1379          px_asset_fin_rec_new.COST :=
1380                               p_asset_fin_rec_old.COST + x_reval_out.cost_adj;
1381       END IF;
1382 
1383       if p_reval_gain is not null then
1384          l_gain_amount := p_reval_gain;
1385          l_proc_flag := 'A';
1386       else
1387          l_proc_flag := 'G';
1388          l_gain_amount := x_reval_out.cost_adj;
1389       end if;
1390 
1391       /*Bug# 15864819 */
1392       if p_asset_fin_rec_old.depreciate_flag = 'YES' then
1393          if not fa_sorp_revaluation_pkg.process_loss_reversal( p_asset_hdr_rec     => p_asset_hdr_rec,
1394                                                             p_period_rec        => p_period_rec,
1395                                                             p_mrc_sob_type_code => p_mrc_sob_type_code,
1396                                                             p_set_of_books_id   => p_asset_hdr_rec.set_of_books_id,
1397                                                             p_reval_options_rec => p_reval_options_rec,
1398                                                             p_fully_rsvd_flag   => l_fully_rsvd_flag,
1399                                                             p_flag              => l_proc_flag,
1400                                                             px_gain_amt         => l_gain_amount,
1401                                                             px_reval_loss_exp   => l_reval_loss_exp,
1402                                                             px_deprn_exp        => l_reval_deprn_exp,
1403                                                             p_log_level_rec     => p_log_level_rec) then
1404             raise fareven_err;
1405          end if;
1406       else
1407          l_reval_loss_balance := 0;
1408          IF p_mrc_sob_type_code = 'P' THEN
1409             open c_get_reval_loss(p_asset_hdr_rec.asset_id,p_asset_hdr_rec.book_type_code);
1410             fetch c_get_reval_loss into l_reval_loss_balance;
1411             close c_get_reval_loss;
1412          ELSE
1413             open c_mc_get_reval_loss(p_asset_hdr_rec.asset_id,p_asset_hdr_rec.book_type_code,p_asset_hdr_rec.set_of_books_id);
1414             fetch c_mc_get_reval_loss into l_reval_loss_balance;
1415             close c_mc_get_reval_loss;
1416          END IF;
1417          if l_reval_loss_balance <> 0 then
1418             if l_gain_amount > l_reval_loss_balance then
1419                l_gain_amount := l_gain_amount - l_reval_loss_balance ;
1420                l_reval_loss_exp := l_reval_loss_balance;
1421             else
1422                l_reval_loss_exp := l_gain_amount ;
1423                l_gain_amount := 0;
1424             end if;
1425             l_reval_deprn_exp := 0;
1426          end if;
1427       end if;
1428       IF (p_log_level_rec.statement_level)
1429       THEN
1430          fa_debug_pkg.ADD ('fareven', 'After','Processing reval losses happened after impairment linked', p_log_level_rec => p_log_level_rec);
1431          fa_debug_pkg.ADD ('fareven', 'l_gain_amount', l_gain_amount, p_log_level_rec => p_log_level_rec);
1432          fa_debug_pkg.ADD ('fareven', 'l_reval_deprn_exp', l_reval_deprn_exp, p_log_level_rec => p_log_level_rec);
1433          fa_debug_pkg.ADD ('fareven', 'l_reval_loss_exp', l_reval_loss_exp, p_log_level_rec => p_log_level_rec);
1434       END IF;
1435 
1436       l_recalc_life := p_asset_fin_rec_old.life_in_months;
1437       l_sorp_reval_adj := x_reval_out.cost_adj;
1438 
1439       IF (p_log_level_rec.statement_level)
1440       THEN
1441          fa_debug_pkg.ADD ('fareven', 'old cost', p_asset_fin_rec_old.COST, p_log_level_rec => p_log_level_rec);
1442          fa_debug_pkg.ADD ('fareven',
1443                            'x_reval_out.cost_adj',
1444                            x_reval_out.cost_adj
1445                           , p_log_level_rec => p_log_level_rec);
1446          fa_debug_pkg.ADD ('fareven', 'new cost', px_asset_fin_rec_new.COST, p_log_level_rec => p_log_level_rec);
1447       END IF;
1448 
1449       -- call fazccbd to initialize cat book defaults which is called in
1450       -- calc_salvage_value
1451       IF NOT fa_cache_pkg.fazccbd
1452                (x_book        => p_asset_hdr_rec.book_type_code,
1453                 x_cat_id      => p_asset_cat_rec.category_id,
1454                 x_jdpis       => TO_NUMBER
1455                                     (TO_CHAR
1456                                         (p_asset_fin_rec_old.date_placed_in_service,
1457                                          'J'
1458                                         )
1459                                     ),
1460                 p_log_level_rec => p_log_level_rec
1461                )
1462       THEN
1463          RAISE fareven_err;
1464       END IF;
1465 
1466       px_asset_fin_rec_new.annual_deprn_rounding_flag := 'REV';
1467 
1468       --If the asset is not fully reserved
1469       IF (NOT l_fully_rsvd_flag)
1470       THEN
1471          IF (p_log_level_rec.statement_level)
1472          THEN
1473             fa_debug_pkg.ADD ('fareven', 'not fully reserved', 1, p_log_level_rec => p_log_level_rec);
1474          END IF;
1475 
1476          -- Compute Adjustment to Depreciation Reserve
1477          --  if  Depreciation Reserve is to be revalued
1478          IF l_reval_dep_rsv_flag = 'YES'
1479          THEN
1480             IF (p_log_level_rec.statement_level)
1481             THEN
1482                fa_debug_pkg.ADD ('fareven', 'reval_dep_rsv_flag is YES', 1, p_log_level_rec => p_log_level_rec);
1483             END IF;
1484 
1485             x_reval_out.deprn_rsv_adj :=
1486                             p_asset_deprn_rec_old.deprn_reserve * l_reval_rate;
1487 
1488             -- Round to correct precision
1489             IF NOT fa_utils_pkg.faxrnd (x_reval_out.deprn_rsv_adj,
1490                                         p_asset_hdr_rec.book_type_code,
1491                                         p_asset_hdr_rec.set_of_books_id,
1492                                         p_log_level_rec => p_log_level_rec)
1493             THEN
1494                RAISE fareven_err;
1495             END IF;
1496 
1497             -- Bonus Deprn  YYOON
1498             x_reval_out.bonus_deprn_rsv_adj :=
1499                       p_asset_deprn_rec_old.bonus_deprn_reserve * l_reval_rate;
1500 
1501             -- Round to correct precision
1502             IF NOT fa_utils_pkg.faxrnd (x_reval_out.bonus_deprn_rsv_adj,
1503                                         p_asset_hdr_rec.book_type_code,
1504                                         p_asset_hdr_rec.set_of_books_id,
1505                                         p_log_level_rec => p_log_level_rec)
1506             THEN
1507                RAISE fareven_err;
1508             END IF;
1509          ELSE                  --if Depreciation Reserve is not to be revalued
1510             IF (p_log_level_rec.statement_level)
1511             THEN
1512                fa_debug_pkg.ADD ('fareven', 'reval_dep_rsv_flag is NO', 1, p_log_level_rec => p_log_level_rec);
1513             END IF;
1514 
1515             x_reval_out.deprn_rsv_adj := -p_asset_deprn_rec_old.deprn_reserve;
1516             x_reval_out.bonus_deprn_rsv_adj :=
1517                                     -p_asset_deprn_rec_old.bonus_deprn_reserve;
1518 
1519             -- Bug 6666666 START Added for SORP
1520             IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1521             THEN
1522                IF ABS (x_reval_out.deprn_rsv_adj) <> 0
1523                THEN
1524                   IF (x_reval_out.cost_adj > 0)
1525                   THEN
1526                      IF (ABS (x_reval_out.deprn_rsv_adj) >=
1527                                                           x_reval_out.cost_adj
1528                         )
1529                      THEN
1530                         x_reval_out.cost_adj :=
1531                              (  ABS (x_reval_out.deprn_rsv_adj)
1532                               - x_reval_out.cost_adj
1533                              )
1534                            * -1;
1535                      ELSE
1536                         x_reval_out.cost_adj :=
1537                              x_reval_out.cost_adj
1538                            - ABS (x_reval_out.deprn_rsv_adj);
1539                      END IF;
1540                   END IF;
1541                END IF;
1542             END IF;
1543          -- Bug 6666666 START
1544          END IF;
1545 
1546          IF (p_log_level_rec.statement_level)
1547          THEN
1548             fa_debug_pkg.ADD ('fareven',
1549                               'x_reval_out.deprn_rsv_adj',
1550                               x_reval_out.deprn_rsv_adj
1551                              , p_log_level_rec => p_log_level_rec);
1552             fa_debug_pkg.ADD ('fareven',
1553                               'x_reval_out.bonus_deprn_rsv_adj',
1554                               x_reval_out.bonus_deprn_rsv_adj
1555                              , p_log_level_rec => p_log_level_rec);
1556          END IF;
1557 
1558          fa_debug_pkg.ADD ('fareven',
1559                            'p_asset_deprn_rec_old.impairment_reserve',
1560                            p_asset_deprn_rec_old.impairment_reserve
1561                           , p_log_level_rec => p_log_level_rec);
1562 
1563          IF (p_asset_deprn_rec_old.impairment_reserve <> 0)
1564          THEN
1565             IF (x_reval_out.cost_adj > 0)
1566             THEN
1567                IF (p_asset_deprn_rec_old.impairment_reserve >=
1568                                                           x_reval_out.cost_adj
1569                   )
1570                THEN
1571                   -- Bug 6666666 START  Modified for SORP
1572                   IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1573                   THEN
1574                      x_reval_out.cost_adj :=
1575                           (  p_asset_deprn_rec_old.impairment_reserve
1576                            - x_reval_out.cost_adj
1577                           )
1578                         * -1;
1579                      x_reval_out.impairment_rsv_adj :=
1580                                   p_asset_deprn_rec_old.impairment_reserve
1581                                   * -1;
1582                   ELSE
1583                      x_reval_out.impairment_rsv_adj :=
1584                                   p_asset_deprn_rec_old.impairment_reserve
1585                                   * -1;
1586                   /*   x_reval_out.cost_adj := 0;
1587                      x_reval_out.deprn_rsv_adj := 0;
1588                      x_reval_out.reval_rsv_adj := 0;*/
1589                   END IF;
1590                ELSE
1591                   IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1592                   THEN
1593                      x_reval_out.cost_adj :=
1594                           x_reval_out.cost_adj
1595                         - p_asset_deprn_rec_old.impairment_reserve;
1596                      x_reval_out.impairment_rsv_adj :=
1597                                   p_asset_deprn_rec_old.impairment_reserve
1598                                   * -1;
1599                   ELSE
1600                      x_reval_out.impairment_rsv_adj :=
1601                                  p_asset_deprn_rec_old.impairment_reserve
1602                                  * -1;
1603 -- Bug# 6684245      x_reval_out.cost_adj:= x_reval_out.cost_adj - p_asset_deprn_rec_old.impairment_reserve;
1604                      x_reval_out.deprn_rsv_adj := x_reval_out.deprn_rsv_adj;
1605                      x_reval_out.reval_rsv_adj :=
1606                              x_reval_out.cost_adj - x_reval_out.deprn_rsv_adj;
1607                   END IF;
1608                END IF;
1609             ELSE                              -- x_reval_out.deprn_rsv_adj < 0
1610                IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
1611                THEN
1612                   x_reval_out.impairment_rsv_adj := 0;
1613                ELSE
1614                   x_reval_out.impairment_rsv_adj :=
1615                                  p_asset_deprn_rec_old.impairment_reserve
1616                                  * -1;
1617                   x_reval_out.cost_adj :=
1618                         x_reval_out.cost_adj + x_reval_out.impairment_rsv_adj;
1619                END IF;
1620             END IF;
1621          END IF;
1622 
1623          /*ER 14644811 */
1624          px_asset_deprn_rec_new.impairment_reserve :=  p_asset_deprn_rec_old.impairment_reserve + nvl(x_reval_out.impairment_rsv_adj,0) ;
1625          -- Bug 6666666 END  Modified for SORP
1626 
1627          -- GBertot: compute adjustment to YTD deprn. if it is to be revalued
1628          IF l_reval_ytd_deprn_flag = 'YES'
1629          THEN
1630             IF (p_log_level_rec.statement_level)
1631             THEN
1632                fa_debug_pkg.ADD ('fareven', 'reval_ytd_deprn_flag is YES', 1, p_log_level_rec => p_log_level_rec);
1633             END IF;
1634 
1635             x_reval_out.ytd_deprn_adj :=
1636                                 p_asset_deprn_rec_old.ytd_deprn * l_reval_rate;
1637 
1638             --round to correct precision
1639             IF NOT fa_utils_pkg.faxrnd (x_reval_out.ytd_deprn_adj,
1640                                         p_asset_hdr_rec.book_type_code,
1641                                         p_asset_hdr_rec.set_of_books_id,
1642                                         p_log_level_rec => p_log_level_rec)
1643             THEN
1644                RAISE fareven_err;
1645             END IF;
1646 
1647             --  Bonus Deprn  YYOON
1648             x_reval_out.bonus_ytd_deprn_adj :=
1649                           p_asset_deprn_rec_old.bonus_ytd_deprn * l_reval_rate;
1650             x_reval_out.ytd_impairment_adj :=
1651                            p_asset_deprn_rec_old.ytd_impairment * l_reval_rate;
1652 
1653             --round to correct precision
1654             IF NOT fa_utils_pkg.faxrnd (x_reval_out.bonus_ytd_deprn_adj,
1655                                         p_asset_hdr_rec.book_type_code,
1656                                         p_asset_hdr_rec.set_of_books_id,
1657                                         p_log_level_rec => p_log_level_rec)
1658             THEN
1659                RAISE fareven_err;
1660             END IF;
1661 
1662             IF NOT fa_utils_pkg.faxrnd (x_reval_out.ytd_impairment_adj,
1663                                         p_asset_hdr_rec.book_type_code,
1664                                         p_asset_hdr_rec.set_of_books_id,
1665                                         p_log_level_rec => p_log_level_rec)
1666             THEN
1667                RAISE fareven_err;
1668             END IF;
1669          ELSE                           -- if YTD deprn. is not to be revalued
1670             IF (p_log_level_rec.statement_level)
1671             THEN
1672                fa_debug_pkg.ADD ('fareven', 'reval_ytd_deprn_flag is NO', 1, p_log_level_rec => p_log_level_rec);
1673             END IF;
1674 
1675             x_reval_out.ytd_deprn_adj := 0;
1676             x_reval_out.bonus_ytd_deprn_adj := 0;
1677             x_reval_out.ytd_impairment_adj := 0;
1678          END IF;
1679 
1680          -- Bonus Deprn - YYOON:
1681          --   Here in the following calculation of revaluation reserve amount,
1682          --   the revalued bonus_ytd_adj amount doesn't need to be
1683          -- involved in the calculation
1684          --because the ytd_deprn_adj has already included the bonus ytd amount.
1685          -- Compute Adjustment to Revaluation Reserve
1686 
1687          -- Added for SORP
1688          IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
1689          THEN
1690             x_reval_out.reval_rsv_adj :=
1691                              x_reval_out.cost_adj - x_reval_out.deprn_rsv_adj;
1692          END IF;
1693 
1694          -- GBertot: Compute adjustment to revaluation reserve due to YTD deprn.
1695          x_reval_out.reval_rsv_adj :=
1696                          x_reval_out.reval_rsv_adj + x_reval_out.ytd_deprn_adj;
1697 
1698          IF (p_log_level_rec.statement_level)
1699          THEN
1700             fa_debug_pkg.ADD ('fareven',
1701                               'x_reval_out.reval_rsv_adj',
1702                               x_reval_out.reval_rsv_adj
1703                              , p_log_level_rec => p_log_level_rec);
1704          END IF;
1705 
1706          x_reval_out.new_life := p_asset_fin_rec_old.life_in_months;
1707          x_reval_out.new_fully_rsvd_revals_ctr :=
1708                                  p_asset_fin_rec_old.fully_rsvd_revals_counter;
1709 
1710          IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1711          THEN
1712             px_asset_fin_rec_new.COST :=
1713                               p_asset_fin_rec_old.COST + x_reval_out.cost_adj;
1714             x_reval_out.reval_rsv_adj := l_gain_amount;
1715          END IF;
1716 
1717          -- Compute Recoverable Cost
1718          IF NOT fa_asset_calc_pvt.calc_salvage_value
1719                                 (p_trans_rec               => px_trans_rec,
1720                                  p_asset_hdr_rec           => p_asset_hdr_rec,
1721                                  p_asset_type_rec          => p_asset_type_rec,
1722                                  p_asset_fin_rec_old       => p_asset_fin_rec_old,
1723                                  p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
1724                                  px_asset_fin_rec_new      => px_asset_fin_rec_new,
1725                                  p_mrc_sob_type_code       => p_mrc_sob_type_code
1726                                 , p_log_level_rec => p_log_level_rec)
1727          THEN
1728             RAISE fareven_err;
1729          END IF;
1730 
1731          x_reval_out.new_salvage_value := px_asset_fin_rec_new.salvage_value;
1732 
1733          IF NOT fa_asset_calc_pvt.calc_rec_cost
1734                                  (p_asset_hdr_rec           => p_asset_hdr_rec,
1735                                   p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
1736                                   px_asset_fin_rec_new      => px_asset_fin_rec_new
1737                                  , p_log_level_rec => p_log_level_rec)
1738          THEN
1739             RAISE fareven_err;
1740          END IF;
1741 
1742          px_asset_fin_rec_new.adjusted_cost :=
1743                                          px_asset_fin_rec_new.recoverable_cost;
1744 
1745          IF NOT fa_asset_calc_pvt.calc_deprn_limit_adj_rec_cost
1746                                 (p_asset_hdr_rec           => p_asset_hdr_rec,
1747                                  p_asset_type_rec          => p_asset_type_rec,
1748                                  p_asset_fin_rec_old       => p_asset_fin_rec_old,
1749                                  p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
1750                                  px_asset_fin_rec_new      => px_asset_fin_rec_new,
1751                                  p_mrc_sob_type_code       => p_mrc_sob_type_code
1752                                 , p_log_level_rec => p_log_level_rec)
1753          THEN
1754             RAISE fareven_err;
1755          END IF;
1756 
1757          IF (p_log_level_rec.statement_level)
1758          THEN
1759             fa_debug_pkg.ADD ('fareven',
1760                               'after calc_salvage_value SV',
1761                               px_asset_fin_rec_new.salvage_value
1762                              , p_log_level_rec => p_log_level_rec);
1763             fa_debug_pkg.ADD ('fareven',
1764                               'after calc_rec_cost rec cost',
1765                               px_asset_fin_rec_new.recoverable_cost
1766                              , p_log_level_rec => p_log_level_rec);
1767             fa_debug_pkg.ADD ('fareven',
1768                               'after calc_adj_rec_cost adj_rec_cost',
1769                               px_asset_fin_rec_new.adjusted_recoverable_cost
1770                              , p_log_level_rec => p_log_level_rec);
1771          END IF;
1772 
1773          IF NOT fa_amort_pvt.faxraf
1774                          (px_trans_rec                => px_trans_rec,
1775                           p_asset_hdr_rec             => p_asset_hdr_rec,
1776                           p_asset_desc_rec            => p_asset_desc_rec,
1777                           p_asset_cat_rec             => p_asset_cat_rec,
1778                           p_asset_type_rec            => p_asset_type_rec,
1779                           p_asset_fin_rec_old         => p_asset_fin_rec_old,
1780                           px_asset_fin_rec_new        => px_asset_fin_rec_new,
1781                           p_asset_deprn_rec           => p_asset_deprn_rec_old,
1782                           p_period_rec                => p_period_rec,
1783                           px_deprn_exp                => l_deprn_exp,
1784                           px_bonus_deprn_exp          => l_bonus_deprn_exp,
1785                           px_impairment_exp           => l_impairment_exp,
1786                           px_reval_deprn_rsv_adj      => x_reval_out.deprn_rsv_adj,
1787                           p_mrc_sob_type_code         => p_mrc_sob_type_code,
1788                           p_running_mode              => fa_std_types.fa_dpr_normal,
1789                           p_used_by_revaluation       => 1
1790                          , p_log_level_rec => p_log_level_rec)
1791          THEN
1792             RAISE fareven_err;
1793          END IF;
1794       END IF;                            -- If the asset is not fully reserved
1795 
1796       --If the asset is fully reserved
1797       IF (l_fully_rsvd_flag)
1798       THEN
1799          IF (p_log_level_rec.statement_level)
1800          THEN
1801             fa_debug_pkg.ADD ('fareven',
1802                               'REVALUE FULLY RESERVED ASSET',
1803                               p_reval_options_rec.reval_fully_rsvd_flag
1804                              , p_log_level_rec => p_log_level_rec);
1805          END IF;
1806 
1807          IF (   (NVL (p_reval_options_rec.reval_fully_rsvd_flag, 'N') = 'N')
1808              OR (    (p_asset_fin_rec_old.fully_rsvd_revals_counter >=
1809                                      p_reval_options_rec.max_fully_rsvd_revals
1810                      )
1811                  AND (p_reval_options_rec.max_fully_rsvd_revals <> -1)
1812                 )
1813             )
1814          THEN
1815             x_reval_out.cost_adj := 0;
1816             x_reval_out.deprn_rsv_adj := 0;
1817             x_reval_out.reval_rsv_adj := 0;
1818             x_reval_out.ytd_deprn_adj := 0;
1819             x_reval_out.bonus_ytd_deprn_adj := 0;
1820             x_reval_out.bonus_deprn_rsv_adj := 0;
1821             x_reval_out.ytd_impairment_adj := 0;
1822             x_reval_out.impairment_rsv_adj := 0;
1823             x_reval_out.new_life := p_asset_fin_rec_old.life_in_months;
1824             x_reval_out.new_fully_rsvd_revals_ctr :=
1825                                 p_asset_fin_rec_old.fully_rsvd_revals_counter;
1826             x_reval_out.new_adj_cost := p_asset_fin_rec_old.adjusted_cost;
1827             x_reval_out.new_adj_capacity :=
1828                                         p_asset_fin_rec_old.adjusted_capacity;
1829             x_reval_out.new_rec_cost := p_asset_fin_rec_old.recoverable_cost;
1830             x_reval_out.new_raf := p_asset_fin_rec_old.rate_adjustment_factor;
1831             px_asset_fin_rec_new := p_asset_fin_rec_old;
1832             px_asset_deprn_rec_new := p_asset_deprn_rec_old;
1833             x_reval_out.insert_txn_flag := FALSE;
1834          ELSE
1835             -- If life extension factor is not specified as a part
1836             -- of revaluation rules it is an error condition
1837             IF (p_log_level_rec.statement_level)
1838             THEN
1839                fa_debug_pkg.ADD ('fareven',
1840                                  'l_life_extension_factor',
1841                                  l_life_extension_factor
1842                                 , p_log_level_rec => p_log_level_rec);
1843             END IF;
1844 
1845             IF (l_life_extension_factor = -1)
1846             THEN
1847                RAISE fareven_err;
1848             END IF;
1849 
1850             --Bug#7488735 - Depreciation not calculated for donated asset as
1851             -- cost is zero at this point and recoverable_cost is calculated as zero
1852             IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
1853             THEN
1854                                 --Bug#7553091
1855                            --if x_reval_out.cost_adj <> 0 then
1856                px_asset_fin_rec_new.COST := x_reval_out.cost_adj;
1857                            --end if;
1858             end if;
1859 
1860             -- Compute Recoverable Cost
1861             IF NOT fa_asset_calc_pvt.calc_salvage_value
1862                                 (p_trans_rec               => px_trans_rec,
1863                                  p_asset_hdr_rec           => p_asset_hdr_rec,
1864                                  p_asset_type_rec          => p_asset_type_rec,
1865                                  p_asset_fin_rec_old       => p_asset_fin_rec_old,
1866                                  p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
1867                                  px_asset_fin_rec_new      => px_asset_fin_rec_new,
1868                                  p_mrc_sob_type_code       => p_mrc_sob_type_code
1869                                 , p_log_level_rec => p_log_level_rec)
1870             THEN
1871                RAISE fareven_err;
1872             END IF;
1873 
1874             IF p_reval_options_rec.value_type = 'NBV' THEN
1875                px_asset_fin_rec_new.COST := px_asset_fin_rec_new.COST + px_asset_fin_rec_new.salvage_value;
1876             END IF;
1877 
1878             IF NOT fa_asset_calc_pvt.calc_rec_cost
1879                                  (p_asset_hdr_rec           => p_asset_hdr_rec,
1880                                   p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
1881                                   px_asset_fin_rec_new      => px_asset_fin_rec_new
1882                                  , p_log_level_rec => p_log_level_rec)
1883             THEN
1884                RAISE fareven_err;
1885             END IF;
1886 
1887             IF NOT fa_asset_calc_pvt.calc_deprn_limit_adj_rec_cost
1888                                 (p_asset_hdr_rec           => p_asset_hdr_rec,
1889                                  p_asset_type_rec          => p_asset_type_rec,
1890                                  p_asset_fin_rec_old       => p_asset_fin_rec_old,
1891                                  p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
1892                                  px_asset_fin_rec_new      => px_asset_fin_rec_new,
1893                                  p_mrc_sob_type_code       => p_mrc_sob_type_code
1894                                 , p_log_level_rec => p_log_level_rec)
1895             THEN
1896                RAISE fareven_err;
1897             END IF;
1898 
1899             IF (p_log_level_rec.statement_level)
1900             THEN
1901                fa_debug_pkg.ADD ('fareven',
1902                                  'after calc_salvage_value SV',
1903                                  px_asset_fin_rec_new.salvage_value
1904                                 , p_log_level_rec => p_log_level_rec);
1905                fa_debug_pkg.ADD ('fareven',
1906                                  'after calc_rec_cost rec cost',
1907                                  px_asset_fin_rec_new.recoverable_cost
1908                                 , p_log_level_rec => p_log_level_rec);
1909                fa_debug_pkg.ADD
1910                                ('fareven',
1911                                 'after calc_adj_rec_cost adj_rec_cost',
1912                                 px_asset_fin_rec_new.adjusted_recoverable_cost
1913                                , p_log_level_rec => p_log_level_rec);
1914             END IF;
1915 
1916             x_reval_out.new_rec_cost := px_asset_fin_rec_new.recoverable_cost;
1917             x_reval_out.new_salvage_value :=
1918                                             px_asset_fin_rec_new.salvage_value;
1919 
1920             IF (l_reval_dep_rsv_flag = 'YES')
1921             THEN
1922                -- If Depreciation Reserve is to be revalued
1923                IF (p_log_level_rec.statement_level)
1924                THEN
1925                   fa_debug_pkg.ADD ('fareven', 'reval_dep_rsv_flag is YES',
1926                                     1, p_log_level_rec => p_log_level_rec);
1927                END IF;
1928 
1929                -- Extend Life by the life extension factor limited by
1930                -- life extension ceiling (if specified) to compute Catchup
1931                -- Depreciation
1932                l_recalc_life :=
1933                   TRUNC (  p_asset_fin_rec_old.life_in_months
1934                          * l_life_extension_factor
1935                         );
1936 
1937                IF (p_log_level_rec.statement_level)
1938                THEN
1939                   fa_debug_pkg.ADD ('fareven', 'RECALC LIFE1', 1, p_log_level_rec => p_log_level_rec);
1940                   fa_debug_pkg.ADD ('fareven',
1941                                     'l_recalc_life1.1',
1942                                     l_recalc_life
1943                                    , p_log_level_rec => p_log_level_rec);
1944                END IF;
1945 
1946                IF (l_life_extension_ceiling <> -1)
1947                THEN
1948                   l_life_ceiling :=
1949                      TRUNC (  p_asset_fin_rec_old.life_in_months
1950                             * l_life_extension_ceiling
1951                            );
1952 
1953                   IF (l_recalc_life > l_life_ceiling)
1954                   THEN
1955                      l_recalc_life := l_life_ceiling;
1956                   END IF;
1957                END IF;
1958 
1959                IF (p_log_level_rec.statement_level)
1960                THEN
1961                   fa_debug_pkg.ADD ('fareven',
1962                                     'l_recalc_life1.2',
1963                                     l_recalc_life
1964                                    , p_log_level_rec => p_log_level_rec);
1965                END IF;
1966 
1967                -- Find if the Depreciation Method for this
1968                -- calculated life exists
1969                IF (   (l_rate_source_rule = fa_std_types.fad_rsr_calc)
1970                    OR (l_rate_source_rule = fa_std_types.fad_rsr_table)
1971                    OR (l_rate_source_rule = fa_std_types.fad_rsr_formula)
1972                   )
1973                THEN
1974                   IF NOT fa_cache_pkg.fazccmt
1975                            (x_method      => p_asset_fin_rec_old.deprn_method_code,
1976                             x_life        => l_recalc_life
1977                            , p_log_level_rec => p_log_level_rec)
1978                   THEN
1979                      IF (l_rate_source_rule = fa_std_types.fad_rsr_calc)
1980                      THEN
1981                         IF (p_log_level_rec.statement_level)
1982                         THEN
1983                            fa_debug_pkg.ADD ('fareven',
1984                                              'calling',
1985                                              'validate_life'
1986                                             , p_log_level_rec => p_log_level_rec);
1987                            fa_debug_pkg.ADD
1988                                        ('fareven',
1989                                         'p_deprn_method',
1990                                         px_asset_fin_rec_new.deprn_method_code
1991                                        , p_log_level_rec => p_log_level_rec);
1992                            fa_debug_pkg.ADD ('fareven',
1993                                              'l_recalc_life',
1994                                              l_recalc_life
1995                                             , p_log_level_rec => p_log_level_rec);
1996                         END IF;
1997 
1998                         IF NOT fa_asset_val_pvt.validate_life
1999                                  (p_deprn_method          => p_asset_fin_rec_old.deprn_method_code,
2000                                   p_rate_source_rule      => l_rate_source_rule,
2001                                   p_life_in_months        => l_recalc_life,
2002                                   p_lim                   => l_recalc_life,
2003                                   p_user_id               => px_trans_rec.who_info.last_updated_by,
2004                                   p_curr_date             => px_trans_rec.who_info.last_update_date,
2005                                   px_new_life             => l_recalc_life,
2006                                   p_calling_fn            => 'fareven'
2007                                  , p_log_level_rec => p_log_level_rec)
2008                         THEN
2009                            RAISE fareven_err;
2010                         END IF;
2011                      ELSE
2012                         IF (p_reval_options_rec.run_mode = 'PREVIEW')
2013                         THEN
2014                            x_reval_out.life_notdef := l_recalc_life;
2015                            x_reval_out.new_life := l_recalc_life;
2016                            GOTO fareven_exit_noerr;
2017                         ELSE
2018                            RAISE fareven_err;
2019                         END IF;                        -- ins_txn_flag = FALSE
2020                      END IF;              -- l_rate_source_rule = FAD_RSR_CALC
2021                   END IF;                            -- end if for not fazccmt
2022                END IF;                             -- CALC or TABLE or FORMULA
2023 
2024                -- Assign all values to the depreciation engine to compute the
2025                -- total depreciation on the asset that would have accrued till
2026                -- this point if the life of the asset had been 'recalc life'
2027                -- and cost had been new_rec_cost
2028                l_dpr_in.adj_cost := x_reval_out.new_rec_cost;
2029                l_dpr_in.rec_cost := x_reval_out.new_rec_cost;
2030                l_dpr_in.reval_amo_basis := 0;
2031                l_dpr_in.deprn_rsv := 0;
2032                l_dpr_in.reval_rsv := 0;
2033                -- Bonus Deprn  YYOON
2034                l_dpr_in.bonus_deprn_rsv := 0;
2035                l_dpr_in.impairment_rsv := 0;
2036                -- End of Bonus Deprn Change
2037                l_dpr_in.adj_rate := p_asset_fin_rec_old.adjusted_rate;
2038                l_dpr_in.rate_adj_factor := 1;
2039                -- Fix For Bug #2018862.  Set formula factor to 1
2040                l_dpr_in.formula_factor := 1;
2041                l_dpr_in.capacity := p_asset_fin_rec_old.production_capacity;
2042                l_dpr_in.adj_capacity :=
2043                                        p_asset_fin_rec_old.production_capacity;
2044                l_dpr_in.ltd_prod := 0;
2045                l_dpr_in.asset_num := p_asset_desc_rec.asset_number;
2046                l_dpr_in.calendar_type := l_deprn_calendar;
2047                l_dpr_in.ceil_name := p_asset_fin_rec_old.ceiling_name;
2048                l_dpr_in.bonus_rule := p_asset_fin_rec_old.bonus_rule;
2049                l_dpr_in.book := p_asset_hdr_rec.book_type_code;
2050                l_dpr_in.method_code := p_asset_fin_rec_old.deprn_method_code;
2051                l_dpr_in.asset_id := p_asset_hdr_rec.asset_id;
2052                l_dpr_in.jdate_in_service :=
2053                   TO_NUMBER
2054                          (TO_CHAR (p_asset_fin_rec_old.date_placed_in_service,
2055                                    'J'
2056                                   )
2057                          );
2058                l_dpr_in.prorate_jdate :=
2059                    TO_NUMBER (TO_CHAR (p_asset_fin_rec_old.prorate_date, 'J'));
2060                l_dpr_in.deprn_start_jdate :=
2061                   TO_NUMBER (TO_CHAR (p_asset_fin_rec_old.deprn_start_date,
2062                                       'J'
2063                                      )
2064                             );
2065                l_dpr_in.jdate_retired := 0;
2066                l_dpr_in.ret_prorate_jdate := 0;
2067                l_dpr_in.life := l_recalc_life;
2068                l_dpr_in.rsv_known_flag := TRUE;
2069                -- copy adjusted recoverable cost to l_dpr_in to
2070                -- make it compatible with faxcde() which supports
2071                -- asset with depreciation limit
2072 
2073                -- **************************************************
2074 -- Assign adj_rec_cost calculated in faucrc to
2075 -- l_dpr_in.adj_rec_cost. For fully reserved assets that
2076 -- should still be fully reserved after life extension
2077 -- factor, will not calculate new reserve correctly if
2078 -- recalculated adj_rec_cost is not passed to faxcde
2079 -- Fix for 1229608 SNARAYAN
2080 -- ***************************************************
2081                l_dpr_in.adj_rec_cost :=
2082                                 px_asset_fin_rec_new.adjusted_recoverable_cost;
2083                --fix for 1666248 - assign new salvage value which was
2084                --calculated based on the percent specified in category
2085                l_dpr_in.salvage_value := x_reval_out.new_salvage_value;
2086                l_dpr_in.salvage_value := px_asset_fin_rec_new.salvage_value;
2087                l_dpr_in.deprn_rounding_flag := 'REV';
2088                -- Copy prior_fy_exp from reval_in_struct to
2089                -- deprn_struct.
2090                l_dpr_in.prior_fy_exp := p_asset_deprn_rec_old.prior_fy_expense;
2091                l_dpr_in.ytd_deprn := p_asset_deprn_rec_old.ytd_deprn;
2092                -- Bonus Deprn  YYOON
2093                l_dpr_in.prior_fy_bonus_exp :=
2094                                   p_asset_deprn_rec_old.prior_fy_bonus_expense;
2095                l_dpr_in.bonus_ytd_deprn :=
2096                                          p_asset_deprn_rec_old.bonus_ytd_deprn;
2097                -- End of Bonus Deprn Change
2098                l_dpr_in.ytd_impairment := p_asset_deprn_rec_old.ytd_impairment;
2099                l_fy := -1;
2100                l_period_num := -1;
2101 
2102                SELECT fy.fiscal_year, cp.period_num
2103                  INTO l_fy, l_period_num
2104                  FROM fa_fiscal_year fy, fa_calendar_periods cp
2105                 WHERE fy.fiscal_year_name = l_fy_name
2106                   AND cp.calendar_type = l_deprn_calendar
2107                   AND p_asset_fin_rec_old.prorate_date BETWEEN cp.start_date
2108                                                            AND cp.end_date
2109                   AND p_asset_fin_rec_old.prorate_date BETWEEN fy.start_date
2110                                                            AND fy.end_date;
2111 
2112                l_dpr_in.y_begin := l_fy;
2113                l_dpr_in.p_cl_begin := 1;
2114                l_fy := -1;
2115                l_period_num := -1;
2116 
2117                SELECT dp.fiscal_year, dp.period_num
2118                  INTO l_fy, l_period_num
2119                  FROM fa_deprn_periods dp
2120                 WHERE dp.book_type_code = p_asset_hdr_rec.book_type_code
2121                   AND dp.period_counter = l_last_period_counter;
2122 
2123                l_dpr_in.y_end := l_fy;
2124                l_dpr_in.p_cl_end := l_period_num;
2125                -- Added for code from fa.m
2126                l_dpr_in.mrc_sob_type_code := p_mrc_sob_type_code;
2127                l_dpr_in.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
2128                l_dpr_in.tracking_method := p_asset_fin_rec_old.tracking_method;
2129                l_dpr_in.allocate_to_fully_ret_flag :=
2130                                 p_asset_fin_rec_old.allocate_to_fully_ret_flag;
2131                l_dpr_in.allocate_to_fully_rsv_flag :=
2132                                 p_asset_fin_rec_old.allocate_to_fully_rsv_flag;
2133                l_dpr_in.excess_allocation_option :=
2134                                   p_asset_fin_rec_old.excess_allocation_option;
2135                l_dpr_in.depreciation_option :=
2136                                        p_asset_fin_rec_old.depreciation_option;
2137                l_dpr_in.member_rollup_flag :=
2138                                         p_asset_fin_rec_old.member_rollup_flag;
2139                l_dpr_in.eofy_reserve := p_asset_fin_rec_old.eofy_reserve;
2140                l_dpr_in.update_override_status := FALSE;
2141                l_dpr_in.over_depreciate_option :=
2142                                     p_asset_fin_rec_old.over_depreciate_option;
2143                l_dpr_in.super_group_id := p_asset_fin_rec_old.super_group_id;
2144                l_dpr_in.COST := px_asset_fin_rec_new.COST;
2145 
2146 	       if (p_reval_options_rec.run_mode = 'PREVIEW') then -- 16275774
2147 	          l_dpr_in.deprn_override_used_by := 'PRE';
2148 	       end if;
2149 
2150 
2151                --l_dpr_in.asset_type := p_asset_type_rec.asset_type;
2152                IF (p_log_level_rec.statement_level)
2153                THEN
2154                   fa_debug_pkg.ADD ('fareven',
2155                                     'CALLING FAXCDE FROM FAREVEN',
2156                                     1
2157                                    , p_log_level_rec => p_log_level_rec);
2158                END IF;
2159 
2160                IF (NOT fa_cde_pkg.faxcde (l_dpr_in,
2161                                           l_dpr_arr,
2162                                           l_dpr_out,
2163                                           l_running_mode,
2164                                           l_ind,
2165                                           p_log_level_rec
2166                                          )
2167                   )
2168                THEN
2169                   RAISE fareven_err;
2170                END IF;
2171 
2172                --Compute Adjustment to Depreciation Reserve
2173                x_reval_out.deprn_rsv_adj :=
2174                   l_dpr_out.new_deprn_rsv
2175                   - p_asset_deprn_rec_old.deprn_reserve;
2176                -- Bonus Deprn YYOON
2177                x_reval_out.bonus_deprn_rsv_adj :=
2178                     l_dpr_out.new_bonus_deprn_rsv
2179                   - p_asset_deprn_rec_old.bonus_deprn_reserve;
2180             -- End of Bonus Deprn Change
2181             ELSE                 -- If Depreciation Reserve is to be revalued.
2182                x_reval_out.deprn_rsv_adj :=
2183                                          -p_asset_deprn_rec_old.deprn_reserve;
2184                x_reval_out.bonus_deprn_rsv_adj :=
2185                                    -p_asset_deprn_rec_old.bonus_deprn_reserve;
2186 
2187                -- Added for SORP
2188                IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
2189                THEN
2190                   IF ABS (x_reval_out.deprn_rsv_adj) <> 0
2191                   THEN
2192                                   --Bug#7553091
2193                      IF (x_reval_out.cost_adj > 0 or x_reval_out.cost_adj=0 )
2194                      THEN
2195                         IF (ABS (x_reval_out.deprn_rsv_adj) >=
2196                                                           x_reval_out.cost_adj
2197                            )
2198                         THEN
2199                            x_reval_out.cost_adj :=
2200                                 (  ABS (x_reval_out.deprn_rsv_adj)
2201                                  - x_reval_out.cost_adj
2202                                 )
2203                               * -1;
2204                         ELSE
2205                            x_reval_out.cost_adj :=
2206                                 x_reval_out.cost_adj
2207                               - ABS (x_reval_out.deprn_rsv_adj);
2208                         END IF;
2209                      END IF;
2210                   END IF;
2211                END IF;
2212             END IF;               --If Depreciation Reserve is to be revalued.
2213 
2214             --GBertot: compute adjustment to YTD deprn.
2215                  -- if it is to be revalued
2216             IF (l_reval_ytd_deprn_flag = 'YES')
2217             THEN
2218                x_reval_out.ytd_deprn_adj :=
2219                                p_asset_deprn_rec_old.ytd_deprn * l_reval_rate;
2220 
2221                -- round to correct precision
2222                IF NOT fa_utils_pkg.faxrnd (x_reval_out.ytd_deprn_adj,
2223                                            p_asset_hdr_rec.book_type_code,
2224                                            p_asset_hdr_rec.set_of_books_id,
2225                                            p_log_level_rec => p_log_level_rec)
2226                THEN
2227                   RAISE fareven_err;
2228                END IF;
2229 
2230                -- Bonus Deprn  YYOON
2231                x_reval_out.bonus_ytd_deprn_adj :=
2232                           p_asset_deprn_rec_old.bonus_ytd_deprn * l_reval_rate;
2233 
2234                IF NOT fa_utils_pkg.faxrnd (x_reval_out.bonus_ytd_deprn_adj,
2235                                            p_asset_hdr_rec.book_type_code,
2236                                            p_asset_hdr_rec.set_of_books_id,
2237                                            p_log_level_rec => p_log_level_rec)
2238                THEN
2239                   RAISE fareven_err;
2240                END IF;
2241             -- End of Bonus Deprn Change
2242             ELSE                        -- if YTD deprn. is not to be revalued
2243                x_reval_out.ytd_deprn_adj := 0;
2244                -- Bonus Deprn  YYOON
2245                x_reval_out.bonus_ytd_deprn_adj := 0;
2246                --End of Bonus Deprn Change
2247                x_reval_out.ytd_impairment_adj := 0;
2248             END IF;                     -- if YTD deprn. is not to be revalued
2249 
2250             -- Compute Adjustment to Revaluation Reserve
2251             IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
2252             THEN
2253                x_reval_out.reval_rsv_adj :=
2254                              x_reval_out.cost_adj - x_reval_out.deprn_rsv_adj;
2255             END IF;
2256 
2257             -- GBertot: Compute adjustment to revaluation reserve due
2258             -- to YTD deprn.
2259             x_reval_out.reval_rsv_adj :=
2260                          x_reval_out.reval_rsv_adj + x_reval_out.ytd_deprn_adj;
2261             fa_debug_pkg.ADD ('SORP Debug',
2262                               'p_asset_deprn_rec_old.impairment_reserve',
2263                               p_asset_deprn_rec_old.impairment_reserve
2264                              , p_log_level_rec => p_log_level_rec);
2265             fa_debug_pkg.ADD ('SORP Debug',
2266                               'x_reval_out.cost_adj',
2267                               x_reval_out.cost_adj
2268                              , p_log_level_rec => p_log_level_rec);
2269 
2270             IF (p_asset_deprn_rec_old.impairment_reserve <> 0)
2271             THEN
2272                IF (x_reval_out.cost_adj > 0)
2273                THEN
2274                   IF (p_asset_deprn_rec_old.impairment_reserve >=
2275                                                           x_reval_out.cost_adj
2276                      )
2277                   THEN
2278                      -- -- Bug 6666666 START  Modified for SORP
2279                      IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
2280                      THEN
2281                         x_reval_out.cost_adj :=
2282                              (  p_asset_deprn_rec_old.impairment_reserve
2283                               - x_reval_out.cost_adj
2284                              )
2285                            * -1;
2286                         x_reval_out.impairment_rsv_adj :=
2287                                   p_asset_deprn_rec_old.impairment_reserve
2288                                   * -1;
2289                      ELSE
2290                         /*Bug#8530038 - */
2291                         x_reval_out.impairment_rsv_adj :=
2292                                   p_asset_deprn_rec_old.impairment_reserve * -1;
2293                      END IF;
2294                   ELSE
2295                      IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
2296                      THEN
2297                         x_reval_out.cost_adj :=
2298                              x_reval_out.cost_adj
2299                            - p_asset_deprn_rec_old.impairment_reserve;
2300                         x_reval_out.impairment_rsv_adj :=
2301                                   p_asset_deprn_rec_old.impairment_reserve
2302                                   * -1;
2303                      ELSE
2304                         x_reval_out.impairment_rsv_adj :=
2305                                  p_asset_deprn_rec_old.impairment_reserve
2306                                  * -1;
2307                         x_reval_out.cost_adj :=
2308                              x_reval_out.cost_adj
2309                            - p_asset_deprn_rec_old.impairment_reserve;
2310                         x_reval_out.deprn_rsv_adj := x_reval_out.deprn_rsv_adj;
2311                         x_reval_out.reval_rsv_adj :=
2312                               x_reval_out.cost_adj - x_reval_out.deprn_rsv_adj;
2313                      END IF;
2314                   END IF;
2315                ELSE                           -- x_reval_out.deprn_rsv_adj < 0
2316                   IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
2317                   THEN
2318                      x_reval_out.impairment_rsv_adj := 0;
2319                   ELSE
2320                      x_reval_out.impairment_rsv_adj :=
2321                                  p_asset_deprn_rec_old.impairment_reserve
2322                                  * -1;
2323                      x_reval_out.cost_adj :=
2324                         x_reval_out.cost_adj + x_reval_out.impairment_rsv_adj;
2325                   END IF;
2326                END IF;
2327             END IF;
2328 
2329             -- -- Bug 6666666 END  Modified for SORP
2330 
2331             -- Compute new life using life extension factor
2332             -- regardless of
2333             -- life extension ceiling
2334             l_recalc_life :=
2335                   p_asset_fin_rec_old.life_in_months * l_life_extension_factor;
2336             l_recalc_life := TRUNC (l_recalc_life);
2337 
2338             IF (p_log_level_rec.statement_level)
2339             THEN
2340                fa_debug_pkg.ADD ('fareven', 'RECALC LIFE2', 1, p_log_level_rec => p_log_level_rec);
2341                fa_debug_pkg.ADD ('fareven', 'l_recalc_life2.1',
2342                                  l_recalc_life, p_log_level_rec => p_log_level_rec);
2343             END IF;
2344 
2345             -- Find if the Depreciation Method for this
2346             -- calculated life exists
2347             IF (   (l_rate_source_rule = fa_std_types.fad_rsr_calc)
2348                 OR (l_rate_source_rule = fa_std_types.fad_rsr_table)
2349                 OR (l_rate_source_rule = fa_std_types.fad_rsr_formula)
2350                )
2351             THEN
2352                IF NOT fa_cache_pkg.fazccmt
2353                           (x_method      => p_asset_fin_rec_old.deprn_method_code,
2354                            x_life        => l_recalc_life
2355                           , p_log_level_rec => p_log_level_rec)
2356                THEN
2357                   IF (p_log_level_rec.statement_level)
2358                   THEN
2359                      fa_debug_pkg.ADD ('fareven', 'fazccmt false', 1, p_log_level_rec => p_log_level_rec);
2360                   END IF;
2361 
2362                   IF (l_rate_source_rule = fa_std_types.fad_rsr_calc)
2363                   THEN
2364                      IF (p_log_level_rec.statement_level)
2365                      THEN
2366                         fa_debug_pkg.ADD ('fareven',
2367                                           'calling validate_life',
2368                                           1
2369                                          , p_log_level_rec => p_log_level_rec);
2370                      END IF;
2371 
2372                      IF NOT fa_asset_val_pvt.validate_life
2373                               (p_deprn_method          => p_asset_fin_rec_old.deprn_method_code,
2374                                p_rate_source_rule      => l_rate_source_rule,
2375                                p_life_in_months        => l_recalc_life,
2376                                p_lim                   => l_recalc_life,
2377                                p_user_id               => px_trans_rec.who_info.last_updated_by,
2378                                p_curr_date             => px_trans_rec.who_info.last_update_date,
2379                                px_new_life             => l_recalc_life,
2380                                p_calling_fn            => 'fareven'
2381                               , p_log_level_rec => p_log_level_rec)
2382                      THEN
2383                         RAISE fareven_err;
2384                      END IF;
2385                   ELSE
2386                      IF (p_reval_options_rec.run_mode = 'PREVIEW')
2387                      THEN
2388                         x_reval_out.life_notdef := l_recalc_life;
2389                         x_reval_out.new_life := l_recalc_life;
2390                         GOTO fareven_exit_noerr;
2391                      ELSE
2392                         -- Display method/life combination that doesn't
2393                         -- exist, and that the program can't create
2394                         RAISE fareven_err;
2395                      END IF;
2396                   END IF;
2397                END IF;
2398             END IF;
2399 
2400             x_reval_out.new_life := l_recalc_life;
2401             px_asset_fin_rec_new.adjusted_cost :=
2402                                          px_asset_fin_rec_new.recoverable_cost;
2403             px_asset_fin_rec_new.life_in_months := l_recalc_life;
2404 
2405             IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
2406             THEN
2407                px_asset_fin_rec_new.COST :=
2408                               p_asset_fin_rec_old.COST + x_reval_out.cost_adj;
2409 
2410                IF p_reval_options_rec.linked_flag = 'YES' and p_reval_gain is not null
2411                THEN
2412                   x_reval_out.reval_rsv_adj := p_reval_gain;
2413                ELSE
2414                   x_reval_out.reval_rsv_adj := l_sorp_reval_adj;
2415                END IF;
2416             END IF;
2417 
2418             IF NOT fa_amort_pvt.faxraf
2419                          (px_trans_rec                => px_trans_rec,
2420                           p_asset_hdr_rec             => p_asset_hdr_rec,
2421                           p_asset_desc_rec            => p_asset_desc_rec,
2422                           p_asset_cat_rec             => p_asset_cat_rec,
2423                           p_asset_type_rec            => p_asset_type_rec,
2424                           p_asset_fin_rec_old         => p_asset_fin_rec_old,
2425                           px_asset_fin_rec_new        => px_asset_fin_rec_new,
2426                           p_asset_deprn_rec           => p_asset_deprn_rec_old,
2427                           p_period_rec                => p_period_rec,
2428                           px_deprn_exp                => l_deprn_exp,
2429                           px_bonus_deprn_exp          => l_bonus_deprn_exp,
2430                           px_impairment_exp           => l_impairment_exp,
2431                           px_reval_deprn_rsv_adj      => x_reval_out.deprn_rsv_adj,
2432                           p_mrc_sob_type_code         => p_mrc_sob_type_code,
2433                           p_running_mode              => fa_std_types.fa_dpr_normal,
2434                           p_used_by_revaluation       => 1
2435                          , p_log_level_rec => p_log_level_rec)
2436             THEN
2437                RAISE fareven_err;
2438             END IF;
2439 
2440             x_reval_out.new_fully_rsvd_revals_ctr :=
2441                              p_asset_fin_rec_old.fully_rsvd_revals_counter + 1;
2442          END IF;
2443       --If fully reserved assets are to be revalued and fully
2444       --reserved reval count is < max fully reserved revaluations
2445       END IF;                                -- If the asset is fully reserved
2446 
2447       -- populate px_asset_fin_rec_new and px_asset_deprn_rec_new
2448       IF (p_asset_type_rec.asset_type = 'CIP')
2449       THEN
2450          px_asset_fin_rec_new.rate_adjustment_factor := 1;
2451       END IF;
2452 
2453       px_asset_fin_rec_new.life_in_months := l_recalc_life;
2454       px_asset_fin_rec_new.fully_rsvd_revals_counter :=
2455                                          x_reval_out.new_fully_rsvd_revals_ctr;
2456       px_asset_deprn_rec_new.deprn_reserve :=
2457                p_asset_deprn_rec_old.deprn_reserve + x_reval_out.deprn_rsv_adj;
2458 
2459       -- Bug  6666666   SORP START
2460       -- Amortization is calculated on total amount credited to Reval Reserve Account.
2461       -- This includes reval gain + reversed deprn effect on reval adjustment amount
2462       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
2463       THEN
2464          px_asset_deprn_rec_new.reval_deprn_reserve :=
2465               p_asset_deprn_rec_old.reval_deprn_reserve
2466             + x_reval_out.reval_rsv_adj;
2467       ELSE
2468          px_asset_deprn_rec_new.reval_deprn_reserve :=
2469               p_asset_deprn_rec_old.reval_deprn_reserve
2470             + x_reval_out.reval_rsv_adj
2471             + NVL (p_reval_rsv_deprn_effect, 0);
2472       END IF;
2473 
2474       -- Bug  6666666   SORP END
2475       px_asset_deprn_rec_new.bonus_deprn_reserve :=
2476            p_asset_deprn_rec_old.bonus_deprn_reserve
2477          + x_reval_out.bonus_deprn_rsv_adj;
2478 
2479       /*ER 14644811 */
2480       px_asset_deprn_rec_new.impairment_reserve :=  p_asset_deprn_rec_old.impairment_reserve + nvl(x_reval_out.impairment_rsv_adj,0) ;
2481 --  populate new reval_amort basis here
2482 -- Bug# 6684245 impairment_reserve added to amortisation basis
2483 -- Bug  6666666   SORP START
2484       IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
2485       THEN
2486          px_asset_fin_rec_new.reval_amortization_basis :=
2487               px_asset_deprn_rec_new.reval_deprn_reserve
2488             + NVL (p_asset_deprn_rec_old.impairment_reserve, 0);
2489       ELSE
2490          px_asset_fin_rec_new.reval_amortization_basis :=
2491                                    px_asset_deprn_rec_new.reval_deprn_reserve;
2492 
2493          IF (p_log_level_rec.statement_level)
2494          THEN
2495             fa_debug_pkg.ADD ('fareven' || ' SORP',
2496                               'Impairment_reserve',
2497                               NVL (p_asset_deprn_rec_old.impairment_reserve,
2498                                    0)
2499                              );
2500             fa_debug_pkg.ADD ('fareven' || ' SORP',
2501                               'reval_deprn_reserve',
2502                               px_asset_deprn_rec_new.reval_deprn_reserve
2503                              , p_log_level_rec => p_log_level_rec);
2504             fa_debug_pkg.ADD ('fareven' || ' SORP',
2505                               'reval_amortization_basis',
2506                               px_asset_fin_rec_new.reval_amortization_basis
2507                              , p_log_level_rec => p_log_level_rec);
2508          END IF;
2509       END IF;
2510 
2511 -- Bug  6666666   SORP END
2512     -- If cost adjustment is not 0 or the new life is not the
2513     -- same as old life and INSERT TRANSACTION_FLAG is TRUE then
2514     -- insert rows in FA_ADJUSTMENTS
2515       IF (p_reval_options_rec.run_mode = 'RUN')
2516       THEN
2517          IF    (   x_reval_out.cost_adj <> 0
2518                 OR p_asset_fin_rec_old.life_in_months <> x_reval_out.new_life
2519                )
2520             OR (   (    x_reval_out.cost_adj = 0
2521                     AND nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
2522                    )
2523                 OR p_asset_fin_rec_old.life_in_months <> x_reval_out.new_life
2524                )
2525          THEN
2526             IF ((  p_asset_deprn_rec_old.deprn_reserve
2527                  + x_reval_out.deprn_rsv_adj
2528                 ) = px_asset_fin_rec_new.recoverable_cost
2529                )
2530             THEN
2531                px_trans_rec.transaction_subtype := 'FULL RSV';
2532                x_reval_out.pc_fully_res := l_last_period_counter + 1;
2533             ELSE
2534                px_trans_rec.transaction_subtype := 'STANDARD';
2535                x_reval_out.pc_fully_res := NULL;
2536             END IF;
2537 
2538             px_asset_fin_rec_new.period_counter_fully_reserved :=
2539                                                       x_reval_out.pc_fully_res;
2540             px_asset_fin_rec_new.period_counter_life_complete :=
2541                                                       x_reval_out.pc_fully_res;
2542 
2543             -- Load Adjustment structure for inserting into table
2544             -- FA_ADJUSTMENTS
2545 
2546             -- Get Asset Cost Account, Revaluation Reserve Account,
2547             -- Depreciation Reserve Account
2548             -- and Bonus Deprn Reserve Account
2549             --  from Category Books Cache
2550             IF (NOT fa_cache_pkg.fazccb
2551                                     (x_book        => p_asset_hdr_rec.book_type_code,
2552                                      x_cat_id      => p_asset_cat_rec.category_id,
2553                                      p_log_level_rec => p_log_level_rec
2554                                     )
2555                )
2556             THEN
2557                RAISE fareven_err;
2558             END IF;
2559 
2560             l_cost_acct := fa_cache_pkg.fazccb_record.asset_cost_acct;
2561             l_cip_cost_acct := fa_cache_pkg.fazccb_record.cip_cost_acct;
2562             l_reval_rsv_acct := fa_cache_pkg.fazccb_record.reval_reserve_acct;
2563             l_deprn_rsv_acct := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
2564             l_deprn_exp_acct := fa_cache_pkg.fazccb_record.deprn_expense_acct;
2565             -- Bonus Deprn - YYOON
2566             --   Getting the bonus deprn expense
2567             --   and the bonus deprn reserve account
2568             --   from asset category
2569             l_adj_in.ACCOUNT :=
2570                            fa_cache_pkg.fazccb_record.bonus_deprn_expense_acct;
2571             l_adj_in.ACCOUNT :=
2572                            fa_cache_pkg.fazccb_record.bonus_deprn_reserve_acct;
2573             --End of Bonus Deprn Change
2574             l_impairment_rsv_acct :=
2575                                 fa_cache_pkg.fazccb_record.impair_reserve_acct;
2576             l_impairment_exp_acct :=
2577                                 fa_cache_pkg.fazccb_record.impair_expense_acct;
2578             l_adj_in.transaction_header_id :=
2579                                             px_trans_rec.transaction_header_id;
2580             l_adj_in.asset_invoice_id := 0;
2581             l_adj_in.source_type_code := 'REVALUATION';
2582 
2583             IF (p_asset_type_rec.asset_type = 'CIP')
2584             THEN
2585                l_adj_in.adjustment_type := 'CIP COST';
2586             ELSE
2587                l_adj_in.adjustment_type := 'COST';
2588             END IF;
2589 
2590             IF (x_reval_out.cost_adj > 0)
2591             THEN
2592                l_adj_in.debit_credit_flag := 'DR';
2593             ELSE
2594                l_adj_in.debit_credit_flag := 'CR';
2595             END IF;
2596 
2597             l_adj_in.code_combination_id := 0;
2598             l_adj_in.book_type_code := p_asset_hdr_rec.book_type_code;
2599             l_adj_in.period_counter_created := l_last_period_counter + 1;
2600             l_adj_in.asset_id := p_asset_hdr_rec.asset_id;
2601             l_adj_in.adjustment_amount := ABS (x_reval_out.cost_adj);
2602             l_adj_in.period_counter_adjusted := l_last_period_counter + 1;
2603             l_adj_in.distribution_id := 0;
2604             l_adj_in.annualized_adjustment := 0;
2605             l_adj_in.last_update_date :=
2606                                         px_trans_rec.who_info.last_update_date;
2607 
2608             IF (p_asset_type_rec.asset_type = 'CIP')
2609             THEN
2610                l_adj_in.ACCOUNT := l_cip_cost_acct;
2611                l_adj_in.account_type := 'CIP_COST_ACCT';
2612             ELSE
2613                l_adj_in.ACCOUNT := l_cost_acct;
2614                l_adj_in.account_type := 'ASSET_COST_ACCT';
2615             END IF;
2616 
2617             l_adj_in.current_units := p_asset_desc_rec.current_units;
2618             l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2619             l_adj_in.selection_thid := 0;
2620             l_adj_in.selection_retid := 0;
2621             l_adj_in.flush_adj_flag := FALSE;
2622             l_adj_in.gen_ccid_flag := TRUE;
2623             l_adj_in.mrc_sob_type_code := p_mrc_sob_type_code;
2624             l_adj_in.set_of_books_id   := p_asset_hdr_rec.set_of_books_id;
2625 
2626             IF (NOT fa_ins_adjust_pkg.faxinaj
2627                                       (l_adj_in,
2628                                        px_trans_rec.who_info.last_update_date,
2629                                        px_trans_rec.who_info.last_updated_by,
2630                                        px_trans_rec.who_info.last_update_login,
2631                                        p_log_level_rec
2632                                       )
2633                )
2634             THEN
2635                IF (p_log_level_rec.statement_level)
2636                THEN
2637                   NULL;
2638                END IF;
2639 
2640                RAISE fareven_err;
2641             END IF;
2642 
2643             l_adj_in.leveling_flag := FALSE;
2644             -- GBertot: Code added to include the depreciation expense
2645             -- account in the revaluation JE
2646             l_adj_in.adjustment_type := 'EXPENSE';
2647 
2648             IF (x_reval_out.ytd_deprn_adj > 0)
2649             THEN
2650                l_adj_in.debit_credit_flag := 'DR';
2651             ELSE
2652                l_adj_in.debit_credit_flag := 'CR';
2653             END IF;
2654 
2655             l_adj_in.code_combination_id := 0;
2656             l_adj_in.book_type_code := p_asset_hdr_rec.book_type_code;
2657             l_adj_in.period_counter_created := l_last_period_counter + 1;
2658             l_adj_in.asset_id := p_asset_hdr_rec.asset_id;
2659             l_adj_in.adjustment_amount := ABS (x_reval_out.ytd_deprn_adj);
2660             l_adj_in.period_counter_adjusted := l_last_period_counter + 1;
2661             l_adj_in.distribution_id := 0;
2662             l_adj_in.annualized_adjustment := 0;
2663             l_adj_in.last_update_date :=
2664                                         px_trans_rec.who_info.last_update_date;
2665             -- BUG# 2150841
2666             -- allow for generating the deprn expense acct
2667             -- via workflow rules
2668             -- bridgway
2669             l_adj_in.ACCOUNT := l_deprn_exp_acct;
2670             l_adj_in.account_type := 'DEPRN_EXPENSE_ACCT';
2671             l_adj_in.current_units := p_asset_desc_rec.current_units;
2672             l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2673             l_adj_in.selection_thid := 0;
2674             l_adj_in.selection_retid := 0;
2675             l_adj_in.flush_adj_flag := FALSE;
2676             l_adj_in.gen_ccid_flag := TRUE;
2677 
2678             IF (NOT fa_ins_adjust_pkg.faxinaj
2679                                       (l_adj_in,
2680                                        px_trans_rec.who_info.last_update_date,
2681                                        px_trans_rec.who_info.last_updated_by,
2682                                        px_trans_rec.who_info.last_update_login,
2683                                        p_log_level_rec
2684                                       )
2685                )
2686             THEN
2687                IF (p_log_level_rec.statement_level)
2688                THEN
2689                   NULL;
2690                END IF;
2691 
2692                RAISE fareven_err;
2693             END IF;
2694 
2695             l_adj_in.gen_ccid_flag := TRUE;
2696 
2697             -- GBertot: End of depreciation expense account coding
2698 
2699             -- Bonus Deprn YYOON
2700             IF (x_reval_out.bonus_ytd_deprn_adj <> 0)
2701             THEN
2702                l_adj_in.adjustment_type := 'BONUS EXPENSE';
2703 
2704                IF (x_reval_out.bonus_ytd_deprn_adj > 0)
2705                THEN
2706                   l_adj_in.debit_credit_flag := 'DR';
2707                ELSE
2708                   l_adj_in.debit_credit_flag := 'CR';
2709                END IF;
2710 
2711                l_adj_in.code_combination_id := 0;
2712                l_adj_in.book_type_code := p_asset_hdr_rec.book_type_code;
2713                l_adj_in.period_counter_created := l_last_period_counter + 1;
2714                l_adj_in.asset_id := p_asset_hdr_rec.asset_id;
2715                l_adj_in.adjustment_amount :=
2716                                          ABS (x_reval_out.bonus_ytd_deprn_adj);
2717                l_adj_in.period_counter_adjusted := l_last_period_counter + 1;
2718                l_adj_in.distribution_id := 0;
2719                l_adj_in.annualized_adjustment := 0;
2720                l_adj_in.last_update_date :=
2721                                         px_trans_rec.who_info.last_update_date;
2722                l_adj_in.ACCOUNT := l_bonus_deprn_exp_acct;
2723                l_adj_in.account_type := 'BONUS_DEPRN_RESERVE_ACCT';
2724                l_adj_in.current_units := p_asset_desc_rec.current_units;
2725                l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2726                l_adj_in.selection_thid := 0;
2727                l_adj_in.selection_retid := 0;
2728                l_adj_in.flush_adj_flag := FALSE;
2729                -- The CCID of BONUS EXPENSE row will be generated
2730                --   through the workflow  YYOON
2731                l_adj_in.gen_ccid_flag := TRUE;
2732 
2733                IF (NOT fa_ins_adjust_pkg.faxinaj
2734                                       (l_adj_in,
2735                                        px_trans_rec.who_info.last_update_date,
2736                                        px_trans_rec.who_info.last_updated_by,
2737                                        px_trans_rec.who_info.last_update_login,
2738                                        p_log_level_rec
2739                                       )
2740                   )
2741                THEN
2742                   IF (p_log_level_rec.statement_level)
2743                   THEN
2744                      NULL;
2745                   END IF;
2746 
2747                   RAISE fareven_err;
2748                END IF;
2749 
2750                l_adj_in.gen_ccid_flag := TRUE;
2751             END IF;
2752 
2753             -- End of Bonus Deprn Change
2754             l_adj_in.adjustment_type := 'REVAL RESERVE';
2755             -- Bug#6666666 END
2756             IF (x_reval_out.reval_rsv_adj > 0)
2757             THEN
2758                l_adj_in.debit_credit_flag := 'CR';
2759             ELSE
2760                l_adj_in.debit_credit_flag := 'DR';
2761             END IF;
2762 
2763             l_adj_in.adjustment_amount := ABS (x_reval_out.reval_rsv_adj);
2764             l_adj_in.ACCOUNT := l_reval_rsv_acct;
2765             -- Added a new mode to differentiate the reval reserve
2766             -- value going
2767             -- from reval engine to fa_adjustments table vs.
2768             -- the reval reserve
2769             -- value going from depreciation engine to fa_deprn_detail
2770             -- table for bug 628863.  aling
2771             l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active_reval;
2772             l_adj_in.account_type := 'REVAL_RESERVE_ACCT';
2773 
2774             IF (x_reval_out.reval_rsv_adj <> 0)
2775             THEN
2776                IF (NOT fa_ins_adjust_pkg.faxinaj
2777                                       (l_adj_in,
2778                                        px_trans_rec.who_info.last_update_date,
2779                                        px_trans_rec.who_info.last_updated_by,
2780                                        px_trans_rec.who_info.last_update_login,
2781                                        p_log_level_rec
2782                                       )
2783                   )
2784                THEN
2785                   IF (p_log_level_rec.statement_level)
2786                   THEN
2787                      NULL;
2788                   END IF;
2789 
2790                   RAISE fareven_err;
2791                END IF;
2792             END IF;
2793 
2794             -- Bug 6666666 Start Additional Accounting Entries For SORP START
2795             fa_debug_pkg.ADD ('SORP ACCOUNTING', 'START', 'START', p_log_level_rec => p_log_level_rec);
2796             fa_debug_pkg.ADD ('SORP_ACCOUNTING',
2797                               'px_trans_rec.mass_reference_id',
2798                               px_trans_rec.mass_reference_id
2799                              , p_log_level_rec => p_log_level_rec);
2800 
2801             IF (    nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') = 'Y'
2802                 AND p_reval_options_rec.linked_flag = 'YES'
2803                 and p_reval_gain is not null
2804                )
2805             THEN
2806                IF NOT fa_sorp_revaluation_pkg.fa_sorp_accounting
2807                                       (p_asset_hdr_rec.asset_id,
2808                                        px_trans_rec.mass_reference_id,
2809                                        l_adj_in,
2810                                        px_trans_rec.who_info.last_updated_by,
2811                                        px_trans_rec.who_info.last_update_date
2812                                       , p_log_level_rec => p_log_level_rec)
2813                THEN
2814                   fa_debug_pkg.ADD ('SORP_ACCOUNTING', 'Failure', 'Failure', p_log_level_rec => p_log_level_rec);
2815                   RAISE fareven_err;
2816                   RETURN FALSE;
2817                END IF;
2818 
2819             END IF;
2820 
2821             l_reval_loss_acct := fa_cache_pkg.fazccb_record.reval_loss_acct;
2822             IF l_reval_loss_exp <> 0 THEN
2823                l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2824                l_adj_in.adjustment_type := 'REVAL LOSS';
2825                l_adj_in.adjustment_amount := l_reval_loss_exp;
2826                l_adj_in.ACCOUNT := l_reval_loss_acct;
2827                l_adj_in.account_type := 'REVAL_LOSS_ACCT';
2828                l_adj_in.flush_adj_flag := TRUE;
2829                l_adj_in.debit_credit_flag := 'CR';
2830 
2831                IF (NOT fa_ins_adjust_pkg.faxinaj
2832                                       (l_adj_in,
2833                                        px_trans_rec.who_info.last_update_date,
2834                                        px_trans_rec.who_info.last_updated_by,
2835                                        px_trans_rec.who_info.last_update_login,
2836                                        p_log_level_rec
2837                                       )
2838                   )
2839                THEN
2840                   IF (p_log_level_rec.statement_level)
2841                   THEN
2842                      fa_debug_pkg.ADD ('fareven', 'failed', 'faxinaj for l_reval_loss_exp', p_log_level_rec => p_log_level_rec);
2843                   END IF;
2844                   raise fareven_err;
2845                END IF;
2846                /* neutralizing entries for revaluation loss expense */
2847                IF NOT FA_SORP_UTIL_PVT.create_sorp_neutral_acct (
2848                                              l_reval_loss_exp
2849                                              , 'Y'
2850                                              , l_adj_in
2851                                              , px_trans_rec.who_info.last_updated_by
2852                                              , px_trans_rec.who_info.last_update_date
2853                                              , p_log_level_rec => p_log_level_rec) THEN
2854                   raise fareven_err;
2855                END IF;
2856             END IF;
2857 
2858             IF l_reval_deprn_exp <> 0 THEN
2859                l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2860                l_adj_in.adjustment_type := 'REVAL LOSS';
2861                l_adj_in.adjustment_amount := l_reval_deprn_exp;
2862                l_adj_in.ACCOUNT := l_reval_loss_acct;
2863                l_adj_in.account_type := 'REVAL_LOSS_ACCT';
2864                l_adj_in.flush_adj_flag := TRUE;
2865                l_adj_in.debit_credit_flag := 'CR';
2866 
2867                IF (NOT fa_ins_adjust_pkg.faxinaj
2868                                       (l_adj_in,
2869                                        px_trans_rec.who_info.last_update_date,
2870                                        px_trans_rec.who_info.last_updated_by,
2871                                        px_trans_rec.who_info.last_update_login,
2872                                        p_log_level_rec
2873                                       )
2874                   )
2875                THEN
2876                   IF (p_log_level_rec.statement_level)
2877                   THEN
2878                      fa_debug_pkg.ADD ('fareven', 'failed', 'faxinaj for l_reval_deprn_exp', p_log_level_rec => p_log_level_rec);
2879                   END IF;
2880                   raise fareven_err;
2881                END IF;
2882                /* neutralizing entries */
2883                IF NOT FA_SORP_UTIL_PVT.create_sorp_neutral_acct (
2884                                              l_reval_deprn_exp
2885                                              , 'Y'
2886                                              , l_adj_in
2887                                              , px_trans_rec.who_info.last_updated_by
2888                                              , px_trans_rec.who_info.last_update_date
2889                                              , p_log_level_rec => p_log_level_rec) THEN
2890                   raise fareven_err;
2891                END IF;
2892 
2893                l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2894                l_adj_in.adjustment_type := 'REVAL OFF EXP';
2895                l_adj_in.adjustment_amount := l_reval_deprn_exp;
2896                l_adj_in.ACCOUNT := l_deprn_exp_acct;
2897                l_adj_in.account_type := 'DEPRN_EXPENSE_ACCT';
2898                l_adj_in.flush_adj_flag := TRUE;
2899                l_adj_in.debit_credit_flag := 'DR';
2900 
2901                IF (NOT fa_ins_adjust_pkg.faxinaj
2902                                       (l_adj_in,
2903                                        px_trans_rec.who_info.last_update_date,
2904                                        px_trans_rec.who_info.last_updated_by,
2905                                        px_trans_rec.who_info.last_update_login,
2906                                        p_log_level_rec
2907                                       )
2908                   )
2909                THEN
2910                   IF (p_log_level_rec.statement_level)
2911                   THEN
2912                      fa_debug_pkg.ADD ('fareven', 'failed', 'faxinaj for l_reval_deprn_exp', p_log_level_rec => p_log_level_rec);
2913                   END IF;
2914                   raise fareven_err;
2915                END IF;
2916                /* neutralizing entries for depreciation expense */
2917                IF NOT FA_SORP_UTIL_PVT.create_sorp_neutral_acct (
2918                                              l_reval_deprn_exp
2919                                              , 'N'
2920                                              , l_adj_in
2921                                              , px_trans_rec.who_info.last_updated_by
2922                                              , px_trans_rec.who_info.last_update_date
2923                                              , p_log_level_rec => p_log_level_rec) THEN
2924                   raise fareven_err;
2925                END IF;
2926             END IF;
2927             -- Bug 6666666 Additioanl Accounting Entries for SORP End
2928                -- Reset the selection mode back to the original
2929             l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2930             l_adj_in.adjustment_type := 'RESERVE';
2931 
2932             IF (x_reval_out.deprn_rsv_adj > 0)
2933             THEN
2934                l_adj_in.debit_credit_flag := 'CR';
2935             ELSE
2936                l_adj_in.debit_credit_flag := 'DR';
2937             END IF;
2938 
2939             l_adj_in.adjustment_amount := ABS (x_reval_out.deprn_rsv_adj);
2940             l_adj_in.ACCOUNT := l_deprn_rsv_acct;
2941             l_adj_in.account_type := 'DEPRN_RESERVE_ACCT';
2942             l_adj_in.flush_adj_flag := TRUE;
2943 
2944             IF (NOT fa_ins_adjust_pkg.faxinaj
2945                                       (l_adj_in,
2946                                        px_trans_rec.who_info.last_update_date,
2947                                        px_trans_rec.who_info.last_updated_by,
2948                                        px_trans_rec.who_info.last_update_login,
2949                                        p_log_level_rec
2950                                       )
2951                )
2952             THEN
2953                IF (p_log_level_rec.statement_level)
2954                THEN
2955                   NULL;
2956                END IF;
2957 
2958                RAISE fareven_err;
2959             END IF;
2960 
2961             -- Bonus Deprn  YYOON
2962             IF (x_reval_out.bonus_deprn_rsv_adj <> 0)
2963             THEN
2964                l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
2965                l_adj_in.adjustment_type := 'BONUS RESERVE';
2966 
2967                IF (x_reval_out.bonus_deprn_rsv_adj > 0)
2968                THEN
2969                   l_adj_in.debit_credit_flag := 'CR';
2970                ELSE
2971                   l_adj_in.debit_credit_flag := 'DR';
2972                END IF;
2973 
2974                l_adj_in.adjustment_amount :=
2975                                          ABS (x_reval_out.bonus_deprn_rsv_adj);
2976                l_adj_in.ACCOUNT := l_bonus_deprn_rsv_acct;
2977                l_adj_in.account_type := 'BONUS_DEPRN_RESERVE_ACCT';
2978                l_adj_in.flush_adj_flag := TRUE;
2979                -- The CCID of BONUS EXPENSE row will be generated
2980                -- through the workflow YYOON
2981                l_adj_in.gen_ccid_flag := TRUE;
2982 
2983                IF (NOT fa_ins_adjust_pkg.faxinaj
2984                                       (l_adj_in,
2985                                        px_trans_rec.who_info.last_update_date,
2986                                        px_trans_rec.who_info.last_updated_by,
2987                                        px_trans_rec.who_info.last_update_login,
2988                                        p_log_level_rec
2989                                       )
2990                   )
2991                THEN
2992                   IF (p_log_level_rec.statement_level)
2993                   THEN
2994                      NULL;
2995                   END IF;
2996 
2997                   RAISE fareven_err;
2998                END IF;
2999             END IF;
3000 
3001             -- End of Bonus Deprn Change
3002             IF (x_reval_out.impairment_rsv_adj <> 0)
3003             THEN
3004                l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
3005                l_adj_in.adjustment_type := 'IMPAIR RESERVE';
3006 
3007                IF (x_reval_out.impairment_rsv_adj > 0)
3008                THEN
3009                   l_adj_in.debit_credit_flag := 'CR';
3010                ELSE
3011                   l_adj_in.debit_credit_flag := 'DR';
3012                END IF;
3013 
3014                l_adj_in.adjustment_amount :=
3015                                           ABS (x_reval_out.impairment_rsv_adj);
3016                l_adj_in.ACCOUNT := l_impairment_rsv_acct;
3017                l_adj_in.account_type := 'IMPAIR_RESERVE_ACCT';
3018                l_adj_in.flush_adj_flag := TRUE;
3019                -- The CCID of IMPAIR RESERVE row will be generated
3020                -- through the workflow
3021                l_adj_in.gen_ccid_flag := TRUE;
3022 
3023                IF (NOT fa_ins_adjust_pkg.faxinaj
3024                                       (l_adj_in,
3025                                        px_trans_rec.who_info.last_update_date,
3026                                        px_trans_rec.who_info.last_updated_by,
3027                                        px_trans_rec.who_info.last_update_login,
3028                                        p_log_level_rec
3029                                       )
3030                   )
3031                THEN
3032                   IF (p_log_level_rec.statement_level)
3033                   THEN
3034                      NULL;
3035                   END IF;
3036 
3037                   RAISE fareven_err;
3038                END IF;
3039 
3040                -- Bug#6666666 SORP START
3041                -- Below part is byepassed due to reason these are not part of SORP accounting
3042                IF nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y'
3043                THEN
3044                   l_adj_in.adjustment_type := 'REVAL RESERVE';
3045 
3046                   IF (x_reval_out.impairment_rsv_adj > 0)
3047                   THEN
3048                      l_adj_in.debit_credit_flag := 'DR';
3049                   ELSE
3050                      l_adj_in.debit_credit_flag := 'CR';
3051                   END IF;
3052 
3053                   l_adj_in.adjustment_amount :=
3054                                           ABS (x_reval_out.impairment_rsv_adj);
3055                   l_adj_in.ACCOUNT := l_reval_rsv_acct;
3056                   l_adj_in.selection_mode :=
3057                                          fa_adjust_type_pkg.fa_aj_active_reval;
3058                   l_adj_in.account_type := 'REVAL_RESERVE_ACCT';
3059 
3060                   IF (x_reval_out.impairment_rsv_adj <> 0)
3061                   THEN
3062                      IF (NOT fa_ins_adjust_pkg.faxinaj
3063                                       (l_adj_in,
3064                                        px_trans_rec.who_info.last_update_date,
3065                                        px_trans_rec.who_info.last_updated_by,
3066                                        px_trans_rec.who_info.last_update_login,
3067                                        p_log_level_rec
3068                                       )
3069                         )
3070                      THEN
3071                         IF (p_log_level_rec.statement_level)
3072                         THEN
3073                            NULL;
3074                         END IF;
3075 
3076                         RAISE fareven_err;
3077                      END IF;
3078                   END IF;
3079                END IF;
3080             -- Bug#6666666 SORP END
3081             END IF;
3082          END IF;            -- If Cost Adjustment != 0 or new life != old life
3083          /*Bug#12571702 - If in period of addition need to updated adj_cost in deprn_summary,
3084                           this is to calculated adj_cost correctly when auto-deprn rollback happens*/
3085          IF p_asset_hdr_rec.period_of_addition = 'Y' THEN
3086             IF p_mrc_sob_type_code = 'P' THEN
3087                   update fa_deprn_summary set adjusted_cost = px_asset_fin_rec_new.adjusted_cost
3088                   where  asset_id = p_asset_hdr_rec.asset_id
3089                   and    book_type_code = p_asset_hdr_rec.book_type_code
3090                   and    period_counter = l_adj_in.period_counter_adjusted - 1;
3091             ELSE
3092                  update fa_mc_deprn_summary set adjusted_cost = px_asset_fin_rec_new.adjusted_cost
3093                  where  asset_id = p_asset_hdr_rec.asset_id
3094                  and    book_type_code = p_asset_hdr_rec.book_type_code
3095                  and    set_of_books_id = p_asset_hdr_rec.set_of_books_id
3096                  and    period_counter = l_adj_in.period_counter_adjusted - 1;
3097             END IF;
3098          END IF;
3099       END IF;                             -- If Insert Transaction Flag = TRUE
3100 
3101       <<fareven_exit_noerr>>
3102       NULL;
3103       RETURN (TRUE);
3104    EXCEPTION
3105       WHEN fareven_err
3106       THEN
3107          fa_srvr_msg.add_message (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3108          RETURN FALSE;
3109       WHEN OTHERS
3110       THEN
3111          fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3112          RETURN FALSE;
3113    END fareven;
3114 
3115    FUNCTION reval_loss (
3116       px_trans_rec             IN OUT NOCOPY   fa_api_types.trans_rec_type,
3117       p_asset_hdr_rec          IN              fa_api_types.asset_hdr_rec_type,
3118       p_asset_desc_rec         IN              fa_api_types.asset_desc_rec_type,
3119       p_asset_type_rec         IN              fa_api_types.asset_type_rec_type,
3120       p_asset_cat_rec          IN              fa_api_types.asset_cat_rec_type,
3121       p_asset_fin_rec_old      IN              fa_api_types.asset_fin_rec_type,
3122       px_asset_fin_rec_new     IN OUT NOCOPY   fa_api_types.asset_fin_rec_type,
3123       p_asset_deprn_rec_old    IN              fa_api_types.asset_deprn_rec_type,
3124       px_asset_deprn_rec_new   IN OUT NOCOPY   fa_api_types.asset_deprn_rec_type,
3125       p_period_rec             IN              fa_api_types.period_rec_type,
3126       p_mrc_sob_type_code      IN              VARCHAR2,
3127       p_reval_options_rec      IN              fa_api_types.reval_options_rec_type,
3128       x_reval_out              OUT NOCOPY      fa_std_types.reval_out_struct,
3129       p_log_level_rec          IN              fa_api_types.log_level_rec_type)
3130       RETURN BOOLEAN
3131    IS
3132 
3133    l_reval_rate    NUMBER := 0;
3134    l_reval_loss    NUMBER := 0;
3135    l_reval_loss_delta NUMBER := 0;
3136    l_asset_fin_rec_adj fa_api_types.asset_fin_rec_type;
3137 
3138    l_adj_in                   fa_adjust_type_pkg.fa_adj_row_struct;
3139    l_cost_acct                VARCHAR2 (25);
3140    l_cip_cost_acct            VARCHAR2 (25);
3141    l_reval_rsv_acct           VARCHAR2 (25);
3142    l_deprn_rsv_acct           VARCHAR2 (25);
3143    l_bonus_deprn_rsv_acct     VARCHAR2 (25);
3144    l_impairment_rsv_acct      VARCHAR2 (25);
3145    l_reval_loss_acct          VARCHAR2 (25);
3146    l_last_period_counter      NUMBER := 0;
3147    l_deprn_exp                NUMBER;
3148    l_calling_fn               VARCHAR2 (40) := 'FA_REVALUATION_PVT.revl_loss';
3149    l_bonus_deprn_exp          NUMBER;
3150    l_impairment_exp           NUMBER;
3151 
3152    farevrl_err EXCEPTION;
3153 
3154    BEGIN
3155 
3156    --Set insert transaction flag
3157    IF (p_reval_options_rec.run_mode = 'RUN')
3158    THEN
3159        x_reval_out.insert_txn_flag := TRUE;
3160    ELSE
3161        x_reval_out.insert_txn_flag := FALSE;
3162    END IF;
3163 
3164    px_trans_rec.transaction_subtype := 'STANDARD';
3165 
3166    g_old_nbv := (  p_asset_fin_rec_old.recoverable_cost
3167                 - p_asset_deprn_rec_old.deprn_reserve
3168                 + NVL(p_asset_fin_rec_old.salvage_value,0)
3169                 - NVL (p_asset_deprn_rec_old.impairment_reserve, 0));
3170 
3171    --Calculate old and new NBV and the cost adjustment amount
3172    --Cost adjustment amount = reval loss + impairment reserve + deprn reserve
3173    IF p_reval_options_rec.value_type = 'NBV'
3174    THEN
3175        g_new_nbv := p_reval_options_rec.reval_percent;
3176    ELSIF p_reval_options_rec.value_type = 'AMT'
3177    THEN
3178        g_new_nbv := g_old_nbv + p_reval_options_rec.reval_percent;
3179    ELSIF p_reval_options_rec.value_type = 'PER'
3180    THEN
3181        l_reval_rate := p_reval_options_rec.reval_percent / 100;
3182        g_new_nbv := g_old_nbv + g_old_nbv*l_reval_rate;
3183        IF NOT fa_utils_pkg.faxrnd (g_new_nbv,
3184                                   p_asset_hdr_rec.book_type_code,
3185                                   p_asset_hdr_rec.set_of_books_id,
3186                                   p_log_level_rec => p_log_level_rec)
3187        THEN
3188          RAISE farevrl_err;
3189        END IF;
3190    END IF;
3191 
3192    --This loss amount is positive
3193    l_reval_loss_delta := g_old_nbv - g_new_nbv;
3194 
3195    x_reval_out.cost_adj := g_new_nbv - p_asset_fin_rec_old.cost;
3196 
3197    IF (NVL(p_asset_deprn_rec_old.reval_deprn_reserve,0) >= (l_reval_loss_delta)) THEN
3198      l_reval_loss := 0;
3199      x_reval_out.reval_rsv_adj := -l_reval_loss_delta;
3200    ELSE
3201      l_reval_loss := l_reval_loss_delta - NVL(p_asset_deprn_rec_old.reval_deprn_reserve,0);
3202      x_reval_out.reval_rsv_adj := -NVL(p_asset_deprn_rec_old.reval_deprn_reserve,0);
3203    END IF;
3204 
3205    --This may not be required
3206    x_reval_out.new_life := p_asset_fin_rec_old.life_in_months;
3207    x_reval_out.new_fully_rsvd_revals_ctr := p_asset_fin_rec_old.fully_rsvd_revals_counter;
3208    x_reval_out.deprn_rsv_adj := -p_asset_deprn_rec_old.deprn_reserve;
3209    x_reval_out.bonus_deprn_rsv_adj := -p_asset_deprn_rec_old.bonus_deprn_reserve;
3210    x_reval_out.ytd_deprn_adj := 0;
3211    x_reval_out.bonus_ytd_deprn_adj := 0;
3212    x_reval_out.ytd_impairment_adj := 0;
3213    x_reval_out.impairment_rsv_adj := -p_asset_deprn_rec_old.impairment_reserve;
3214    --This may not be required ends
3215 
3216    -- Get the new cost/life/
3217    -- /period counter fully reserved
3218 
3219    px_asset_fin_rec_new.cost := p_asset_fin_rec_old.cost + x_reval_out.cost_adj;
3220    px_asset_fin_rec_new.annual_deprn_rounding_flag := 'REV';
3221    IF NOT fa_asset_calc_pvt.calc_salvage_value
3222                    (p_trans_rec               => px_trans_rec,
3223                     p_asset_hdr_rec           => p_asset_hdr_rec,
3224                     p_asset_type_rec          => p_asset_type_rec,
3225                     p_asset_fin_rec_old       => p_asset_fin_rec_old,
3226                     p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
3227                     px_asset_fin_rec_new      => px_asset_fin_rec_new,
3228                     p_mrc_sob_type_code       => p_mrc_sob_type_code,
3229             p_log_level_rec           => p_log_level_rec)
3230    THEN
3231        RAISE farevrl_err;
3232    END IF;
3233 
3234    x_reval_out.new_salvage_value := px_asset_fin_rec_new.salvage_value;
3235 
3236    IF NOT fa_asset_calc_pvt.calc_rec_cost
3237                    (p_asset_hdr_rec           => p_asset_hdr_rec,
3238                     p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
3239                     px_asset_fin_rec_new      => px_asset_fin_rec_new,
3240                     p_log_level_rec           => p_log_level_rec)
3241    THEN
3242       RAISE farevrl_err;
3243    END IF;
3244 
3245    px_asset_fin_rec_new.adjusted_cost := px_asset_fin_rec_new.recoverable_cost;
3246 
3247    IF NOT fa_asset_calc_pvt.calc_deprn_limit_adj_rec_cost
3248                    (p_asset_hdr_rec           => p_asset_hdr_rec,
3249                     p_asset_type_rec          => p_asset_type_rec,
3250                     p_asset_fin_rec_old       => p_asset_fin_rec_old,
3251                     p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
3252                     px_asset_fin_rec_new      => px_asset_fin_rec_new,
3253                     p_mrc_sob_type_code       => p_mrc_sob_type_code,
3254                     p_log_level_rec => p_log_level_rec)
3255    THEN
3256       RAISE farevrl_err;
3257    END IF;
3258 
3259    IF NOT fa_amort_pvt.faxraf
3260                    (px_trans_rec                => px_trans_rec,
3261                     p_asset_hdr_rec             => p_asset_hdr_rec,
3262                     p_asset_desc_rec            => p_asset_desc_rec,
3263                     p_asset_cat_rec             => p_asset_cat_rec,
3264                     p_asset_type_rec            => p_asset_type_rec,
3265                     p_asset_fin_rec_old         => p_asset_fin_rec_old,
3266                     px_asset_fin_rec_new        => px_asset_fin_rec_new,
3267                     p_asset_deprn_rec           => p_asset_deprn_rec_old,
3268                     p_period_rec                => p_period_rec,
3269                     px_deprn_exp                => l_deprn_exp,
3270                     px_bonus_deprn_exp          => l_bonus_deprn_exp,
3271                     px_impairment_exp           => l_impairment_exp,
3272                     px_reval_deprn_rsv_adj      => x_reval_out.deprn_rsv_adj,
3273                     p_mrc_sob_type_code         => p_mrc_sob_type_code,
3274                     p_running_mode              => fa_std_types.fa_dpr_normal,
3275                     p_used_by_revaluation       => 1,
3276                     p_log_level_rec => p_log_level_rec)
3277    THEN
3278        RAISE farevrl_err;
3279    END IF;
3280 
3281    IF (p_asset_type_rec.asset_type = 'CIP')
3282    THEN
3283          px_asset_fin_rec_new.rate_adjustment_factor := 1;
3284    END IF;
3285 
3286    px_asset_fin_rec_new.life_in_months := p_asset_fin_rec_old.life_in_months;
3287    px_asset_fin_rec_new.fully_rsvd_revals_counter := x_reval_out.new_fully_rsvd_revals_ctr;
3288    px_asset_deprn_rec_new.deprn_reserve := p_asset_deprn_rec_old.deprn_reserve + x_reval_out.deprn_rsv_adj;
3289    px_asset_deprn_rec_new.reval_deprn_reserve := p_asset_deprn_rec_old.reval_deprn_reserve + x_reval_out.reval_rsv_adj;
3290    px_asset_deprn_rec_new.bonus_deprn_reserve := p_asset_deprn_rec_old.bonus_deprn_reserve + x_reval_out.bonus_deprn_rsv_adj;
3291    px_asset_fin_rec_new.reval_amortization_basis := px_asset_deprn_rec_new.reval_deprn_reserve;
3292    px_asset_fin_rec_new.period_counter_fully_reserved := p_asset_fin_rec_old.period_counter_fully_reserved;
3293    px_asset_fin_rec_new.period_counter_life_complete := p_asset_fin_rec_old.period_counter_life_complete;
3294 
3295    IF (p_reval_options_rec.run_mode = 'RUN') THEN
3296 
3297           IF (NOT fa_cache_pkg.fazccb
3298                       (x_book        => p_asset_hdr_rec.book_type_code,
3299                        x_cat_id      => p_asset_cat_rec.category_id,
3300                        p_log_level_rec => p_log_level_rec))
3301             THEN
3302                RAISE farevrl_err;
3303             END IF;
3304 
3305           l_cost_acct := fa_cache_pkg.fazccb_record.asset_cost_acct;
3306           l_cip_cost_acct := fa_cache_pkg.fazccb_record.cip_cost_acct;
3307           l_reval_rsv_acct := fa_cache_pkg.fazccb_record.reval_reserve_acct;
3308           l_deprn_rsv_acct := fa_cache_pkg.fazccb_record.deprn_reserve_acct;
3309           l_impairment_rsv_acct := fa_cache_pkg.fazccb_record.impair_reserve_acct;
3310       l_bonus_deprn_rsv_acct := fa_cache_pkg.fazccb_record.bonus_deprn_reserve_acct;
3311       l_reval_loss_acct := fa_cache_pkg.fazccb_record.reval_loss_acct;
3312 
3313           IF NOT fa_cache_pkg.fazccmt
3314                            (x_method      => p_asset_fin_rec_old.deprn_method_code,
3315                             x_life        => p_asset_fin_rec_old.life_in_months
3316                            , p_log_level_rec => p_log_level_rec)
3317           THEN
3318               RAISE farevrl_err;
3319           END IF;
3320 
3321       l_last_period_counter := fa_cache_pkg.fazcbc_record.last_period_counter;
3322           l_adj_in.code_combination_id := 0;
3323           l_adj_in.book_type_code := p_asset_hdr_rec.book_type_code;
3324           l_adj_in.period_counter_created := l_last_period_counter + 1;
3325           l_adj_in.asset_id := p_asset_hdr_rec.asset_id;
3326           l_adj_in.period_counter_adjusted := l_last_period_counter + 1;
3327           l_adj_in.distribution_id := 0;
3328           l_adj_in.annualized_adjustment := 0;
3329           l_adj_in.last_update_date := px_trans_rec.who_info.last_update_date;
3330           l_adj_in.transaction_header_id := px_trans_rec.transaction_header_id;
3331           l_adj_in.asset_invoice_id := 0;
3332           l_adj_in.source_type_code := 'REVALUATION';
3333           l_adj_in.current_units := p_asset_desc_rec.current_units;
3334           l_adj_in.selection_mode := fa_adjust_type_pkg.fa_aj_active;
3335           l_adj_in.selection_thid := 0;
3336           l_adj_in.selection_retid := 0;
3337           l_adj_in.flush_adj_flag := TRUE;
3338           l_adj_in.gen_ccid_flag := TRUE;
3339           l_adj_in.mrc_sob_type_code := p_mrc_sob_type_code;
3340           l_adj_in.set_of_books_id   := p_asset_hdr_rec.set_of_books_id;
3341           l_adj_in.leveling_flag := FALSE; /*Bug 16491346 */
3342 
3343           --Create entry for cost adjustment (CR the amount of change in cost)
3344       IF (p_asset_type_rec.asset_type = 'CIP') THEN
3345                l_adj_in.adjustment_type := 'CIP COST';
3346                l_adj_in.account := l_cip_cost_acct;
3347                l_adj_in.account_type := 'CIP_COST_ACCT';
3348           ELSE
3349                l_adj_in.adjustment_type := 'COST';
3350                l_adj_in.account := l_cost_acct;
3351                l_adj_in.account_type := 'ASSET_COST_ACCT';
3352           END IF;
3353 
3354       l_adj_in.debit_credit_flag := 'CR';
3355       l_adj_in.adjustment_amount := ABS (x_reval_out.cost_adj);
3356 
3357           IF (x_reval_out.cost_adj <> 0) THEN
3358                 IF (NOT fa_ins_adjust_pkg.faxinaj
3359                                   (l_adj_in,
3360                                        px_trans_rec.who_info.last_update_date,
3361                                        px_trans_rec.who_info.last_updated_by,
3362                                        px_trans_rec.who_info.last_update_login,
3363                                        p_log_level_rec
3364                                       )
3365                     )
3366                 THEN
3367                    IF (p_log_level_rec.statement_level)
3368                    THEN
3369                        NULL;
3370                    END IF;
3371 
3372                    RAISE farevrl_err;
3373         END IF;
3374           END IF;
3375 
3376           --Create entry for deprn reserve adjustment (DR the entire reserve amount)
3377           l_adj_in.adjustment_type := 'RESERVE';
3378           l_adj_in.account := l_deprn_rsv_acct;
3379           l_adj_in.account_type := 'DEPRN_RESERVE_ACCT';
3380       l_adj_in.debit_credit_flag := 'DR';
3381       l_adj_in.adjustment_amount := ABS (x_reval_out.deprn_rsv_adj);
3382 
3383           IF (x_reval_out.deprn_rsv_adj <> 0) THEN
3384               IF (NOT fa_ins_adjust_pkg.faxinaj
3385                                   (l_adj_in,
3386                                        px_trans_rec.who_info.last_update_date,
3387                                        px_trans_rec.who_info.last_updated_by,
3388                                        px_trans_rec.who_info.last_update_login,
3389                                        p_log_level_rec
3390                                       )
3391                  )
3392               THEN
3393                  IF (p_log_level_rec.statement_level)
3394                  THEN
3395                      NULL;
3396                  END IF;
3397 
3398                  RAISE farevrl_err;
3399           END IF;
3400           END IF;
3401 
3402           --Create entry for bonus deprn reserve adjustment (DR the entire reserve amount)
3403           l_adj_in.adjustment_type := 'BONUS RESERVE';
3404           l_adj_in.account := l_bonus_deprn_rsv_acct;
3405           l_adj_in.account_type := 'BONUS_DEPRN_RESERVE_ACCT';
3406       l_adj_in.debit_credit_flag := 'DR';
3407       l_adj_in.adjustment_amount := ABS (x_reval_out.bonus_deprn_rsv_adj);
3408 
3409           IF (x_reval_out.bonus_deprn_rsv_adj <> 0) THEN
3410               IF (NOT fa_ins_adjust_pkg.faxinaj
3411                                   (l_adj_in,
3412                                        px_trans_rec.who_info.last_update_date,
3413                                        px_trans_rec.who_info.last_updated_by,
3414                                        px_trans_rec.who_info.last_update_login,
3415                                        p_log_level_rec
3416                                       )
3417                   )
3418              THEN
3419                 IF (p_log_level_rec.statement_level)
3420                 THEN
3421                    NULL;
3422                 END IF;
3423 
3424                 RAISE farevrl_err;
3425              END IF;
3426          END IF;
3427 
3428           --Create entry for reval reserve
3429           l_adj_in.adjustment_type := 'REVAL RESERVE';
3430           l_adj_in.account := l_reval_rsv_acct;
3431           l_adj_in.account_type := 'REVAL_RESERVE_ACCT';
3432       l_adj_in.debit_credit_flag := 'DR';
3433       --l_adj_in.adjustment_amount := ABS (x_reval_out.reval_rsv_adj);
3434       l_adj_in.adjustment_amount := ABS (x_reval_out.reval_rsv_adj) - NVL(p_asset_deprn_rec_old.reval_deprn_reserve,0);
3435 
3436           IF (x_reval_out.reval_rsv_adj <> 0) THEN
3437                 IF (NOT fa_ins_adjust_pkg.faxinaj
3438                                   (l_adj_in,
3439                                        px_trans_rec.who_info.last_update_date,
3440                                        px_trans_rec.who_info.last_updated_by,
3441                                        px_trans_rec.who_info.last_update_login,
3442                                        p_log_level_rec
3443                                       )
3444                    )
3445                 THEN
3446                      IF (p_log_level_rec.statement_level)
3447                      THEN
3448                          NULL;
3449                      END IF;
3450 
3451                 RAISE farevrl_err;
3452         END IF;
3453           END IF;
3454 
3455           --Create entry for capital adjustment and general fund
3456           l_adj_in.adjustment_amount := ABS (l_reval_loss);
3457 
3458           IF (l_reval_loss <> 0) THEN
3459                 IF NOT FA_SORP_UTIL_PVT.create_sorp_neutral_acct ( ABS (l_reval_loss)
3460                                              , 'N'
3461                                              , l_adj_in
3462                                              , px_trans_rec.who_info.last_updated_by
3463                                              , px_trans_rec.who_info.last_update_date
3464                                              , p_log_level_rec => p_log_level_rec) THEN
3465                    raise farevrl_err;
3466                    RETURN FALSE;
3467                 END IF;
3468           END IF;
3469 
3470           --Create entry for impairment reserve
3471           l_adj_in.adjustment_type := 'IMPAIR RESERVE';
3472           l_adj_in.account := l_impairment_rsv_acct;
3473           l_adj_in.account_type := 'IMPAIR_RESERVE_ACCT';
3474       l_adj_in.debit_credit_flag := 'DR';
3475       l_adj_in.adjustment_amount := ABS (x_reval_out.impairment_rsv_adj);
3476 
3477           IF (x_reval_out.impairment_rsv_adj <> 0) THEN
3478                 IF (NOT fa_ins_adjust_pkg.faxinaj
3479                                   (l_adj_in,
3480                                        px_trans_rec.who_info.last_update_date,
3481                                        px_trans_rec.who_info.last_updated_by,
3482                                        px_trans_rec.who_info.last_update_login,
3483                                        p_log_level_rec
3484                                       )
3485                    )
3486                 THEN
3487                    IF (p_log_level_rec.statement_level)
3488                    THEN
3489                       NULL;
3490                    END IF;
3491 
3492                 RAISE farevrl_err;
3493         END IF;
3494           END IF;
3495 
3496           --Create entry for reval loss account
3497           l_adj_in.adjustment_type := 'REVAL LOSS';
3498           l_adj_in.account := l_reval_loss_acct;
3499           l_adj_in.account_type := 'REVAL_LOSS_ACCT';
3500       l_adj_in.debit_credit_flag := 'DR';
3501       l_adj_in.adjustment_amount := ABS (l_reval_loss);
3502 
3503           IF (l_reval_loss <> 0) THEN
3504           IF p_mrc_sob_type_code = 'P' THEN
3505                   update fa_books_summary set reval_loss_balance = reval_loss_balance + ABS (l_reval_loss)
3506                   where  asset_id = p_asset_hdr_rec.asset_id
3507                   and    book_type_code = p_asset_hdr_rec.book_type_code
3508                   and    period_counter >= l_adj_in.period_counter_adjusted ;
3509               ELSE
3510                  update fa_mc_books_summary set reval_loss_balance = reval_loss_balance + ABS (l_reval_loss)
3511                  where  asset_id = p_asset_hdr_rec.asset_id
3512                  and    book_type_code = p_asset_hdr_rec.book_type_code
3513                  and    set_of_books_id = p_asset_hdr_rec.set_of_books_id
3514                  and    period_counter >= l_adj_in.period_counter_adjusted ;
3515               END IF;
3516 
3517               IF (NOT fa_ins_adjust_pkg.faxinaj
3518                                   (l_adj_in,
3519                                        px_trans_rec.who_info.last_update_date,
3520                                        px_trans_rec.who_info.last_updated_by,
3521                                        px_trans_rec.who_info.last_update_login,
3522                                        p_log_level_rec
3523                                       )
3524                   )
3525               THEN
3526                  IF (p_log_level_rec.statement_level)
3527                  THEN
3528                      NULL;
3529                  END IF;
3530 
3531                  RAISE farevrl_err;
3532               END IF;
3533 
3534       END IF;
3535          /*Bug#12571702 - If in period of addition need to updated adj_cost in deprn_summary,
3536                           this is to calculated adj_cost correctly when auto-deprn rollback happens*/
3537           IF p_asset_hdr_rec.period_of_addition = 'Y' THEN
3538               IF p_mrc_sob_type_code = 'P' THEN
3539                   update fa_deprn_summary set adjusted_cost = px_asset_fin_rec_new.adjusted_cost
3540                   where  asset_id = p_asset_hdr_rec.asset_id
3541                   and    book_type_code = p_asset_hdr_rec.book_type_code
3542                   and    period_counter = l_adj_in.period_counter_adjusted - 1;
3543               ELSE
3544                  update fa_mc_deprn_summary set adjusted_cost = px_asset_fin_rec_new.adjusted_cost
3545                  where  asset_id = p_asset_hdr_rec.asset_id
3546                  and    book_type_code = p_asset_hdr_rec.book_type_code
3547                  and    set_of_books_id = p_asset_hdr_rec.set_of_books_id
3548                  and    period_counter = l_adj_in.period_counter_adjusted - 1;
3549               END IF;
3550            END IF;
3551    END IF;
3552 
3553    RETURN TRUE;
3554    EXCEPTION
3555    WHEN OTHERS THEN
3556      fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3557      RETURN FALSE;
3558    END reval_loss;
3559 /*ER 14644811 */
3560 FUNCTION process_depreciation
3561    (p_trans_rec               IN                FA_API_TYPES.trans_rec_type,
3562     p_asset_hdr_rec           IN                FA_API_TYPES.asset_hdr_rec_type,
3563     p_asset_desc_rec          IN                FA_API_TYPES.asset_desc_rec_type,
3564     p_asset_type_rec          IN                FA_API_TYPES.asset_type_rec_type,
3565     p_asset_cat_rec           IN                FA_API_TYPES.asset_cat_rec_type,
3566     p_period_rec              IN                FA_API_TYPES.period_rec_type,
3567     px_asset_fin_rec_old      IN OUT NOCOPY     FA_API_TYPES.asset_fin_rec_type,
3568     px_asset_deprn_rec_old    IN OUT NOCOPY     FA_API_TYPES.asset_deprn_rec_type,
3569     p_reval_options_rec       IN                FA_API_TYPES.reval_options_rec_type,
3570     p_mrc_sob_type_code       IN                VARCHAR2,
3571     p_log_level_rec           IN                FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3572 
3573    l_dpr_row         FA_STD_TYPES.FA_DEPRN_ROW_STRUCT;
3574    l_status          boolean;
3575    l_dpr_in          fa_std_types.dpr_struct;
3576    l_dpr_arr         fa_std_types.dpr_arr_type;
3577    l_running_mode    number := fa_std_types.FA_DPR_NORMAL;
3578    g_temp_integer  binary_integer;
3579 
3580    dpr_err           exception;
3581    l_calling_fn      VARCHAR2 (40) := 'FA_REVALUATION_PVT.process_depreciation';
3582 BEGIN
3583    if (p_log_level_rec.statement_level) then
3584       fa_debug_pkg.add(l_calling_fn,'Process Depreciation', 'BEGIN', p_log_level_rec => p_log_level_rec);
3585    end if;
3586 
3587    if px_asset_fin_rec_old.depreciate_flag = 'NO'  OR p_asset_type_rec.asset_type <> 'CAPITALIZED' then
3588       return TRUE;
3589    end if;
3590    --Prepare deprn_rec to call faxcde
3591    l_dpr_in.asset_num                   := p_asset_desc_rec.asset_number;
3592    l_dpr_in.calendar_type               := fa_cache_pkg.fazcbc_record.deprn_calendar;
3593    l_dpr_in.book                        := p_asset_hdr_rec.book_type_code;
3594    l_dpr_in.asset_id                    := p_asset_hdr_rec.asset_id;
3595    l_dpr_in.set_of_books_id             := p_asset_hdr_rec.set_of_books_id;
3596    l_dpr_in.mrc_sob_type_code           := p_mrc_sob_type_code;
3597    l_dpr_row.period_ctr                 := p_period_rec.period_counter;
3598    l_dpr_row.dist_id                    := 0;
3599    l_dpr_in.rec_cost                    := px_asset_fin_rec_old.recoverable_cost;
3600    l_dpr_in.salvage_value               := px_asset_fin_rec_old.salvage_value;
3601    l_dpr_in.adj_rec_cost                := px_asset_fin_rec_old.adjusted_recoverable_cost;
3602    l_dpr_in.adj_cost                    := px_asset_fin_rec_old.adjusted_cost;
3603    l_dpr_in.old_adj_cost                := px_asset_fin_rec_old.old_adjusted_cost;
3604    l_dpr_in.formula_factor              := px_asset_fin_rec_old.formula_factor;
3605    l_dpr_in.rate_adj_factor             := px_asset_fin_rec_old.rate_adjustment_factor;
3606    l_dpr_in.eofy_reserve                := px_asset_fin_rec_old.eofy_reserve;
3607    l_dpr_in.method_code                 := px_asset_fin_rec_old.deprn_method_code;
3608    l_dpr_in.life                        := px_asset_fin_rec_old.life_in_months;
3609    l_dpr_in.adj_rate                    := px_asset_fin_rec_old.adjusted_rate;
3610    l_dpr_in.capacity                    := px_asset_fin_rec_old.production_capacity;
3611    l_dpr_in.adj_capacity                := px_asset_fin_rec_old.adjusted_capacity;
3612    l_dpr_in.bonus_rule                  := px_asset_fin_rec_old.bonus_rule;
3613    l_dpr_in.ceil_name                   := px_asset_fin_rec_old.ceiling_name;
3614    l_dpr_in.reval_amo_basis             := px_asset_fin_rec_old.reval_amortization_basis;
3615    l_dpr_in.jdate_in_service            := to_number(to_char(px_asset_fin_rec_old.date_placed_in_service, 'J'));
3616    l_dpr_in.prorate_jdate               := to_number(to_char(px_asset_fin_rec_old.prorate_date, 'J'));
3617    l_dpr_in.deprn_start_jdate           := to_number(to_char(px_asset_fin_rec_old.deprn_start_date, 'J'));
3618    l_dpr_in.prorate_date                := px_asset_fin_rec_old.prorate_date;
3619    l_dpr_in.orig_deprn_start_date       := px_asset_fin_rec_old.orig_deprn_start_date;
3620    l_dpr_in.jdate_retired               := 0;
3621    l_dpr_in.ret_prorate_jdate           := 0;
3622    l_dpr_in.ltd_prod                    := px_asset_deprn_rec_old.ltd_production;
3623    l_dpr_in.ytd_deprn                   := px_asset_deprn_rec_old.ytd_deprn;
3624    l_dpr_in.deprn_rsv                   := px_asset_deprn_rec_old.deprn_reserve;
3625    l_dpr_in.reval_rsv                   := px_asset_deprn_rec_old.reval_deprn_reserve;
3626    l_dpr_in.bonus_deprn_exp             := 0;
3627    l_dpr_in.bonus_ytd_deprn             := px_asset_deprn_rec_old.bonus_ytd_deprn;
3628    l_dpr_in.bonus_deprn_rsv             := px_asset_deprn_rec_old.bonus_deprn_reserve;
3629    l_dpr_in.prior_fy_exp                := px_asset_deprn_rec_old.prior_fy_expense;
3630    l_dpr_in.prior_fy_bonus_exp          := px_asset_deprn_rec_old.prior_fy_bonus_expense;
3631    l_dpr_in.impairment_exp              := 0;
3632    l_dpr_in.ytd_impairment              := px_asset_deprn_rec_old.ytd_impairment;
3633    l_dpr_in.impairment_rsv              := px_asset_deprn_rec_old.impairment_reserve;
3634    l_dpr_in.short_fiscal_year_flag      := px_asset_fin_rec_old.short_fiscal_year_flag;
3635    l_dpr_in.conversion_date             := px_asset_fin_rec_old.conversion_date;
3636    l_dpr_in.super_group_id              := px_asset_fin_rec_old.super_group_id;
3637    l_dpr_in.over_depreciate_option      := px_asset_fin_rec_old.over_depreciate_option;
3638    l_dpr_in.tracking_method             := px_asset_fin_rec_old.tracking_method;
3639    l_dpr_in.allocate_to_fully_ret_flag  := px_asset_fin_rec_old.allocate_to_fully_ret_flag;
3640    l_dpr_in.allocate_to_fully_rsv_flag  := px_asset_fin_rec_old.allocate_to_fully_rsv_flag;
3641    l_dpr_in.excess_allocation_option    := px_asset_fin_rec_old.excess_allocation_option;
3642    l_dpr_in.depreciation_option         := px_asset_fin_rec_old.depreciation_option;
3643    l_dpr_in.member_rollup_flag          := px_asset_fin_rec_old.member_rollup_flag;
3644    l_dpr_in.pc_life_end                 := px_asset_fin_rec_old.period_counter_life_complete;
3645    l_dpr_in.deprn_override_flag         := fa_std_types.FA_NO_OVERRIDE;
3646    l_dpr_in.rsv_known_flag              := TRUE;
3647    l_dpr_in.deprn_rounding_flag         := 'REV';
3648    l_dpr_in.used_by_adjustment          := FALSE;
3649    l_running_mode                       := fa_std_types.FA_DPR_NORMAL;
3650    l_dpr_in.y_begin                     := p_period_rec.fiscal_year;
3651    l_dpr_in.p_cl_begin                  := p_period_rec.period_num;
3652    l_dpr_in.y_end                       := p_period_rec.fiscal_year;
3653    l_dpr_in.p_cl_end                    := p_period_rec.period_num;
3654 
3655    if (p_reval_options_rec.run_mode = 'PREVIEW') then --16275774
3656       l_dpr_in.deprn_override_used_by := 'PRE';
3657    end if;
3658 
3659 
3660    --+++++++ Call Depreciation engine to calculate periodic depreciation +++++++
3661    if not FA_CDE_PKG.faxcde(l_dpr_in,
3662                             l_dpr_arr,
3663                             g_dpr_out,
3664                             l_running_mode,
3665                             p_log_level_rec => p_log_level_rec) then
3666       if (p_log_level_rec.statement_level) then
3667          fa_debug_pkg.add(l_calling_fn, 'Error calling','FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
3668       end if;
3669 
3670       raise dpr_err;
3671    end if;
3672 
3673    --Assign value returned by faxcde to attributes in deprn_rec_old and fin_old_rec
3674    px_asset_deprn_rec_old.deprn_amount              := g_dpr_out.deprn_exp ;
3675    px_asset_deprn_rec_old.ytd_deprn                 := g_dpr_out.new_ytd_deprn;
3676    px_asset_deprn_rec_old.deprn_reserve             := g_dpr_out.new_deprn_rsv;
3677    px_asset_fin_rec_old.adjusted_cost               := g_dpr_out.new_adj_cost;
3678    px_asset_deprn_rec_old.bonus_deprn_amount        := g_dpr_out.bonus_deprn_exp;
3679    px_asset_deprn_rec_old.bonus_ytd_deprn           := px_asset_deprn_rec_old.bonus_ytd_deprn + g_dpr_out.bonus_deprn_exp;
3680    px_asset_deprn_rec_old.bonus_deprn_reserve       := g_dpr_out.new_bonus_deprn_rsv;
3681    px_asset_deprn_rec_old.production                := g_dpr_out.prod;
3682    px_asset_deprn_rec_old.ytd_production            := px_asset_deprn_rec_old.ytd_production + g_dpr_out.prod;
3683    px_asset_deprn_rec_old.ltd_production            := g_dpr_out.new_ltd_prod;
3684    px_asset_deprn_rec_old.reval_amortization        := g_dpr_out.reval_amo;
3685    px_asset_deprn_rec_old.reval_amortization_basis  := g_dpr_out.new_reval_amo_basis;
3686    px_asset_deprn_rec_old.reval_deprn_expense       := g_dpr_out.reval_exp;
3687    px_asset_deprn_rec_old.reval_deprn_reserve       := g_dpr_out.new_reval_rsv;
3688    px_asset_deprn_rec_old.prior_fy_expense          := g_dpr_out.new_prior_fy_exp;
3689    px_asset_deprn_rec_old.prior_fy_bonus_expense    := g_dpr_out.new_prior_fy_bonus_exp;
3690    if g_dpr_out.bonus_rate_used = -1 then
3691       g_dpr_out.bonus_rate_used                     := 0;
3692    else
3693       g_dpr_out.bonus_rate_used                     := g_dpr_out.bonus_rate_used;
3694    end if;
3695 
3696    RETURN TRUE;
3697    EXCEPTION
3698       WHEN dpr_err THEN
3699          fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3700          return false;
3701       WHEN OTHERS THEN
3702          fa_srvr_msg.add_sql_error (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3703          RETURN FALSE;
3704 END process_depreciation;
3705 
3706    -- ER 14644811 : New function for rolling back Period End Revaluation
3707    FUNCTION rollback_reval(
3708               p_asset_hdr_rec     IN FA_API_TYPES.asset_hdr_rec_type,
3709               p_thid              IN NUMBER,
3710               p_event_id          IN NUMBER,
3711               p_mrc_sob_type_code IN VARCHAR2,
3712               p_calling_fn        IN VARCHAR2,
3713               p_log_level_rec     IN FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
3714 
3715 
3716    l_trx_source_info              XLA_EVENTS_PUB_PKG.t_event_source_info;
3717    l_security_context             XLA_EVENTS_PUB_PKG.t_security;
3718    l_asset_type_rec               FA_API_TYPES.asset_type_rec_type;
3719    l_trans_rec                    FA_API_TYPES.trans_rec_type;
3720    l_period_rec                   fa_api_types.period_rec_type;
3721 
3722    CURSOR c_get_new_thid IS
3723       select transaction_header_id
3724            , date_effective
3725            , last_updated_by
3726       from   fa_transaction_headers
3727       where  asset_id = p_asset_hdr_rec.asset_id
3728       and    book_type_code = p_asset_hdr_rec.book_type_code
3729       and    date_effective between l_period_rec.period_open_date
3730                                    and nvl(l_period_rec.period_close_date, sysdate)
3731       and   calling_interface = 'FAXRRB'
3732       and   transaction_key = 'RV'
3733       order by transaction_header_id desc;
3734 
3735 
3736    l_reval_count                  NUMBER := 0;
3737    l_event_status                 VARCHAR2(1);
3738 
3739    l_secondary_asset_hdr_rec      fa_api_types.asset_hdr_rec_type;
3740    l_secondary_trans_rec          fa_api_types.trans_rec_type;
3741    l_secondary_sob_id             number;
3742 
3743    reval_err                      EXCEPTION;
3744    l_calling_fn                   VARCHAR2 (40) := 'FA_REVALUATION_PVT.rollback_reval';
3745 
3746    begin
3747 
3748 
3749       if (p_log_level_rec.statement_level) then
3750          fa_debug_pkg.add(l_calling_fn, 'Rollback PDR', '$$$START$$$',p_log_level_rec => p_log_level_rec);
3751          fa_debug_pkg.add(l_calling_fn, 'Book: ', p_asset_hdr_rec.book_type_code,p_log_level_rec => p_log_level_rec);
3752          fa_debug_pkg.add(l_calling_fn, 'TH_Id: ', p_thid,p_log_level_rec => p_log_level_rec);
3753          fa_debug_pkg.add(l_calling_fn, 'Asset_id: ', p_asset_hdr_rec.asset_id,p_log_level_rec => p_log_level_rec);
3754       end if;
3755 
3756       if (NOT FA_UTIL_PVT.get_period_rec (
3757           p_book           => p_asset_hdr_rec.book_type_code,
3758           p_effective_date => NULL,
3759           x_period_rec     => l_period_rec,
3760           p_log_level_rec  => p_log_level_rec -- Bug:5475024
3761          )) then
3762          raise reval_err;
3763       end if;
3764 
3765       if p_event_id is not null then
3766 
3767          -- Get the event status
3768          l_trx_source_info.application_id        := 140;
3769          l_trx_source_info.ledger_id             := p_asset_hdr_rec.set_of_books_id;
3770          l_trx_source_info.source_id_int_1       := p_thid ;
3771          l_trx_source_info.source_id_char_1      := p_asset_hdr_rec.book_type_code;
3772          l_trx_source_info.entity_type_code      := 'TRANSACTIONS';
3773 
3774          -- check the event status
3775 
3776          l_event_status := XLA_EVENTS_PUB_PKG.get_event_status
3777                         (p_event_source_info            => l_trx_source_info,
3778                          p_event_id                     => p_event_id,
3779                          p_valuation_method             => p_asset_hdr_rec.book_type_code,
3780                          p_security_context             => l_security_context);
3781 
3782       else
3783          -- p_event_id will be null for alc,
3784          -- we need to find out if the reval transaction is deleted or not
3785 
3786          select count(1)
3787          into   l_reval_count
3788          from   fa_transaction_headers
3789          where  transaction_header_id = p_thid;
3790 
3791          if l_reval_count = 0 then /* Event and Reval transaction is deleted */
3792             l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_UNPROCESSED;
3793          else
3794             l_event_status := XLA_EVENTS_PUB_PKG.C_EVENT_PROCESSED;
3795          end if;
3796 
3797       end if;
3798 
3799       if (p_log_level_rec.statement_level) then
3800          fa_debug_pkg.add(l_calling_fn, 'event status ', l_event_status,p_log_level_rec => p_log_level_rec);
3801       end if;
3802 
3803       -- If event is not processed no need to create rollback event
3804       if l_event_status  <> XLA_EVENTS_PUB_PKG.C_EVENT_PROCESSED then
3805 
3806          -- Delete the event if primary
3807          if p_mrc_sob_type_code <> 'R' then
3808 
3809             if (p_log_level_rec.statement_level) then
3810                   fa_debug_pkg.add(l_calling_fn,'Deleting unprocessed Reval event: '
3811                                                , p_event_id,p_log_level_rec => p_log_level_rec);
3812             end if;
3813 
3814             if not fa_xla_events_pvt.delete_transaction_event
3815                  (p_ledger_id             => p_asset_hdr_rec.set_of_books_id,
3816                   p_transaction_header_id => p_thid,
3817                   p_book_type_code        => p_asset_hdr_rec.book_type_code,
3818                   p_calling_fn            => l_calling_fn
3819                   ,p_log_level_rec => p_log_level_rec) then
3820                if (p_log_level_rec.statement_level) then
3821                   fa_debug_pkg.add(l_calling_fn,'Failed ','delete_transaction_event',p_log_level_rec => p_log_level_rec);
3822                end if;
3823                raise reval_err;
3824             end if;
3825 
3826             if (p_log_level_rec.statement_level) then
3827                   fa_debug_pkg.add(l_calling_fn,'Deleting accounting entries of reval thid: '
3828                                                , p_thid,p_log_level_rec => p_log_level_rec);
3829             end if;
3830 
3831             delete from fa_books
3832             where transaction_header_id_out is null
3833               and transaction_header_id_in = p_thid
3834               and book_type_code = p_asset_hdr_rec.book_type_code
3835               and asset_id = p_asset_hdr_rec.asset_id ;
3836 
3837             delete from fa_adjustments
3838             where  transaction_header_id = p_thid
3839             and    asset_id = p_asset_hdr_rec.asset_id
3840             and    book_type_code = p_asset_hdr_rec.book_type_code
3841             and    period_counter_created = l_period_rec.period_counter;
3842 
3843             -- Delete fa_mass_revaluations / fa_mass_revaluation_rules also ?
3844             -- Or update the status to DELETED / ROLLBACKED
3845             -- Can't do as the batch may contain other assets also
3846 
3847             /*update fa_mass_Revaluations
3848                set status = 'ROLLBACKED'
3849              where */
3850 
3851             update fa_books
3852             set date_ineffective = null
3853               , transaction_header_id_out = null
3854             where asset_id = p_asset_hdr_rec.asset_id
3855             and   book_type_code = p_asset_hdr_rec.book_type_code
3856             and   transaction_header_id_out = p_thid;
3857 
3858             delete from fa_transaction_headers
3859             where transaction_header_id = p_thid;
3860 
3861          else
3862 
3863             -- Transaction / event is already deleted in the primary loop
3864             -- Need to handle only fa_mc_bk / adj
3865 
3866             if (p_log_level_rec.statement_level) then
3867                   fa_debug_pkg.add(l_calling_fn,'ALC Deleting accounting entries of reval thid: '
3868                                                , p_thid,p_log_level_rec => p_log_level_rec);
3869             end if;
3870 
3871             delete from fa_mc_books
3872             where transaction_header_id_out is null
3873               and transaction_header_id_in = p_thid
3874               and book_type_code = p_asset_hdr_rec.book_type_code
3875               and asset_id = p_asset_hdr_rec.asset_id
3876               and set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3877 
3878             delete from fa_mc_adjustments
3879             where  transaction_header_id = p_thid
3880             and    asset_id = p_asset_hdr_rec.asset_id
3881             and    book_type_code = p_asset_hdr_rec.book_type_code
3882             and    period_counter_created = l_period_rec.period_counter
3883             and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3884 
3885             update fa_mc_books
3886             set date_ineffective = null
3887               , transaction_header_id_out = null
3888             where asset_id = p_asset_hdr_rec.asset_id
3889             and   book_type_code = p_asset_hdr_rec.book_type_code
3890             and   transaction_header_id_out = p_thid
3891             and   set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3892 
3893          end if;
3894 
3895       elsif (l_event_status = XLA_EVENTS_PUB_PKG.C_EVENT_PROCESSED) then
3896 
3897          -- create rollback event and transaction
3898          if p_mrc_sob_type_code <> 'R' then
3899 
3900             SELECT fa_transaction_headers_s.nextval
3901             INTO   l_trans_rec.transaction_header_id
3902             FROM   DUAL;
3903 
3904             --
3905             -- Populating for calling FA_XLA_EVENTS_PVT.create_transaction_event
3906             --
3907             l_trans_rec.transaction_subtype := 'STANDARD';
3908             l_trans_rec.transaction_type_code := 'REVALUATION';
3909             l_trans_rec.transaction_key := 'RV';
3910             l_trans_rec.transaction_date_entered := greatest(l_period_rec.calendar_period_open_date,
3911                                                              least(sysdate,l_period_rec.calendar_period_close_date));
3912             --l_trans_rec.amortization_start_date := l_trans_rec.transaction_date_entered;
3913             l_trans_rec.calling_interface := 'FAXRRB';
3914             l_trans_rec.who_info.last_update_date      := sysdate;
3915             l_trans_rec.who_info.last_updated_by       := fnd_global.user_id;
3916             l_trans_rec.who_info.created_by            := fnd_global.user_id;
3917             l_trans_rec.who_info.creation_date         := sysdate;
3918 
3919             if not FA_UTIL_PVT.get_asset_type_rec
3920                    (p_asset_hdr_rec         => p_asset_hdr_rec,
3921                     px_asset_type_rec       => l_asset_type_rec,
3922                     p_date_effective        => null, p_log_level_rec => p_log_level_rec) then
3923                raise reval_err;
3924             end if;
3925 
3926             if (p_log_level_rec.statement_level) then
3927                   fa_debug_pkg.add(l_calling_fn,'Creating rollback reval transaction event'
3928                                                , p_thid,p_log_level_rec => p_log_level_rec);
3929             end if;
3930 
3931             if not FA_XLA_EVENTS_PVT.create_transaction_event(
3932                         p_asset_hdr_rec          => p_asset_hdr_rec,
3933                         p_asset_type_rec         => l_asset_type_rec,
3934                         px_trans_rec             => l_trans_rec,
3935                         p_event_status           => NULL,
3936                         p_calling_fn             => l_calling_fn
3937                         ,p_log_level_rec => p_log_level_rec) then
3938                if (p_log_level_rec.statement_level) then
3939                   fa_debug_pkg.add(l_calling_fn, 'ERROR', 'Calling create_transaction_event'
3940                                  ,p_log_level_rec => p_log_level_rec);
3941                end if;
3942                raise reval_err;
3943             end if;
3944 
3945             /*=================================================================
3946             Secondary Changes Start
3947             If primary and secondary sob_id is different then we need to
3948             create/update/delete event for secondary ledger*/
3949 
3950             l_secondary_sob_id := FA_XLA_EVENTS_PVT.get_secondary_sob_id(p_asset_hdr_rec.book_type_code);
3951             if (l_secondary_sob_id is not null) then
3952                l_secondary_asset_hdr_rec := p_asset_hdr_rec;
3953                l_secondary_trans_rec     := l_trans_rec;
3954 
3955                l_secondary_asset_hdr_rec.set_of_books_id := l_secondary_sob_id;
3956 
3957                if not fa_xla_events_pvt.create_transaction_event
3958                   (p_asset_hdr_rec    => l_secondary_asset_hdr_rec,
3959                    p_asset_type_rec   => l_asset_type_rec,
3960                    px_trans_rec       => l_secondary_trans_rec,
3961                    p_event_status     => NULL,
3962                    p_calling_fn       => l_calling_fn,
3963                    p_log_level_rec    => p_log_level_rec) then
3964                   raise reval_err;
3965                end if;
3966             end if;
3967             /*Secondary Changes End
3968             ==================================================================*/
3969 
3970 
3971             if (p_log_level_rec.statement_level) then
3972                   fa_debug_pkg.add(l_calling_fn,'Inserting new thid: '
3973                                                , l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
3974             end if;
3975 
3976             INSERT INTO FA_TRANSACTION_HEADERS(
3977                     TRANSACTION_HEADER_ID
3978                   , BOOK_TYPE_CODE
3979                   , ASSET_ID
3980                   , TRANSACTION_TYPE_CODE
3981                   , TRANSACTION_DATE_ENTERED
3982                   , DATE_EFFECTIVE
3983                   , LAST_UPDATE_DATE
3984                   , LAST_UPDATED_BY
3985                   , TRANSACTION_NAME
3986                   , INVOICE_TRANSACTION_ID
3987                   , SOURCE_TRANSACTION_HEADER_ID
3988                   , MASS_REFERENCE_ID
3989                   , LAST_UPDATE_LOGIN
3990                   , TRANSACTION_SUBTYPE
3991                   , ATTRIBUTE1
3992                   , ATTRIBUTE2
3993                   , ATTRIBUTE3
3994                   , ATTRIBUTE4
3995                   , ATTRIBUTE5
3996                   , ATTRIBUTE6
3997                   , ATTRIBUTE7
3998                   , ATTRIBUTE8
3999                   , ATTRIBUTE9
4000                   , ATTRIBUTE10
4001                   , ATTRIBUTE11
4002                   , ATTRIBUTE12
4003                   , ATTRIBUTE13
4004                   , ATTRIBUTE14
4005                   , ATTRIBUTE15
4006                   , ATTRIBUTE_CATEGORY_CODE
4007                   , TRANSACTION_KEY
4008                   , AMORTIZATION_START_DATE
4009                   , CALLING_INTERFACE
4010                   , MASS_TRANSACTION_ID
4011                   , MEMBER_TRANSACTION_HEADER_ID
4012                   , TRX_REFERENCE_ID
4013                   , EVENT_ID
4014             ) select
4015                     l_trans_rec.transaction_header_id --TRANSACTION_HEADER_ID
4016                   , BOOK_TYPE_CODE
4017                   , ASSET_ID
4018                   , TRANSACTION_TYPE_CODE
4019                   , l_trans_rec.transaction_date_entered
4020                   , l_trans_rec.who_info.last_update_date -- DATE_EFFECTIVE
4021                   , l_trans_rec.who_info.last_update_date -- LAST_UPDATE_DATE
4022                   , l_trans_rec.who_info.last_updated_by
4023                   , TRANSACTION_NAME
4024                   , INVOICE_TRANSACTION_ID
4025                   , SOURCE_TRANSACTION_HEADER_ID
4026                   , MASS_REFERENCE_ID
4027                   , LAST_UPDATE_LOGIN
4028                   , TRANSACTION_SUBTYPE
4029                   , ATTRIBUTE1
4030                   , ATTRIBUTE2
4031                   , ATTRIBUTE3
4032                   , ATTRIBUTE4
4033                   , ATTRIBUTE5
4034                   , ATTRIBUTE6
4035                   , ATTRIBUTE7
4036                   , ATTRIBUTE8
4037                   , ATTRIBUTE9
4038                   , ATTRIBUTE10
4039                   , ATTRIBUTE11
4040                   , ATTRIBUTE12
4041                   , ATTRIBUTE13
4042                   , ATTRIBUTE14
4043                   , ATTRIBUTE15
4044                   , ATTRIBUTE_CATEGORY_CODE
4045                   , l_trans_rec.TRANSACTION_KEY
4046                   , AMORTIZATION_START_DATE
4047                   , l_trans_rec.calling_interface -- CALLING_INTERFACE
4048                   , MASS_TRANSACTION_ID
4049                   , MEMBER_TRANSACTION_HEADER_ID
4050                   , TRX_REFERENCE_ID
4051                   , l_trans_rec.event_id -- EVENT_ID
4052               from  fa_transaction_headers
4053               where asset_id = p_asset_hdr_rec.asset_id
4054               and   book_type_code = p_asset_hdr_rec.book_type_code
4055               and   transaction_header_id = p_thid
4056             ;
4057 
4058             INSERT INTO FA_ADJUSTMENTS(
4059                 TRANSACTION_HEADER_ID
4060               , SOURCE_TYPE_CODE
4061               , ADJUSTMENT_TYPE
4062               , DEBIT_CREDIT_FLAG
4063               , CODE_COMBINATION_ID
4064               , BOOK_TYPE_CODE
4065               , ASSET_ID
4066               , ADJUSTMENT_AMOUNT
4067               , DISTRIBUTION_ID
4068               , LAST_UPDATE_DATE
4069               , LAST_UPDATED_BY
4070               , LAST_UPDATE_LOGIN
4071               , ANNUALIZED_ADJUSTMENT
4072               , PERIOD_COUNTER_ADJUSTED
4073               , PERIOD_COUNTER_CREATED
4074               , ASSET_INVOICE_ID
4075               , GLOBAL_ATTRIBUTE1
4076               , GLOBAL_ATTRIBUTE2
4077               , GLOBAL_ATTRIBUTE3
4078               , GLOBAL_ATTRIBUTE4
4079               , GLOBAL_ATTRIBUTE5
4080               , GLOBAL_ATTRIBUTE6
4081               , GLOBAL_ATTRIBUTE7
4082               , GLOBAL_ATTRIBUTE8
4083               , GLOBAL_ATTRIBUTE9
4084               , GLOBAL_ATTRIBUTE10
4085               , GLOBAL_ATTRIBUTE11
4086               , GLOBAL_ATTRIBUTE12
4087               , GLOBAL_ATTRIBUTE13
4088               , GLOBAL_ATTRIBUTE14
4089               , GLOBAL_ATTRIBUTE15
4090               , GLOBAL_ATTRIBUTE16
4091               , GLOBAL_ATTRIBUTE17
4092               , GLOBAL_ATTRIBUTE18
4093               , GLOBAL_ATTRIBUTE19
4094               , GLOBAL_ATTRIBUTE20
4095               , GLOBAL_ATTRIBUTE_CATEGORY
4096               , DEPRN_OVERRIDE_FLAG
4097               , TRACK_MEMBER_FLAG
4098               , ADJUSTMENT_LINE_ID
4099               , SOURCE_LINE_ID
4100               , SOURCE_DEST_CODE
4101             ) select
4102                 l_trans_rec.transaction_header_id --  TRANSACTION_HEADER_ID
4103               , SOURCE_TYPE_CODE
4104               , ADJUSTMENT_TYPE
4105               , decode(debit_credit_flag, 'DR', 'CR', 'DR') --DEBIT_CREDIT_FLAG
4106               , CODE_COMBINATION_ID
4107               , BOOK_TYPE_CODE
4108               , ASSET_ID
4109               , ADJUSTMENT_AMOUNT
4110               , DISTRIBUTION_ID
4111               , l_trans_rec.who_info.last_update_date --LAST_UPDATE_DATE
4112               , l_trans_rec.who_info.last_updated_by --LAST_UPDATED_BY
4113               , l_trans_rec.who_info.last_updated_by --LAST_UPDATE_LOGIN
4114               , ANNUALIZED_ADJUSTMENT
4115               , PERIOD_COUNTER_ADJUSTED
4116               , PERIOD_COUNTER_CREATED
4117               , ASSET_INVOICE_ID
4118               , GLOBAL_ATTRIBUTE1
4119               , GLOBAL_ATTRIBUTE2
4120               , GLOBAL_ATTRIBUTE3
4121               , GLOBAL_ATTRIBUTE4
4122               , GLOBAL_ATTRIBUTE5
4123               , GLOBAL_ATTRIBUTE6
4124               , GLOBAL_ATTRIBUTE7
4125               , GLOBAL_ATTRIBUTE8
4126               , GLOBAL_ATTRIBUTE9
4127               , GLOBAL_ATTRIBUTE10
4128               , GLOBAL_ATTRIBUTE11
4129               , GLOBAL_ATTRIBUTE12
4130               , GLOBAL_ATTRIBUTE13
4131               , GLOBAL_ATTRIBUTE14
4132               , GLOBAL_ATTRIBUTE15
4133               , GLOBAL_ATTRIBUTE16
4134               , GLOBAL_ATTRIBUTE17
4135               , GLOBAL_ATTRIBUTE18
4136               , GLOBAL_ATTRIBUTE19
4137               , GLOBAL_ATTRIBUTE20
4138               , GLOBAL_ATTRIBUTE_CATEGORY
4139               , DEPRN_OVERRIDE_FLAG
4140               , TRACK_MEMBER_FLAG
4141               , fa_adjustments_s.nextval -- ADJUSTMENT_LINE_ID
4142               , SOURCE_LINE_ID
4143               , SOURCE_DEST_CODE
4144               from fa_adjustments
4145               where asset_id = p_asset_hdr_rec.asset_id
4146               and   book_type_code = p_asset_hdr_rec.book_type_code
4147               and   transaction_header_id = p_thid
4148             ;
4149 
4150             UPDATE FA_BOOKS
4151                SET    DATE_INEFFECTIVE = l_trans_rec.who_info.last_update_date
4152                     , last_update_date = l_trans_rec.who_info.last_update_date
4153                     , TRANSACTION_HEADER_ID_OUT = l_trans_rec.transaction_header_id
4154             WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
4155             AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
4156             AND    TRANSACTION_HEADER_ID_in = p_thid
4157             AND    TRANSACTION_HEADER_ID_OUT is null;
4158 
4159             INSERT INTO FA_BOOKS( BOOK_TYPE_CODE
4160                                 , ASSET_ID
4161                                 , DATE_PLACED_IN_SERVICE
4162                                 , DATE_EFFECTIVE
4163                                 , DEPRN_START_DATE
4164                                 , DEPRN_METHOD_CODE
4165                                 , LIFE_IN_MONTHS
4166                                 , RATE_ADJUSTMENT_FACTOR
4167                                 , ADJUSTED_COST
4168                                 , COST
4169                                 , ORIGINAL_COST
4170                                 , SALVAGE_VALUE
4171                                 , PRORATE_CONVENTION_CODE
4172                                 , PRORATE_DATE
4173                                 , COST_CHANGE_FLAG
4174                                 , ADJUSTMENT_REQUIRED_STATUS
4175                                 , CAPITALIZE_FLAG
4176                                 , RETIREMENT_PENDING_FLAG
4177                                 , DEPRECIATE_FLAG
4178                                 , LAST_UPDATE_DATE
4179                                 , LAST_UPDATED_BY
4180                                 , TRANSACTION_HEADER_ID_IN
4181                                 , ITC_AMOUNT_ID
4182                                 , ITC_AMOUNT
4183                                 , RETIREMENT_ID
4184                                 , TAX_REQUEST_ID
4185                                 , ITC_BASIS
4186                                 , BASIC_RATE
4187                                 , ADJUSTED_RATE
4188                                 , BONUS_RULE
4189                                 , CEILING_NAME
4190                                 , RECOVERABLE_COST
4191                                 , ADJUSTED_CAPACITY
4192                                 , FULLY_RSVD_REVALS_COUNTER
4193                                 , IDLED_FLAG
4194                                 , PERIOD_COUNTER_CAPITALIZED
4195                                 , PERIOD_COUNTER_FULLY_RESERVED
4196                                 , PERIOD_COUNTER_FULLY_RETIRED
4197                                 , PRODUCTION_CAPACITY
4198                                 , REVAL_AMORTIZATION_BASIS
4199                                 , REVAL_CEILING
4200                                 , UNIT_OF_MEASURE
4201                                 , UNREVALUED_COST
4202                                 , ANNUAL_DEPRN_ROUNDING_FLAG
4203                                 , PERCENT_SALVAGE_VALUE
4204                                 , ALLOWED_DEPRN_LIMIT
4205                                 , ALLOWED_DEPRN_LIMIT_AMOUNT
4206                                 , PERIOD_COUNTER_LIFE_COMPLETE
4207                                 , ADJUSTED_RECOVERABLE_COST
4208                                 , ANNUAL_ROUNDING_FLAG
4209                                 , GLOBAL_ATTRIBUTE1
4210                                 , GLOBAL_ATTRIBUTE2
4211                                 , GLOBAL_ATTRIBUTE3
4212                                 , GLOBAL_ATTRIBUTE4
4213                                 , GLOBAL_ATTRIBUTE5
4214                                 , GLOBAL_ATTRIBUTE6
4215                                 , GLOBAL_ATTRIBUTE7
4216                                 , GLOBAL_ATTRIBUTE8
4217                                 , GLOBAL_ATTRIBUTE9
4218                                 , GLOBAL_ATTRIBUTE10
4219                                 , GLOBAL_ATTRIBUTE11
4220                                 , GLOBAL_ATTRIBUTE12
4221                                 , GLOBAL_ATTRIBUTE13
4222                                 , GLOBAL_ATTRIBUTE14
4223                                 , GLOBAL_ATTRIBUTE15
4224                                 , GLOBAL_ATTRIBUTE16
4225                                 , GLOBAL_ATTRIBUTE17
4226                                 , GLOBAL_ATTRIBUTE18
4227                                 , GLOBAL_ATTRIBUTE19
4228                                 , GLOBAL_ATTRIBUTE20
4229                                 , GLOBAL_ATTRIBUTE_CATEGORY
4230                                 , EOFY_ADJ_COST
4231                                 , EOFY_FORMULA_FACTOR
4232                                 , SHORT_FISCAL_YEAR_FLAG
4233                                 , CONVERSION_DATE
4234                                 , ORIGINAL_DEPRN_START_DATE
4235                                 , REMAINING_LIFE1
4236                                 , REMAINING_LIFE2
4237                                 , OLD_ADJUSTED_COST
4238                                 , FORMULA_FACTOR
4239                                 , GROUP_ASSET_ID
4240                                 , SALVAGE_TYPE
4241                                 , DEPRN_LIMIT_TYPE
4242                                 , REDUCTION_RATE
4243                                 , REDUCE_ADDITION_FLAG
4244                                 , REDUCE_ADJUSTMENT_FLAG
4245                                 , REDUCE_RETIREMENT_FLAG
4246                                 , RECOGNIZE_GAIN_LOSS
4247                                 , RECAPTURE_RESERVE_FLAG
4248                                 , LIMIT_PROCEEDS_FLAG
4249                                 , TERMINAL_GAIN_LOSS
4250                                 , TRACKING_METHOD
4251                                 , EXCLUDE_FULLY_RSV_FLAG
4252                                 , EXCESS_ALLOCATION_OPTION
4253                                 , DEPRECIATION_OPTION
4254                                 , MEMBER_ROLLUP_FLAG
4255                                 , ALLOCATE_TO_FULLY_RSV_FLAG
4256                                 , ALLOCATE_TO_FULLY_RET_FLAG
4257                                 , TERMINAL_GAIN_LOSS_AMOUNT
4258                                 , CIP_COST
4259                                 , YTD_PROCEEDS
4260                                 , LTD_PROCEEDS
4261                                 , LTD_COST_OF_REMOVAL
4262                                 , EOFY_RESERVE
4263                                 , PRIOR_EOFY_RESERVE
4264                                 , EOP_ADJ_COST
4265                                 , EOP_FORMULA_FACTOR
4266                                 , EXCLUDE_PROCEEDS_FROM_BASIS
4267                                 , RETIREMENT_DEPRN_OPTION
4268                                 , TERMINAL_GAIN_LOSS_FLAG
4269                                 , SUPER_GROUP_ID
4270                                 , OVER_DEPRECIATE_OPTION
4271                                 , DISABLED_FLAG
4272                                 , CASH_GENERATING_UNIT_ID
4273                                 , RATE_IN_USE
4274             ) SELECT BOOK_TYPE_CODE
4275                    , ASSET_ID
4276                    , DATE_PLACED_IN_SERVICE
4277                    , l_trans_rec.who_info.last_update_date -- DATE_EFFECTIVE
4278                    , DEPRN_START_DATE
4279                    , DEPRN_METHOD_CODE
4280                    , LIFE_IN_MONTHS
4281                    , RATE_ADJUSTMENT_FACTOR --RATE_ADJUSTMENT_FACTOR
4282                    , ADJUSTED_COST -- ADJUSTED_COST
4283                    , COST
4284                    , ORIGINAL_COST
4285                    , SALVAGE_VALUE
4286                    , PRORATE_CONVENTION_CODE
4287                    , PRORATE_DATE
4288                    , COST_CHANGE_FLAG
4289                    , ADJUSTMENT_REQUIRED_STATUS
4290                    , CAPITALIZE_FLAG
4291                    , RETIREMENT_PENDING_FLAG
4292                    , DEPRECIATE_FLAG
4293                    , l_trans_rec.who_info.last_update_date -- LAST_UPDATE_DATE
4294                    , l_trans_rec.who_info.last_updated_by -- LAST_UPDATED_BY
4295                    , l_trans_rec.transaction_header_id -- TRANSACTION_HEADER_ID_IN
4296                    , ITC_AMOUNT_ID
4297                    , ITC_AMOUNT
4298                    , RETIREMENT_ID
4299                    , TAX_REQUEST_ID
4300                    , ITC_BASIS
4301                    , BASIC_RATE
4302                    , ADJUSTED_RATE
4303                    , BONUS_RULE
4304                    , CEILING_NAME
4305                    , RECOVERABLE_COST
4306                    , ADJUSTED_CAPACITY
4307                    , FULLY_RSVD_REVALS_COUNTER
4308                    , IDLED_FLAG
4309                    , PERIOD_COUNTER_CAPITALIZED
4310                    , PERIOD_COUNTER_FULLY_RESERVED
4311                    , PERIOD_COUNTER_FULLY_RETIRED
4312                    , PRODUCTION_CAPACITY
4313                    , REVAL_AMORTIZATION_BASIS
4314                    , REVAL_CEILING
4315                    , UNIT_OF_MEASURE
4316                    , UNREVALUED_COST
4317                    , ANNUAL_DEPRN_ROUNDING_FLAG
4318                    , PERCENT_SALVAGE_VALUE
4319                    , ALLOWED_DEPRN_LIMIT
4320                    , ALLOWED_DEPRN_LIMIT_AMOUNT
4321                    , PERIOD_COUNTER_LIFE_COMPLETE
4322                    , ADJUSTED_RECOVERABLE_COST
4323                    , ANNUAL_ROUNDING_FLAG
4324                    , GLOBAL_ATTRIBUTE1
4325                    , GLOBAL_ATTRIBUTE2
4326                    , GLOBAL_ATTRIBUTE3
4327                    , GLOBAL_ATTRIBUTE4
4328                    , GLOBAL_ATTRIBUTE5
4329                    , GLOBAL_ATTRIBUTE6
4330                    , GLOBAL_ATTRIBUTE7
4331                    , GLOBAL_ATTRIBUTE8
4332                    , GLOBAL_ATTRIBUTE9
4333                    , GLOBAL_ATTRIBUTE10
4334                    , GLOBAL_ATTRIBUTE11
4335                    , GLOBAL_ATTRIBUTE12
4336                    , GLOBAL_ATTRIBUTE13
4337                    , GLOBAL_ATTRIBUTE14
4338                    , GLOBAL_ATTRIBUTE15
4339                    , GLOBAL_ATTRIBUTE16
4340                    , GLOBAL_ATTRIBUTE17
4341                    , GLOBAL_ATTRIBUTE18
4342                    , GLOBAL_ATTRIBUTE19
4343                    , GLOBAL_ATTRIBUTE20
4344                    , GLOBAL_ATTRIBUTE_CATEGORY
4345                    , EOFY_ADJ_COST
4346                    , EOFY_FORMULA_FACTOR
4347                    , SHORT_FISCAL_YEAR_FLAG
4348                    , CONVERSION_DATE
4349                    , ORIGINAL_DEPRN_START_DATE
4350                    , REMAINING_LIFE1
4351                    , REMAINING_LIFE2
4352                    , OLD_ADJUSTED_COST
4353                    , formula_factor --FORMULA_FACTOR
4354                    , GROUP_ASSET_ID
4355                    , SALVAGE_TYPE
4356                    , DEPRN_LIMIT_TYPE
4357                    , REDUCTION_RATE
4358                    , REDUCE_ADDITION_FLAG
4359                    , REDUCE_ADJUSTMENT_FLAG
4360                    , REDUCE_RETIREMENT_FLAG
4361                    , RECOGNIZE_GAIN_LOSS
4362                    , RECAPTURE_RESERVE_FLAG
4363                    , LIMIT_PROCEEDS_FLAG
4364                    , TERMINAL_GAIN_LOSS
4365                    , TRACKING_METHOD
4366                    , EXCLUDE_FULLY_RSV_FLAG
4367                    , EXCESS_ALLOCATION_OPTION
4368                    , DEPRECIATION_OPTION
4369                    , MEMBER_ROLLUP_FLAG
4370                    , ALLOCATE_TO_FULLY_RSV_FLAG
4371                    , ALLOCATE_TO_FULLY_RET_FLAG
4372                    , TERMINAL_GAIN_LOSS_AMOUNT
4373                    , CIP_COST
4374                    , YTD_PROCEEDS
4375                    , LTD_PROCEEDS
4376                    , LTD_COST_OF_REMOVAL
4377                    , eofy_reserve --EOFY_RESERVE
4378                    , PRIOR_EOFY_RESERVE
4379                    , EOP_ADJ_COST
4380                    , EOP_FORMULA_FACTOR
4381                    , EXCLUDE_PROCEEDS_FROM_BASIS
4382                    , RETIREMENT_DEPRN_OPTION
4383                    , TERMINAL_GAIN_LOSS_FLAG
4384                    , SUPER_GROUP_ID
4385                    , OVER_DEPRECIATE_OPTION
4386                    , DISABLED_FLAG
4387                    , CASH_GENERATING_UNIT_ID
4388                    , RATE_IN_USE
4389               FROM  FA_BOOKS
4390               WHERE TRANSACTION_HEADER_ID_out = p_thid
4391               AND   ASSET_ID = p_asset_hdr_rec.asset_id
4392               AND   BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code;
4393 
4394             if (p_log_level_rec.statement_level) then
4395                   fa_debug_pkg.add(l_calling_fn,'Finished with new thid: '
4396                                                , l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
4397             end if;
4398 
4399          else -- reporting loop
4400 
4401             if (p_log_level_rec.statement_level) then
4402                   fa_debug_pkg.add(l_calling_fn,'ALC loop: '
4403                                                , p_asset_hdr_rec.set_of_books_id, p_log_level_rec => p_log_level_rec);
4404             end if;
4405 
4406             -- Get the rollback reval trx_hdr_id
4407             open c_get_new_thid;
4408             fetch c_get_new_thid into l_trans_rec.transaction_header_id
4409                                     , l_trans_rec.who_info.last_update_date
4410                                     , l_trans_rec.who_info.last_updated_by;
4411             close c_get_new_thid;
4412 
4413             if (p_log_level_rec.statement_level) then
4414                   fa_debug_pkg.add(l_calling_fn,'ALC: Creating accounting for new thid: '
4415                                                , l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
4416             end if;
4417 
4418             INSERT INTO FA_MC_ADJUSTMENTS(
4419                 SET_OF_BOOKS_ID
4420               , TRANSACTION_HEADER_ID
4421               , SOURCE_TYPE_CODE
4422               , ADJUSTMENT_TYPE
4423               , DEBIT_CREDIT_FLAG
4424               , CODE_COMBINATION_ID
4425               , BOOK_TYPE_CODE
4426               , ASSET_ID
4427               , ADJUSTMENT_AMOUNT
4428               , DISTRIBUTION_ID
4429               , LAST_UPDATE_DATE
4430               , LAST_UPDATED_BY
4431               , LAST_UPDATE_LOGIN
4432               , ANNUALIZED_ADJUSTMENT
4433               , PERIOD_COUNTER_ADJUSTED
4434               , PERIOD_COUNTER_CREATED
4435               , ASSET_INVOICE_ID
4436               , GLOBAL_ATTRIBUTE1
4437               , GLOBAL_ATTRIBUTE2
4438               , GLOBAL_ATTRIBUTE3
4439               , GLOBAL_ATTRIBUTE4
4440               , GLOBAL_ATTRIBUTE5
4441               , GLOBAL_ATTRIBUTE6
4442               , GLOBAL_ATTRIBUTE7
4443               , GLOBAL_ATTRIBUTE8
4444               , GLOBAL_ATTRIBUTE9
4445               , GLOBAL_ATTRIBUTE10
4446               , GLOBAL_ATTRIBUTE11
4447               , GLOBAL_ATTRIBUTE12
4448               , GLOBAL_ATTRIBUTE13
4449               , GLOBAL_ATTRIBUTE14
4450               , GLOBAL_ATTRIBUTE15
4451               , GLOBAL_ATTRIBUTE16
4452               , GLOBAL_ATTRIBUTE17
4453               , GLOBAL_ATTRIBUTE18
4454               , GLOBAL_ATTRIBUTE19
4455               , GLOBAL_ATTRIBUTE20
4456               , GLOBAL_ATTRIBUTE_CATEGORY
4457               , DEPRN_OVERRIDE_FLAG
4458               , TRACK_MEMBER_FLAG
4459               , ADJUSTMENT_LINE_ID
4460               , SOURCE_LINE_ID
4461               , SOURCE_DEST_CODE
4462             ) select
4463                 SET_OF_BOOKS_ID
4464               , l_trans_rec.transaction_header_id --  TRANSACTION_HEADER_ID
4465               , SOURCE_TYPE_CODE
4466               , ADJUSTMENT_TYPE
4467               , decode(debit_credit_flag, 'DR', 'CR', 'DR') --DEBIT_CREDIT_FLAG
4468               , CODE_COMBINATION_ID
4469               , BOOK_TYPE_CODE
4470               , ASSET_ID
4471               , ADJUSTMENT_AMOUNT
4472               , DISTRIBUTION_ID
4473               , l_trans_rec.who_info.last_update_date --LAST_UPDATE_DATE
4474               , l_trans_rec.who_info.last_updated_by --LAST_UPDATED_BY
4475               , l_trans_rec.who_info.last_updated_by --LAST_UPDATE_LOGIN
4476               , ANNUALIZED_ADJUSTMENT
4477               , PERIOD_COUNTER_ADJUSTED
4478               , PERIOD_COUNTER_CREATED
4479               , ASSET_INVOICE_ID
4480               , GLOBAL_ATTRIBUTE1
4481               , GLOBAL_ATTRIBUTE2
4482               , GLOBAL_ATTRIBUTE3
4483               , GLOBAL_ATTRIBUTE4
4484               , GLOBAL_ATTRIBUTE5
4485               , GLOBAL_ATTRIBUTE6
4486               , GLOBAL_ATTRIBUTE7
4487               , GLOBAL_ATTRIBUTE8
4488               , GLOBAL_ATTRIBUTE9
4489               , GLOBAL_ATTRIBUTE10
4490               , GLOBAL_ATTRIBUTE11
4491               , GLOBAL_ATTRIBUTE12
4492               , GLOBAL_ATTRIBUTE13
4493               , GLOBAL_ATTRIBUTE14
4494               , GLOBAL_ATTRIBUTE15
4495               , GLOBAL_ATTRIBUTE16
4496               , GLOBAL_ATTRIBUTE17
4497               , GLOBAL_ATTRIBUTE18
4498               , GLOBAL_ATTRIBUTE19
4499               , GLOBAL_ATTRIBUTE20
4500               , GLOBAL_ATTRIBUTE_CATEGORY
4501               , DEPRN_OVERRIDE_FLAG
4502               , TRACK_MEMBER_FLAG
4503               , fa_adjustments_s.nextval -- ADJUSTMENT_LINE_ID
4504               , SOURCE_LINE_ID
4505               , SOURCE_DEST_CODE
4506               from fa_mc_adjustments
4507               where asset_id = p_asset_hdr_rec.asset_id
4508               and   book_type_code = p_asset_hdr_rec.book_type_code
4509               and   transaction_header_id = p_thid
4510               and   set_of_books_id = p_asset_hdr_rec.set_of_books_id
4511             ;
4512 
4513             UPDATE FA_MC_BOOKS
4514                SET    DATE_INEFFECTIVE = l_trans_rec.who_info.last_update_date
4515                     , last_update_date = l_trans_rec.who_info.last_update_date
4516                     , TRANSACTION_HEADER_ID_OUT = l_trans_rec.transaction_header_id
4517             WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
4518             AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
4519             AND    set_of_books_id = p_asset_hdr_rec.set_of_books_id
4520             AND    TRANSACTION_HEADER_ID_in = p_thid
4521             AND    TRANSACTION_HEADER_ID_OUT is null;
4522 
4523             INSERT INTO FA_MC_BOOKS( SET_OF_BOOKS_ID
4524                                 , BOOK_TYPE_CODE
4525                                 , ASSET_ID
4526                                 , DATE_PLACED_IN_SERVICE
4527                                 , DATE_EFFECTIVE
4528                                 , DEPRN_START_DATE
4529                                 , DEPRN_METHOD_CODE
4530                                 , LIFE_IN_MONTHS
4531                                 , RATE_ADJUSTMENT_FACTOR
4532                                 , ADJUSTED_COST
4533                                 , COST
4534                                 , ORIGINAL_COST
4535                                 , SALVAGE_VALUE
4536                                 , PRORATE_CONVENTION_CODE
4537                                 , PRORATE_DATE
4538                                 , COST_CHANGE_FLAG
4539                                 , ADJUSTMENT_REQUIRED_STATUS
4540                                 , CAPITALIZE_FLAG
4541                                 , RETIREMENT_PENDING_FLAG
4542                                 , DEPRECIATE_FLAG
4543                                 , LAST_UPDATE_DATE
4544                                 , LAST_UPDATED_BY
4545                                 , TRANSACTION_HEADER_ID_IN
4546                                 , ITC_AMOUNT_ID
4547                                 , ITC_AMOUNT
4548                                 , RETIREMENT_ID
4549                                 , TAX_REQUEST_ID
4550                                 , ITC_BASIS
4551                                 , BASIC_RATE
4552                                 , ADJUSTED_RATE
4553                                 , BONUS_RULE
4554                                 , CEILING_NAME
4555                                 , RECOVERABLE_COST
4556                                 , ADJUSTED_CAPACITY
4557                                 , FULLY_RSVD_REVALS_COUNTER
4558                                 , IDLED_FLAG
4559                                 , PERIOD_COUNTER_CAPITALIZED
4560                                 , PERIOD_COUNTER_FULLY_RESERVED
4561                                 , PERIOD_COUNTER_FULLY_RETIRED
4562                                 , PRODUCTION_CAPACITY
4563                                 , REVAL_AMORTIZATION_BASIS
4564                                 , REVAL_CEILING
4565                                 , UNIT_OF_MEASURE
4566                                 , UNREVALUED_COST
4567                                 , ANNUAL_DEPRN_ROUNDING_FLAG
4568                                 , PERCENT_SALVAGE_VALUE
4569                                 , ALLOWED_DEPRN_LIMIT
4570                                 , ALLOWED_DEPRN_LIMIT_AMOUNT
4571                                 , PERIOD_COUNTER_LIFE_COMPLETE
4572                                 , ADJUSTED_RECOVERABLE_COST
4573                                 , ANNUAL_ROUNDING_FLAG
4574                                 , GLOBAL_ATTRIBUTE1
4575                                 , GLOBAL_ATTRIBUTE2
4576                                 , GLOBAL_ATTRIBUTE3
4577                                 , GLOBAL_ATTRIBUTE4
4578                                 , GLOBAL_ATTRIBUTE5
4579                                 , GLOBAL_ATTRIBUTE6
4580                                 , GLOBAL_ATTRIBUTE7
4581                                 , GLOBAL_ATTRIBUTE8
4582                                 , GLOBAL_ATTRIBUTE9
4583                                 , GLOBAL_ATTRIBUTE10
4584                                 , GLOBAL_ATTRIBUTE11
4585                                 , GLOBAL_ATTRIBUTE12
4586                                 , GLOBAL_ATTRIBUTE13
4587                                 , GLOBAL_ATTRIBUTE14
4588                                 , GLOBAL_ATTRIBUTE15
4589                                 , GLOBAL_ATTRIBUTE16
4590                                 , GLOBAL_ATTRIBUTE17
4591                                 , GLOBAL_ATTRIBUTE18
4592                                 , GLOBAL_ATTRIBUTE19
4593                                 , GLOBAL_ATTRIBUTE20
4594                                 , GLOBAL_ATTRIBUTE_CATEGORY
4595                                 , EOFY_ADJ_COST
4596                                 , EOFY_FORMULA_FACTOR
4597                                 , SHORT_FISCAL_YEAR_FLAG
4598                                 , CONVERSION_DATE
4599                                 , ORIGINAL_DEPRN_START_DATE
4600                                 , REMAINING_LIFE1
4601                                 , REMAINING_LIFE2
4602                                 , OLD_ADJUSTED_COST
4603                                 , FORMULA_FACTOR
4604                                 , GROUP_ASSET_ID
4605                                 , SALVAGE_TYPE
4606                                 , DEPRN_LIMIT_TYPE
4607                                 , REDUCTION_RATE
4608                                 , REDUCE_ADDITION_FLAG
4609                                 , REDUCE_ADJUSTMENT_FLAG
4610                                 , REDUCE_RETIREMENT_FLAG
4611                                 , RECOGNIZE_GAIN_LOSS
4612                                 , RECAPTURE_RESERVE_FLAG
4613                                 , LIMIT_PROCEEDS_FLAG
4614                                 , TERMINAL_GAIN_LOSS
4615                                 , TRACKING_METHOD
4616                                 , EXCLUDE_FULLY_RSV_FLAG
4617                                 , EXCESS_ALLOCATION_OPTION
4618                                 , DEPRECIATION_OPTION
4619                                 , MEMBER_ROLLUP_FLAG
4620                                 , ALLOCATE_TO_FULLY_RSV_FLAG
4621                                 , ALLOCATE_TO_FULLY_RET_FLAG
4622                                 , TERMINAL_GAIN_LOSS_AMOUNT
4623                                 , CIP_COST
4624                                 , YTD_PROCEEDS
4625                                 , LTD_PROCEEDS
4626                                 , LTD_COST_OF_REMOVAL
4627                                 , EOFY_RESERVE
4628                                 , PRIOR_EOFY_RESERVE
4629                                 , EOP_ADJ_COST
4630                                 , EOP_FORMULA_FACTOR
4631                                 , EXCLUDE_PROCEEDS_FROM_BASIS
4632                                 , RETIREMENT_DEPRN_OPTION
4633                                 , TERMINAL_GAIN_LOSS_FLAG
4634                                 , SUPER_GROUP_ID
4635                                 , OVER_DEPRECIATE_OPTION
4636                                 , DISABLED_FLAG
4637                                 , CASH_GENERATING_UNIT_ID
4638                                 , RATE_IN_USE
4639             ) SELECT SET_OF_BOOKS_ID
4640                    , BOOK_TYPE_CODE
4641                    , ASSET_ID
4642                    , DATE_PLACED_IN_SERVICE
4643                    , l_trans_rec.who_info.last_update_date -- DATE_EFFECTIVE
4644                    , DEPRN_START_DATE
4645                    , DEPRN_METHOD_CODE
4646                    , LIFE_IN_MONTHS
4647                    , RATE_ADJUSTMENT_FACTOR --RATE_ADJUSTMENT_FACTOR
4648                    , ADJUSTED_COST -- ADJUSTED_COST
4649                    , COST
4650                    , ORIGINAL_COST
4651                    , SALVAGE_VALUE
4652                    , PRORATE_CONVENTION_CODE
4653                    , PRORATE_DATE
4654                    , COST_CHANGE_FLAG
4655                    , ADJUSTMENT_REQUIRED_STATUS
4656                    , CAPITALIZE_FLAG
4657                    , RETIREMENT_PENDING_FLAG
4658                    , DEPRECIATE_FLAG
4659                    , l_trans_rec.who_info.last_update_date -- LAST_UPDATE_DATE
4660                    , l_trans_rec.who_info.last_updated_by -- LAST_UPDATED_BY
4661                    , l_trans_rec.transaction_header_id -- TRANSACTION_HEADER_ID_IN
4662                    , ITC_AMOUNT_ID
4663                    , ITC_AMOUNT
4664                    , RETIREMENT_ID
4665                    , TAX_REQUEST_ID
4666                    , ITC_BASIS
4667                    , BASIC_RATE
4668                    , ADJUSTED_RATE
4669                    , BONUS_RULE
4670                    , CEILING_NAME
4671                    , RECOVERABLE_COST
4672                    , ADJUSTED_CAPACITY
4673                    , FULLY_RSVD_REVALS_COUNTER
4674                    , IDLED_FLAG
4675                    , PERIOD_COUNTER_CAPITALIZED
4676                    , PERIOD_COUNTER_FULLY_RESERVED
4677                    , PERIOD_COUNTER_FULLY_RETIRED
4678                    , PRODUCTION_CAPACITY
4679                    , REVAL_AMORTIZATION_BASIS
4680                    , REVAL_CEILING
4681                    , UNIT_OF_MEASURE
4682                    , UNREVALUED_COST
4683                    , ANNUAL_DEPRN_ROUNDING_FLAG
4684                    , PERCENT_SALVAGE_VALUE
4685                    , ALLOWED_DEPRN_LIMIT
4686                    , ALLOWED_DEPRN_LIMIT_AMOUNT
4687                    , PERIOD_COUNTER_LIFE_COMPLETE
4688                    , ADJUSTED_RECOVERABLE_COST
4689                    , ANNUAL_ROUNDING_FLAG
4690                    , GLOBAL_ATTRIBUTE1
4691                    , GLOBAL_ATTRIBUTE2
4692                    , GLOBAL_ATTRIBUTE3
4693                    , GLOBAL_ATTRIBUTE4
4694                    , GLOBAL_ATTRIBUTE5
4695                    , GLOBAL_ATTRIBUTE6
4696                    , GLOBAL_ATTRIBUTE7
4697                    , GLOBAL_ATTRIBUTE8
4698                    , GLOBAL_ATTRIBUTE9
4699                    , GLOBAL_ATTRIBUTE10
4700                    , GLOBAL_ATTRIBUTE11
4701                    , GLOBAL_ATTRIBUTE12
4702                    , GLOBAL_ATTRIBUTE13
4703                    , GLOBAL_ATTRIBUTE14
4704                    , GLOBAL_ATTRIBUTE15
4705                    , GLOBAL_ATTRIBUTE16
4706                    , GLOBAL_ATTRIBUTE17
4707                    , GLOBAL_ATTRIBUTE18
4708                    , GLOBAL_ATTRIBUTE19
4709                    , GLOBAL_ATTRIBUTE20
4710                    , GLOBAL_ATTRIBUTE_CATEGORY
4711                    , EOFY_ADJ_COST
4712                    , EOFY_FORMULA_FACTOR
4713                    , SHORT_FISCAL_YEAR_FLAG
4714                    , CONVERSION_DATE
4715                    , ORIGINAL_DEPRN_START_DATE
4716                    , REMAINING_LIFE1
4717                    , REMAINING_LIFE2
4718                    , OLD_ADJUSTED_COST
4719                    , formula_factor --FORMULA_FACTOR
4720                    , GROUP_ASSET_ID
4721                    , SALVAGE_TYPE
4722                    , DEPRN_LIMIT_TYPE
4723                    , REDUCTION_RATE
4724                    , REDUCE_ADDITION_FLAG
4725                    , REDUCE_ADJUSTMENT_FLAG
4726                    , REDUCE_RETIREMENT_FLAG
4727                    , RECOGNIZE_GAIN_LOSS
4728                    , RECAPTURE_RESERVE_FLAG
4729                    , LIMIT_PROCEEDS_FLAG
4730                    , TERMINAL_GAIN_LOSS
4731                    , TRACKING_METHOD
4732                    , EXCLUDE_FULLY_RSV_FLAG
4733                    , EXCESS_ALLOCATION_OPTION
4734                    , DEPRECIATION_OPTION
4735                    , MEMBER_ROLLUP_FLAG
4736                    , ALLOCATE_TO_FULLY_RSV_FLAG
4737                    , ALLOCATE_TO_FULLY_RET_FLAG
4738                    , TERMINAL_GAIN_LOSS_AMOUNT
4739                    , CIP_COST
4740                    , YTD_PROCEEDS
4741                    , LTD_PROCEEDS
4742                    , LTD_COST_OF_REMOVAL
4743                    , eofy_reserve --EOFY_RESERVE
4744                    , PRIOR_EOFY_RESERVE
4745                    , EOP_ADJ_COST
4746                    , EOP_FORMULA_FACTOR
4747                    , EXCLUDE_PROCEEDS_FROM_BASIS
4748                    , RETIREMENT_DEPRN_OPTION
4749                    , TERMINAL_GAIN_LOSS_FLAG
4750                    , SUPER_GROUP_ID
4751                    , OVER_DEPRECIATE_OPTION
4752                    , DISABLED_FLAG
4753                    , CASH_GENERATING_UNIT_ID
4754                    , RATE_IN_USE
4755               FROM  FA_MC_BOOKS
4756               WHERE TRANSACTION_HEADER_ID_out = p_thid
4757               AND   ASSET_ID = p_asset_hdr_rec.asset_id
4758               AND   BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
4759               AND   SET_OF_BOOKS_ID = p_asset_hdr_rec.set_of_books_id ;
4760 
4761             if (p_log_level_rec.statement_level) then
4762                   fa_debug_pkg.add(l_calling_fn,'ALC: Finished with new thid: '
4763                                                , l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
4764             end if;
4765          end if;
4766       end if;
4767 
4768       if (p_log_level_rec.statement_level) then
4769          fa_debug_pkg.add(l_calling_fn, 'Rollback PDR', '$$$END$$$',p_log_level_rec => p_log_level_rec);
4770       end if;
4771 
4772       return true;
4773 
4774    EXCEPTION
4775 
4776       when reval_err then
4777          fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4778          return false;
4779 
4780       when others then
4781          fa_srvr_msg.add_sql_error
4782              (calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
4783          return false;
4784 
4785    END rollback_reval;
4786 
4787 END fa_revaluation_pvt;