Skip to main content
Billing and revenue recognition run on separate schedules in DualEntry, so a revenue contract can be billed ahead of the revenue it has earned or earn revenue ahead of billing. Contract asset adjustments turn that gap into one balance sheet position per contract at each month end: a contract asset when recognition leads billing, or deferred revenue (a contract liability) when billing leads recognition. This page explains the accounting model behind those adjustments. For the setup steps, see How to Track Contract Assets on Revenue Contracts.

Contract assets and contract liabilities under ASC 606 and IFRS 15

ASC 606 and IFRS 15 both require you to present a contract on the balance sheet as a contract asset or a contract liability once either party has performed (ASC 606-10-45-1 to 45-3, IFRS 15 paragraphs 105–107). The position is the net of what you have earned and what you have billed:
  • Contract asset: you have recognized more revenue than you have invoiced. You have earned consideration that you can’t bill yet.
  • Contract liability: you have invoiced more than you have recognized. In DualEntry this is the balance on the contract’s deferred revenue accounts.
A contract presents one net position, not both at once. A contract that is $2,000 ahead on recognition for one performance obligation and $500 ahead on billing for another presents a net contract asset of $1,500. In DualEntry the contract asset sits on an account of the Unbilled Receivable type, which falls in the asset range of the chart of accounts. The standards distinguish a contract asset, where your right to payment depends on something other than the passage of time, from a receivable, where the right is unconditional. If your policy keeps those apart, name the account for what it holds (for example, “Contract Asset” or “Unbilled Revenue”) rather than relying on the type name.

Why billing and recognition drift apart

Each performance obligation on a contract posts to a deferral account. A contract invoice credits that account rather than income, and each revenue recognition entry debits it and credits revenue. When billing leads, the deferral account carries a credit balance, which is ordinary deferred revenue. When recognition leads, the same deferral account goes into a debit balance. Without an adjustment, that debit sits inside a liability account on your balance sheet, understating deferred revenue on other contracts and hiding the contract asset. This is common for contracts billed in arrears, milestone billing that trails delivery, and contracts with recognition timing set ahead of the invoicing schedule. Contract adjustments correct that presentation without changing how invoices, credits, or recognition entries post. They are a separate record layered on top of the contract’s existing documents, so the recognition schedule and billing schedule stay exactly as you configured them.

How DualEntry nets the contract position

At each month end, DualEntry sums the contract’s deferral account balances to find its net position, then books a contract adjustment that moves the balances to that position. The calculation runs per contract, across every performance obligation on it. The deferral balances come from these documents on the contract:
  • Contract invoices, excluding termination fee invoices
  • Customer credits linked to the contract
  • Revenue recognition entries, or posted and draft subledger lines for contracts in subledger mode
  • Change orders and terminations
When the net position is a debit, the contract is a net contract asset. The adjustment brings every deferral account to zero and debits the contract’s unbilled receivables account for the net amount. When the net position is a credit or zero, the contract is a net contract liability. The adjustment credits any deferral account that carries a debit balance back to zero, and debits the deferral accounts that carry credit balances by the same total, split in proportion to their credit balances. Any rounding difference goes to the account with the largest credit balance. The unbilled receivables account ends the month at zero, so any contract asset booked in an earlier month is reversed. Each adjustment books only the change since the previous month end. DualEntry calculates the cumulative target position, subtracts what earlier adjustments already booked, and posts the difference. Adjustments don’t auto-reverse on the first day of the next month.

Worked example: billing in arrears

This example follows a contract where revenue is recognized monthly and invoiced quarterly in arrears. The contract is a 12-month, $12,000 subscription starting 01/01/2026, recognized straight-line at $1,000 per month, with a $3,000 invoice dated 03/31/2026. The table below shows the main monthly summary columns for the first quarter. The cumulative columns are left out because they’re running totals of Invoiced and Recognized: In January, recognition debits deferred revenue by $1,000, leaving a $1,000 debit balance. The 01/31/2026 adjustment moves it to the unbilled receivables account:
  • Debit Unbilled Receivables $1,000
  • Credit Deferred Revenue $1,000
February repeats the same entry, so the contract asset reaches $2,000. In March, the invoice credits deferred revenue by $3,000 and recognition debits it by $1,000, which brings cumulative billing level with cumulative recognition. The 03/31/2026 adjustment reverses the asset built up so far:
  • Debit Deferred Revenue $2,000
  • Credit Unbilled Receivables $2,000
The Adjustment column shows each adjustment’s total as a positive amount. Read the Contract asset and Deferred revenue columns to see which way the position moved.

Locked periods and the first open month

DualEntry never rewrites an adjustment in a locked period. A month end counts as locked when it falls inside your company’s A/R Transactions lock or its Other GL Transactions lock. See Period Locking for how those dates are set. If a document changes the position of a month that is already locked, for example a backdated invoice, the locked month keeps the adjustment it already has. The first open month absorbs the difference, so its adjustment catches up the cumulative position. Your closed balance sheet stays as reported, and the correction lands in the current period. The same rule applies when you change a contract’s unbilled receivables account. Locked months keep the old account. The next open month’s adjustment moves the balance from the old account to the new one.

When adjustments are created and posted

DualEntry keeps adjustments current without a manual step. It recalculates a contract’s adjustments after any change to the contract’s documents, such as saving the contract, creating or linking an invoice, adding a contract customer credit, posting a change order or termination, or posting a subledger batch. A monthly run on the first day of each month catches anything those triggers missed. You can also run the calculation on demand with the Sync adjustments action on the contract. An adjustment for a month end on or before today is created as posted. An adjustment for a future month end is created as a draft and posts when that date arrives. Draft documents on the contract, such as a draft invoice or draft revenue recognition entry, count toward the position, so a posted adjustment can reflect a document that hasn’t posted yet. The monthly run covers active contracts, plus completed and terminated contracts whose effective end date is after the A/R Transactions lock date. It skips draft and archived contracts and any contract without an unbilled receivables account. Archiving a contract archives its adjustments. Unarchiving it doesn’t restore them until the next sync. For contracts in a foreign currency, DualEntry books each adjustment in the contract currency at the exchange rate on the adjustment date. A posted adjustment keeps its original rate unless its date, currency, or company changes.

How adjustments appear in reports

Contract adjustments are ordinary posted journal lines, so every general ledger report picks them up. The balance sheet shows the contract asset on the unbilled receivables account and the reduced debit balances on your deferred revenue accounts. Each adjustment is dated on the last day of its month, so it lands in the same period as the activity it nets. The revenue recognition reports work differently. The revenue waterfall, invoice waterfall, and Rollforward build from contract invoices and recognition schedules, not from the general ledger, and don’t read contract adjustments. The Rollforward computes deferred revenue as billings minus recognition, so a contract that is ahead on recognition lowers its ending balance instead of appearing as a separate contract asset. When you reconcile the Rollforward to the balance sheet, compare its ending balance to deferred revenue minus the contract asset on your unbilled receivables accounts. To see one contract’s position month by month, use the contract’s monthly summary, described in How to Track Contract Assets on Revenue Contracts.

Next steps

Last modified on November 3, 2026