ASC 842 lease remeasurement calculator
ASC 842 lease remeasurement calculator: new lease liability, ROU asset adjustment, gain, and the operating or finance lease schedule after a modification.
What it computes
Under ASC 842, a lessee remeasures its lease liability when a modification, a reassessment of the lease term or a purchase option, or certain other events change the remaining lease payments. The calculator computes the new lease liability as the present value of the remaining payments. It adjusts the right-of-use (ROU) asset by the change and recognizes a gain when a liability decrease exceeds the ROU asset's carrying amount. It then produces the period-by-period schedule of interest, liability, ROU amortization and lease cost for an operating or a finance lease.
Method and conventions
The periodic rate is
r = discount_rate_annual ÷ periods_per_year, a nominal rate. The
remaining term n is remaining_periods, or the last
period in payments when it is omitted. Periods not listed carry
no payment. Payments are taken to the cent.
-
New lease liability =
Σ payment_k ÷ (1 + r)^kfor payments in arrears, or÷ (1 + r)^(k − 1)for payments in advance (payment_timingbegin), fork = 1 … n. - Liability adjustment =
new liability − liability_before. -
ROU adjustment =
max(liability adjustment, −rou_asset_before), so the asset is not reduced below zero (ASC 842-20-35-4). Any excess decrease is the gain recognized. - New ROU asset =
rou_asset_before + ROU adjustment.
Operating lease. The total remaining lease cost is
remaining payments + new ROU asset − new liability. Each period
takes total ÷ n, rounded to the cent, as a single straight-line
lease cost, and the last period takes what is left. ROU amortization in each
period is lease cost − interest.
Finance lease. ROU amortization is
new ROU asset ÷ n, straight-line over the remaining lease term.
Lease cost is interest + amortization.
Interest is opening liability × r in arrears, or
(opening liability − payment) × r in advance, rounded to the cent
each period. The final period's interest is the amount that closes the
liability at 0.00, and the ROU asset also closes at 0.00. Every row foots, and
totals are the sums of the rows. The trace reports the final-period true-up.
The inputs event and discount_rate_updated do not
change the arithmetic. They drive the citations and warnings. ASC 842-10-35-5
requires a rate determined at the remeasurement date for modifications and for
term or purchase-option reassessments, and keeps the original rate for a
resolved contingency or a residual value guarantee change. The calculator
warns when the flag contradicts the event. It also warns that an index or rate
change alone is not a remeasurement trigger.
Entities and auditors differ on several judgments, and FactLot leaves each to
the user. The first is the discount rate itself (the rate implicit in the
lease or the incremental borrowing rate). The second is whether payments are
in advance or in arrears. The third is whether a shortened term is a partial
termination. For modification_shorten_term, the calculator
applies only the liability-change adjustment and warns that ASC 842-10-25-13
may require a proportionate reduction of the ROU asset. For finance leases it
amortizes over the remaining lease term and warns that useful life applies
when ownership transfers or a purchase option is reasonably certain.
Inputs that matter
-
classification:operating(single straight-line cost) orfinance(interest plus amortization). -
payments: remaining payments by period after the event, net of incentives receivable, as amounts per period. -
remaining_periods: remaining term when the final periods are rent-free. -
payment_timing:begin(in advance) orend(in arrears, the default). -
discount_rate_annual: the annual rate applied to the remaining payments, divided byperiods_per_year. -
discount_rate_updated: whether the rate was set at the remeasurement date or kept from commencement. -
liability_before: carrying amount of the liability just before remeasurement. -
rou_asset_before: carrying amount of the ROU asset just before remeasurement, after any impairment. -
event: the trigger, such asmodification_extend_termorreassessment_of_term_or_option.
Limits
- Lessee accounting under ASC 842 only. Lessor accounting, IFRS 16 and GASB 87 are not covered.
- It does not decide whether a change is a separate contract, whether remeasurement is required, or whether classification changes. The user states the classification and the event.
- It does not determine the discount rate or allocate consideration between lease and non-lease components.
- Initial direct costs, new incentives and prepaid rent arising from a modification are not added to the ROU asset beyond the liability change.
- The partial-termination approach for a shortened term is not applied. Impairment is not tested.
- Periods are of equal length with one rate throughout. Only the payments given are discounted; variable payments are not estimated. There are no journal entries or disclosure tables.
Worked example
Inputs from FactLot's shared test case "operating lease, term extended, monthly payments in arrears, rate updated", which the TypeScript and Python libraries must both reproduce:
{
"classification": "operating",
"payments": [
{
"period": 1,
"amount": 10000
},
{
"period": 2,
"amount": 10000
},
{
"period": 3,
"amount": 10000
},
{
"period": 4,
"amount": 10000
},
{
"period": 5,
"amount": 10000
},
{
"period": 6,
"amount": 10000
},
{
"period": 7,
"amount": 10000
},
{
"period": 8,
"amount": 10000
},
{
"period": 9,
"amount": 10000
},
{
"period": 10,
"amount": 10000
},
{
"period": 11,
"amount": 10000
},
{
"period": 12,
"amount": 10000
},
{
"period": 13,
"amount": 10000
},
{
"period": 14,
"amount": 10000
},
{
"period": 15,
"amount": 10000
},
{
"period": 16,
"amount": 10000
},
{
"period": 17,
"amount": 10000
},
{
"period": 18,
"amount": 10000
},
{
"period": 19,
"amount": 10000
},
{
"period": 20,
"amount": 10000
},
{
"period": 21,
"amount": 10000
},
{
"period": 22,
"amount": 10000
},
{
"period": 23,
"amount": 10000
},
{
"period": 24,
"amount": 10000
}
],
"discount_rate_annual": 0.06,
"discount_rate_updated": true,
"liability_before": 200000,
"rou_asset_before": 190000,
"event": "modification_extend_term"
}
Result
| Result | Value |
|---|---|
classification | operating |
remaining_periods | 24 |
periodic_rate | 0.005 |
total_remaining_payments | 240,000 |
new_lease_liability | 225,628.66 |
liability_adjustment | 25,628.66 |
rou_asset_adjustment | 25,628.66 |
gain_recognized | 0 |
new_rou_asset | 215,628.66 |
straight_line_lease_cost | 9,583.33 |
periodic_amortization | none |
total_interest | 14,371.34 |
total_amortization | 215,628.66 |
total_lease_cost | 230,000 |
Audit trail
Every intermediate value, in order, with the formula that produced it. Formula calc.lease_remeasurement_asc842@2.
| Step | Value | Formula |
|---|---|---|
| Event | modification_extend_term | ASC 842-10-25-8 and 25-11: modification not accounted for as a separate contract; remeasure and reallocate at the effective date |
| Remaining term | 24 | periods after the remeasurement date |
| Periodic discount rate | 0.005 | 6% ÷ 12 (rate updated at remeasurement, ASC 842-10-35-5) |
| Remaining lease payments | $240,000.00 | Σ payment_k, k = 1..n |
| New lease liability | $225,628.66 | ASC 842-10-35-4 and 842-20-35-3: Σ payment_k ÷ (1 + r)^k, r = 0.005, payments in arrears |
| Liability adjustment | $25,628.66 | $225,628.66 − $200,000.00 carrying amount |
| ROU asset adjustment | $25,628.66 | ASC 842-20-35-4: liability change adjusts the ROU asset, floored at −$190,000.00 so the asset is not reduced below zero |
| Gain recognized | $0.00 | ASC 842-20-35-4: remeasurement in excess of the ROU asset carrying amount goes to profit or loss |
| New ROU asset | $215,628.66 | $190,000.00 + $25,628.66 |
| Straight-line lease cost | 9,583.33 USD/period | ASC 842-20-25-6: (remaining payments $240,000.00 + ROU $215,628.66 − liability $225,628.66) ÷ 24 |
| Schedule | ASC 842-20-25-6 and 842-20-35-3: interest = opening liability × r; ROU amortization = straight-line cost − interest | payment in arrears: interest accrues on the opening liability |
| Rounding | every row is in cents and rolls forward exactly: closing liability = opening − payment + interest, closing ROU = opening ROU − amortization; interest is rounded to the cent half away from zero each period; the final period's interest is the amount that closes the liability at 0.00, and its lease cost is total lease cost less the earlier periods, so the ROU asset also closes at 0.00; totals are the sums of the rows | |
| Final-period interest true-up | $0.02 | period 24 interest $49.77 versus $49.75 at opening liability × r: the cents left by rounding each period |
| Total interest | $14,371.34 | Σ row interest = remaining payments − new lease liability |
| Total lease cost | $230,000.00 | Σ row lease cost = remaining payments + new ROU asset − new lease liability |
Check it in Excel
The lease-accounting-asc842-remeasurement.xlsx workbook recomputes this calculator with live Excel formulas beside FactLot's numbers and a difference column. Its inputs are synthetic; the reconciliation guide explains each sheet.
Use it from an agent or your code
- MCP: tool
calc_lease_remeasurement_asc842onhttps://api.factlot.com/mcp(connect a client). - Python:
factlot.run_tool("calc_lease_remeasurement_asc842", input)runs the same calculation offline (Python SDK). - Input schema: every field is described in tools.json.
curl -s https://api.factlot.com/v1/calc/lease_remeasurement_asc842 \
-H 'content-type: application/json' \
-d '{"classification":"operating","payments":[{"period":1,"amount":10000},{"period":2,"amount":10000},{"period":3,"amount":10000},{"period":4,"amount":10000},{"period":5,"amount":10000},{"period":6,"amount":10000},{"period":7,"amount":10000},{"period":8,"amount":10000},{"period":9,"amount":10000},{"period":10,"amount":10000},{"period":11,"amount":10000},{"period":12,"amount":10000},{"period":13,"amount":10000},{"period":14,"amount":10000},{"period":15,"amount":10000},{"period":16,"amount":10000},{"period":17,"amount":10000},{"period":18,"amount":10000},{"period":19,"amount":10000},{"period":20,"amount":10000},{"period":21,"amount":10000},{"period":22,"amount":10000},{"period":23,"amount":10000},{"period":24,"amount":10000}],"discount_rate_annual":0.06,"discount_rate_updated":true,"liability_before":200000,"rou_asset_before":190000,"event":"modification_extend_term"}'