Impairment Testing for Right-of-Use Assets: IAS 36 vs ASC 360 in Python
Test right-of-use assets for impairment under IAS 36 (IFRS 16) and ASC 360 (ASC 842): recoverability, measuring the loss, and post-impairment amortization, with decimal-precision Python.
Problem Statement Link to this section
A right-of-use asset is a long-lived asset, and like any long-lived asset it can be impaired — a shuttered branch, an abandoned floor, a piece of equipment displaced by newer technology. When that happens, the right-of-use asset must be written down, and — critically — the impairment is booked against the asset, not the lease liability, which continues to unwind on its original schedule untouched. The two frameworks reach a written-down asset by different routes: IFRS 16 preparers apply IAS 36, a one-step test against a discounted recoverable amount, while ASC 842 preparers apply ASC 360, a two-step test that first screens with undiscounted cash flows. Getting the route wrong changes both whether a loss is recognized and how large it is. This page specifies both tests, shows how post-impairment amortization runs on the reduced carrying amount, and encodes the ASC 360 mechanics in a decimal-precision function ending in a terminal assertion.
Standard Anchor Link to this section
Neither ASC 842 nor IFRS 16 contains its own impairment model for the right-of-use asset; each defers to the entity's general long-lived-asset impairment standard.
- IFRS 16.33 directs lessees to apply IAS 36 Impairment of Assets to determine whether a right-of-use asset is impaired and to account for any loss. IAS 36 is a single-step test: compare the carrying amount to the recoverable amount, defined as the higher of fair value less costs of disposal and value in use (the present value of future cash flows). If carrying amount exceeds recoverable amount, the excess is the impairment loss. IAS 36 also permits reversal of a previously recognized impairment if the recoverable amount later recovers (IAS 36.114).
- ASC 842 leaves impairment to ASC 360-10-35, the long-lived-asset model, which is a two-step test. Step one is a recoverability screen: compare the carrying amount to the sum of undiscounted future cash flows from the asset's use and eventual disposal. Only if carrying amount exceeds those undiscounted cash flows does step two measure the loss as carrying amount less fair value. Under US GAAP, an impairment loss on a long-lived asset held and used cannot be reversed.
Under both frameworks, the loss reduces the carrying amount of the right-of-use asset only; the lease liability is unaffected and continues its effective-interest unwind. After impairment, amortization is recalculated on the new, lower carrying amount over the remaining lease term.
Formula / Algorithm Specification Link to this section
ASC 360 — step one, recoverability screen. Let
where
ASC 360 — step two, measure the loss. When the screen fails, the loss is carrying amount less fair value:
where
where
where
Annotated Python Snippet Link to this section
The function implements the ASC 360 two-step test and the revised amortization. All money is Decimal; the recoverability screen runs first, the loss is measured only when the screen fails, and the terminal assertion proves the reduced asset amortizes to zero over the remaining term.
from decimal import Decimal, ROUND_HALF_UP, getcontext
getcontext().prec = 28
CENT = Decimal("0.01")
def q(x: Decimal) -> Decimal:
return x.quantize(CENT, rounding=ROUND_HALF_UP)
def asc360_impairment(carrying: Decimal, undiscounted_cf: list[Decimal],
fair_value: Decimal, remaining_periods: int) -> dict:
"""ASC 360-10-35 two-step test + post-impairment amortization.
Step 1: recoverability screen on UNDISCOUNTED cash flows.
Step 2: loss = carrying - fair value, only if the screen fails."""
ucf = sum(undiscounted_cf, Decimal("0"))
if carrying <= ucf: # step 1 passes -> no loss
loss, new_carrying = Decimal("0.00"), carrying
else: # step 1 fails -> measure step 2
loss = q(carrying - fair_value)
new_carrying = fair_value
# Post-impairment straight-line amortization on the reduced carrying amount
charge = q(new_carrying / remaining_periods)
balance, rows = new_carrying, []
for t in range(1, remaining_periods + 1):
if t == remaining_periods:
charge = balance # absorb rounding into the last period
balance = q(balance - charge)
rows.append({"period": t, "amortization": q(charge), "closing": balance})
return {"loss": loss, "new_carrying": new_carrying, "schedule": rows}
# CA 90,000 exceeds undiscounted CF 84,000 -> impaired down to FV 70,000
result = asc360_impairment(
carrying=Decimal("90000.00"),
undiscounted_cf=[Decimal("21000.00")] * 4, # sums to 84,000 < carrying
fair_value=Decimal("70000.00"),
remaining_periods=40)
assert result["loss"] == Decimal("20000.00") # 90,000 - 70,000
assert result["schedule"][-1]["closing"] == Decimal("0.00") # reduced CA -> 0
The screen fails (90,000 > 84,000), so step two books a 20,000 loss and resets the carrying amount to fair value; the revised schedule then amortizes 70,000 to zero over the forty remaining periods. Flip a single input — raise undiscounted cash flows above 90,000 — and step one passes, the loss is zero, and no write-down occurs even though fair value is below carrying amount. That asymmetry is the whole point of the two-step model.
Comparison: IAS 36 vs ASC 360 Link to this section
The two models differ in structure, in the cash flows they use, and in reversibility. The table is the side-by-side an IFRS-and-US-GAAP team needs; the deeper measurement contrasts continue in IFRS 16 vs ASC 842 ROU asset differences explained.
| Dimension | IAS 36 (IFRS 16) | ASC 360 (ASC 842) |
|---|---|---|
| Steps | One step | Two steps |
| Recoverability screen | None | Undiscounted cash flows |
| Cash flows in the test | Discounted (value in use) | Undiscounted in step one |
| Compare carrying amount to | Recoverable amount (higher of FVLCD, VIU) | Fair value (only after screen fails) |
| Reversal of prior loss | Permitted | Prohibited (held and used) |
| Effect on lease liability | None | None |
Gotcha / Failure Mode: Impairing the Liability Instead of the Asset Link to this section
The most damaging error is writing down the lease liability alongside the asset. Impairment touches the asset only; the liability keeps its original effective-interest schedule.
Before (WRONG — the loss is applied to both sides):
impairment = carrying - fair_value
rou_asset -= impairment
lease_liability -= impairment # WRONG: liability is never impaired
After (correct — only the asset is written down):
impairment = carrying - fair_value
rou_asset = fair_value # asset reduced to fair value / RA
# lease_liability is untouched; it keeps its effective-interest unwind
new_amortization = fair_value / remaining_periods
Debug checklist when an impairment looks wrong:
- Screen before you measure (ASC 360). Undiscounted cash flows gate the test; skipping the screen over-impairs assets that are still recoverable.
- Use discounted cash flows for IAS 36 value in use, undiscounted for the ASC 360 screen. Mixing the two is a common cross-framework slip.
- Leave the liability alone. It continues its original schedule; only the asset column changes.
- Recompute amortization on the reduced carrying amount over the remaining term, not the original one.
Frequently Asked Questions Link to this section
Does impairing a right-of-use asset also reduce the lease liability?
No. Impairment writes down the right-of-use asset only. The lease liability is a contractual obligation that continues its effective-interest unwind on the original schedule regardless of the asset's carrying amount. After the write-down, only the asset's amortization is recalculated — on the reduced carrying amount over the remaining lease term — while the liability's interest and principal columns are unchanged.
What is the difference between the IAS 36 and ASC 360 impairment tests?
IAS 36, applied by IFRS 16 preparers, is a single step: compare the carrying amount to the recoverable amount (the higher of fair value less costs of disposal and the discounted value in use), and any excess is the loss. ASC 360, applied by ASC 842 preparers, is two steps: first screen the carrying amount against undiscounted future cash flows, and only if that screen fails measure the loss as carrying amount less fair value. IAS 36 also permits reversal of a prior loss; ASC 360 does not for a held-and-used asset.
How does amortization change after a right-of-use asset is impaired?
It resets to the reduced carrying amount. After the write-down, straight-line amortization is recomputed as the new, lower carrying amount divided by the remaining lease term, so each subsequent period's charge is smaller. Under IAS 36 a later recovery can reverse part of the loss and lift the carrying amount back up (capped at what it would have been absent impairment); under ASC 360 the reduced basis is permanent.
Related Link to this section
- IFRS 16 vs ASC 842 ROU asset differences explained — the sibling comparison of how the asset is measured and amortized across the two frameworks.
- ROU asset calculation frameworks — the parent topic on initial and subsequent measurement of the right-of-use asset.
- ASC 842 and IFRS 16 core architecture and ROU models — the framework that governs the asset this test writes down.