Partial Lease Termination Remeasurement Mechanics (ASC 842 / IFRS 16)

Account for a partial lease termination in Python: reduce the ROU asset proportionately to the decrease in the right of use, remeasure the liability at a revised rate, and book the gain or loss.

Problem Statement Link to this section

A tenant hands back three of eight leased floors, or shortens the term of an equipment lease by two years. Scope has decreased, so this is not an ordinary modification that merely adjusts the right-of-use asset — it is a partial termination that must recognize a gain or loss. This page answers one precise question: how do you reduce the ROU asset in proportion to the right of use given up, remeasure the liability at a revised rate, and book the difference to profit or loss without mangling the retained balances? The wrong instinct is to net the whole change into the asset (which buries the gain or loss) or to re-measure the retained asset from scratch (which abandons its historical carrying basis). The correct mechanics are a two-stage sequence: proportional derecognition to profit or loss, then re-discounting of the retained payments.

Standard Anchor Link to this section

The governing provisions treat a decrease in scope differently from every other remeasurement:

  • IFRS 16.46(a) — for a modification that decreases the scope of the lease, the lessee decreases the carrying amount of the right-of-use asset to reflect the partial or full termination, and recognizes in profit or loss any gain or loss relating to that partial or full termination. The revised liability is measured by discounting the revised payments at a revised rate (IFRS 16.45).
  • ASC 842-10-25-13 — for a modification that decreases scope, the lessee decreases the carrying amount of the right-of-use asset on a basis proportionate to the full or partial termination of the existing lease, and recognizes any difference between the reduction in the lease liability and the proportionate reduction in the right-of-use asset as a gain or loss.

IFRS 16 supports two acceptable approaches to measuring the ROU reduction, applied as an accounting policy choice. Under the right-of-use basis, the proportion is the decrease in the right of use itself — returned floor area or the reduction in remaining term. Under the liability basis, the proportion is the percentage by which the lease liability falls. The two produce different gains or losses; this page implements the right-of-use basis, which is the literal reading of IFRS 16.46(a). Whichever basis is chosen, applying it consistently and reassessing classification are what keep the result auditable — the wider branch logic sits in the parent lease modification and remeasurement accounting topic.

Formula / Algorithm Specification Link to this section

Let be the proportion of the right of use given up, measured on a consistent basis:

Stage one derecognizes that proportion of both the right-of-use asset and the lease liability, and the difference is the gain or loss:

A positive result is a gain — more liability was released than asset written off. Stage two re-discounts the retained payments of the original stream at the revised rate and adjusts the retained asset by any residual difference:

where is the remeasured liability on the retained payments and are the retained revised payments over the remaining periods. The invariant a correct implementation proves is that the recognized gain or loss equals the net movement in the balance sheet: .

Proportional derecognition of the ROU asset and lease liability on a partial termination Two horizontal bars represent the right-of-use asset and the lease liability. Each bar is split into a retained portion, one minus delta carried forward at its historical basis, and a derecognised portion, delta. The derecognised delta slice of the liability is larger than the derecognised delta slice of the asset, and the difference between them flows to a gain or loss in profit or loss, equal to delta times the liability minus delta times the asset. Right-of-use asset retained (1−δ) δ derecognised Lease liability retained (1−δ) δ derecognised Gain / loss to profit or loss = δL − δ·ROU liability released − asset written off δ·ROU δ·L
A partial termination derecognises the same proportion δ of both balances, each retained portion carried forward at its historical basis. Because the δ slice of the liability released differs from the δ slice of the asset written off, the difference is a gain or loss in profit or loss; the retained payments are then re-discounted at the revised rate.

Annotated Python Snippet Link to this section

The function derecognizes the proportional slice, books the gain or loss, remeasures the retained liability at the revised rate, and adjusts the retained asset. The terminal assertion proves the recognized gain or loss ties out to the net balance-sheet movement — the reconciliation an auditor re-derives.

from decimal import Decimal, ROUND_HALF_UP, getcontext

getcontext().prec = 28                     # audit-grade; no float drift
CENT = Decimal("0.01")


def q(x: Decimal) -> Decimal:
    return x.quantize(CENT, rounding=ROUND_HALF_UP)


def partial_termination(rou: Decimal, liability: Decimal, decrease_fraction: Decimal,
                        retained_payments: tuple[Decimal, ...], revised_rate: Decimal) -> dict:
    """Decrease in scope (IFRS 16.46(a) / ASC 842-10-25-13): derecognise the δ
    proportion of both balances to P&L, then re-discount the retained payments."""
    rou_der = q(decrease_fraction * rou)                    # δ · ROU written off
    liab_der = q(decrease_fraction * liability)             # δ · L released
    gain_loss = q(liab_der - rou_der)                       # >0 = gain, to P&L
    new_liab = q(sum(                                       # L'' on retained payments
        (p / (Decimal(1) + revised_rate) ** k
         for k, p in enumerate(retained_payments, start=1)),
        Decimal("0"),
    ))
    rou_retained = rou - rou_der
    liab_retained = liability - liab_der
    new_rou = q(rou_retained + (new_liab - liab_retained)) # residual adjusts retained ROU
    return {"rou": new_rou, "liability": new_liab, "pl_gain_loss": gain_loss}


# Hand back 40% of the space at month 24; 36 payments remain at 60% of the old rent
rou0, liab0 = Decimal("198450.00"), Decimal("205300.00")
retained = tuple(Decimal("5400.00") for _ in range(36))    # 0.60 × 9,000
r_month = (Decimal("1.06")) ** (Decimal(1) / Decimal(12)) - Decimal(1)

out = partial_termination(rou0, liab0, Decimal("0.40"), retained, r_month)

# Terminal invariant — the gain/loss equals the net balance-sheet movement
assert out["pl_gain_loss"] == q((out["rou"] - rou0) - (out["liability"] - liab0))
print("gain/loss to P&L:", out["pl_gain_loss"])
print("retained ROU:", out["rou"], "| retained liability:", out["liability"])

If a refactor books the whole change to the asset, pl_gain_loss no longer reconciles to the net movement and the assert fires. Keeping the check inside the function runs it on every partial termination in CI, not just in a notebook.

Correct vs. Incorrect: Proportionate ROU Reduction vs the Remaining-Right Approach Link to this section

The correct method reduces the retained asset from its historical carrying amount by the proportion given up. A common error remeasures the retained asset as if it were freshly recognized — the "remaining-right" approach — which discards the historical basis and misstates the gain or loss.

Aspect Proportionate ROU reduction (correct) Remaining-right remeasurement (incorrect)
Standard basis IFRS 16.46(a) / ASC 842-10-25-13 Not supported for a partial termination
Retained ROU basis (1−δ) of the historical carrying amount Re-derived from the present value of remaining payments
Gain or loss δL − δ·ROU, recognized explicitly Buried in a re-struck asset value
Historical cost Preserved for the retained portion Lost — asset effectively re-recognized
Effect on later depreciation Continues on the proportionate carrying amount Distorted by the re-measured base

The remaining-right approach looks tempting because the liability is remeasured to the present value of remaining payments — but the asset is not a mirror of the liability. It carries a historical basis that must be scaled down proportionately, not rebuilt. Conflating the two is the defining partial-termination defect.

Gotcha / Failure Mode: Booking a Scope Decrease to the ROU Asset Link to this section

The most damaging error treats a partial termination like an ordinary modification — netting the entire change into the right-of-use asset and recognizing no gain or loss.

Before (WRONG — no derecognition, gain or loss buried in the asset):

new_rou = q(rou + (new_liab - liability))    # ordinary modification path
gain_loss = Decimal("0.00")                  # a scope decrease should not be zero

After (correct — derecognise the proportion first, then re-discount the remainder):

rou_der = q(decrease_fraction * rou)
liab_der = q(decrease_fraction * liability)
gain_loss = q(liab_der - rou_der)            # recognised in P&L (IFRS 16.46(a))
new_rou = q((rou - rou_der) + (new_liab - (liability - liab_der)))

Debug checklist when a partial termination looks wrong:

  1. Confirm the event branch. A decrease in scope must take the derecognition path, not the ROU-adjust path used for other modifications.
  2. Confirm δ. The proportion must be measured on a consistent basis (area or term) and held at full precision, not rounded before multiplying.
  3. Confirm the retained payments. Only the retained, revised payments enter — the given-up portion is gone.
  4. Confirm the reconciliation. The recognized gain or loss must equal the net movement in the asset less the movement in the liability.

Frequently Asked Questions Link to this section

How do I recognize the gain or loss on a partial lease termination?

Derecognize the proportion δ of both the right-of-use asset and the lease liability that corresponds to the right of use given up. The gain or loss is the released liability slice minus the written-off asset slice, δL − δ·ROU, recognized in profit or loss under IFRS 16.46(a) and ASC 842-10-25-13. A positive figure is a gain, meaning more liability was released than asset written off. Only after that do you re-discount the retained payments at the revised rate and adjust the retained asset for any residual difference.

What proportion do I use to reduce the ROU asset?

Under the right-of-use basis, the proportion is the decrease in the right of use itself — the returned floor area or the reduction in remaining term. IFRS 16 also permits a liability basis, where the proportion is the percentage by which the lease liability falls; the two produce different gains or losses and the choice is an accounting policy applied consistently. ASC 842 requires a basis proportionate to the termination and books the difference between the liability and asset reductions as the gain or loss.

Which discount rate applies to a partial termination?

A revised rate determined at the effective date, used to remeasure the retained liability as the present value of the retained payments. A decrease in scope is a modification, and modifications use a revised rate, not the original commencement rate. Only reassessments driven by an index or rate change keep the original locked rate, which is a different event.