IBR Selection: ASC 842 vs IFRS 16 Incremental Borrowing Rate in Python
Compare incremental borrowing rate selection under ASC 842-20-30-3 and IFRS 16.26, including the ASC 842 non-PBE risk-free-rate expedient, with a decimal-precision Python selector.
Problem Statement Link to this section
When the rate implicit in the lease cannot be readily determined — the common case for real estate and equipment, where the lessor's residual assumptions are unknown — both frameworks fall back to the lessee's incremental borrowing rate. The IBR then does double duty: it seeds the present value calculation logic that measures the liability and it drives every period's interest accrual. The definitions look almost identical, but the fine print diverges in ways that change the number you pick: IFRS 16 anchors the rate to a similar economic environment, ASC 842's definition emphasizes a collateralized borrowing over a similar term, and ASC 842 alone offers non-public entities a risk-free-rate practical expedient applied by asset class. This page draws the side-by-side distinction and encodes a selector that returns a defensible IBR under each framework, ending in a terminal assertion. The mechanics of building the rate itself are covered in how to calculate the incremental borrowing rate for ASC 842.
Standard Anchor Link to this section
Both standards prefer the implicit rate and fall back to the IBR, but they define the fallback differently.
- ASC 842-20-30-3 and the ASC 842 glossary define the incremental borrowing rate as the rate of interest that a lessee would have to pay to borrow on a collateralized basis over a similar term an amount equal to the lease payments in a similar economic environment. The collateralization and similar-term anchors are explicit. ASC 842 additionally grants entities that are not public business entities a practical expedient (ASC 842-20-30-3) to use a risk-free rate — a government bond rate for a period comparable to the lease term — as an accounting policy election made by class of underlying asset. It lowers the discount rate (raising the liability) but removes the cost and judgment of building a full IBR.
- IFRS 16.26 and the IFRS 16 Appendix A definition describe the IBR as the rate the lessee would have to pay to borrow over a similar term, and with similar security, the funds necessary to obtain an asset of a similar value to the right-of-use asset in a similar economic environment. IFRS 16 has no risk-free-rate expedient; every lessee must estimate a genuine borrowing rate. Its "similar security" and "asset of similar value" language pushes preparers toward a rate reflecting the specific right-of-use asset rather than a generic collateralized borrowing.
Both rates are locked at commencement and change only on a remeasurement trigger. The practical divergence: an IFRS 16 preparer cannot elect the risk-free shortcut, and an ASC 842 non-PBE electing it must apply the election consistently by asset class, not lease by lease.
Formula / Algorithm Specification Link to this section
A constructed IBR is a base reference rate adjusted for term, credit, and collateral:
where
so
The IFRS 16 branch never reaches
Annotated Python Snippet Link to this section
The selector returns a discount rate under each framework from the same inputs, honoring the ASC 842 non-PBE expedient and refusing it under IFRS 16. Rates are Decimal; the terminal assertion proves the expedient produces a lower rate — and therefore a larger liability — than the built IFRS 16 IBR.
from dataclasses import dataclass
from decimal import Decimal, getcontext
getcontext().prec = 28
@dataclass(frozen=True)
class RateInputs:
implicit_rate: Decimal | None # None if not readily determinable
risk_free: Decimal # base rate for a comparable term
credit_spread: Decimal # lessee credit spread
collateral_adj: Decimal # negative: collateral lowers the rate
def select_ibr(inp: RateInputs, framework: str, *,
is_non_pbe: bool = False, class_elected: bool = False) -> Decimal:
"""Discount rate per ASC 842-20-30-3 or IFRS 16.26."""
if inp.implicit_rate is not None: # both prefer the implicit rate
return inp.implicit_rate
if framework == "ASC842" and is_non_pbe and class_elected:
return inp.risk_free # risk-free expedient (non-PBE, by class)
if framework not in ("ASC842", "IFRS16"):
raise ValueError("framework must be ASC842 or IFRS16")
# Full IBR: base + credit spread + (negative) collateral adjustment
return inp.risk_free + inp.credit_spread + inp.collateral_adj
rates = RateInputs(implicit_rate=None, risk_free=Decimal("0.0400"),
credit_spread=Decimal("0.0150"), collateral_adj=Decimal("-0.0025"))
rf = select_ibr(rates, "ASC842", is_non_pbe=True, class_elected=True) # 0.0400
ifrs = select_ibr(rates, "IFRS16") # 0.0525
# The risk-free expedient sits below the built IBR -> larger measured liability
assert rf == Decimal("0.0400") and ifrs == Decimal("0.0525")
assert rf < ifrs
The expedient returns the 4.00% risk-free base while the IFRS 16 branch builds 5.25% (4.00% + 1.50% − 0.25%). Because a lower rate discounts less, the ASC 842 non-PBE electing the expedient reports a larger liability and asset for the same lease — a real trade-off between simplicity and balance-sheet impact that finance leadership signs off by asset class.
Comparison: ASC 842 vs IFRS 16 IBR Link to this section
| Dimension | ASC 842-20-30-3 | IFRS 16.26 / Appendix A |
|---|---|---|
| Preferred rate | Rate implicit in the lease | Rate implicit in the lease |
| Fallback | Incremental borrowing rate | Incremental borrowing rate |
| Collateral emphasis | Explicit (collateralized borrowing) | Similar security |
| Amount anchored to | Amount equal to the lease payments | Funds to obtain a similar-value asset |
| Term basis | Similar term | Similar term |
| Risk-free-rate expedient | Available to non-public entities, by asset class | Not available |
| Rate locked at | Commencement | Commencement |
Gotcha / Failure Mode: Applying the Risk-Free Expedient Under IFRS 16 Link to this section
The frequent cross-framework error is porting the ASC 842 risk-free shortcut into an IFRS 16 model, or applying it lease-by-lease instead of by asset class.
Before (WRONG — risk-free shortcut used under IFRS 16, and per-lease):
rate = risk_free_rate # WRONG under IFRS 16: no such expedient
# and even under ASC 842, electing per single lease is WRONG
After (correct — expedient is ASC 842 non-PBE only, elected by class):
if framework == "ASC842" and is_non_pbe and asset_class in elected_classes:
rate = risk_free_rate # policy election recorded by asset class
else:
rate = risk_free_rate + credit_spread + collateral_adj # full IBR
Debug checklist when a discount rate looks wrong:
- Confirm the framework allows the expedient. IFRS 16 never does; only ASC 842 non-public business entities may elect it.
- Check the election is by asset class, not by lease. ASC 842 requires the risk-free election to apply consistently across a class of underlying assets.
- Term-match the base rate. The reference rate must match the lease term, not a generic tenor.
- Confirm the collateral adjustment is negative. Collateral lowers the rate; a positive sign inflates it and understates the liability.
Frequently Asked Questions Link to this section
How does the ASC 842 incremental borrowing rate differ from the IFRS 16 one?
The definitions are close but not identical. ASC 842-20-30-3 emphasizes a collateralized borrowing over a similar term for an amount equal to the lease payments in a similar economic environment. IFRS 16.26 and Appendix A frame it as borrowing with similar security, over a similar term, the funds needed to obtain an asset of similar value in a similar economic environment. IFRS 16's "asset of similar value" language ties the rate more tightly to the specific right-of-use asset, while ASC 842 additionally offers a risk-free-rate practical expedient that IFRS 16 does not.
Who can use the risk-free-rate practical expedient, and how?
Only entities that are not public business entities, and only under ASC 842. ASC 842-20-30-3 lets a non-PBE elect to use a risk-free rate — a government bond rate for a period comparable to the lease term — in place of building a full incremental borrowing rate. The election is an accounting policy made by class of underlying asset, so it must be applied consistently across each class rather than chosen lease by lease. IFRS 16 has no equivalent expedient.
Why does the risk-free expedient increase the lease liability?
Because a risk-free rate is lower than a full incremental borrowing rate, which adds a credit spread to that same base. A lower discount rate discounts the future payments less, so the present value — the opening liability and the right-of-use asset — is larger. Electing the expedient therefore trades the cost and judgment of estimating a borrowing rate for a bigger balance-sheet footprint, a trade-off entities weigh by asset class.
Related Link to this section
- How to calculate the incremental borrowing rate for ASC 842 — the sibling build guide for constructing the rate this page selects between frameworks.
- Discount rate determination and mapping — the parent topic on choosing, mapping, and locking lease discount rates.
- ASC 842 and IFRS 16 core architecture and ROU models — the framework that consumes this rate to measure the liability and asset.