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.
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
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
- Debit Deferred Revenue $2,000
- Credit Unbilled Receivables $2,000
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
- Set up the unbilled receivables account and review a contract’s position in How to Track Contract Assets on Revenue Contracts.
- Review how billing and recognition schedules are configured in Recognition Timing and Subscription Billing.
- Read how contract modifications change the position in Change Orders, Terminations, and Renewals.