Skip to main content
DualEntry implements the five-step revenue recognition model shared by ASC 606 (US GAAP) and IFRS 15 as a structured workflow. Each step maps directly to a field or action in the contract data model, so the standards’ requirements are enforced by the system rather than tracked in spreadsheets.

Step 1: Identify the contract

In DualEntry, you create a contract record to represent your arrangement with a customer. You can create contracts manually in the UI with How to Create a Revenue Contract, through the API at /public/v2/contracts/, or automatically from a Stripe subscription sync. A contract requires a customer, a start date, and a status. New contracts begin in draft status, where you configure their terms before activation. Contracts also support an end date, billing frequency, and currency. The contract record is the top-level unit of accounting for revenue recognition: all obligations, schedules, and journal entries trace back to it. DualEntry enforces that every contract has at least one performance obligation before you can activate it. This structural requirement ensures the five-step model begins with a complete arrangement rather than an empty shell. You can view all contracts and their current statuses from the contract list view or through the API at /public/v2/contracts/.

Step 2: Identify performance obligations

Each line on the contract is a performance obligation representing a distinct good or service you have promised. You specify the item, the quantity, the unit rate or term amount, and the recognition strategy. Quantity and unit rate are the units and price for one invoice period. DualEntry treats each obligation as a distinct unit of accounting. See How Quantity and Rate Work. When you add an obligation, you also set its standalone selling price, billing group, and any obligation-level conditions. If a contract bundles multiple deliverables (for example, a software license and an implementation service), each is its own obligation with its own recognition schedule. The distinction between obligations matters for allocation and recognition timing. A 12-month license recognized straight-line and a one-time implementation recognized immediately on completion produce different revenue patterns even though they belong to the same contract. You define this separation at the obligation level so DualEntry can handle each stream independently.

Step 3: Determine the transaction price

The transaction price is the total consideration you expect to receive from the contract. DualEntry calculates this automatically as the sum of all obligation amounts. On a schedule-driven flat-rate obligation, that amount is quantity per period × unit price per period × number of periods, unless you enter a Total amount instead. One-time and milestone obligations do not multiply across periods. See How to Enter Obligation Pricing. When the terms of a contract change after activation, DualEntry supports variable consideration through change orders. A change order adjusts the transaction price by adding, removing, or modifying obligations. DualEntry then applies the contract modification treatment, which is the same under ASC 606 and IFRS 15. The transaction price does not include amounts allocated to obligations on other contracts. Each contract maintains its own price independently. If you need to link related contracts (for example, a master agreement and a statement of work), you can use contract grouping, but allocation still operates at the individual contract level.

Step 4: Allocate to performance obligations

DualEntry allocates the transaction price to each obligation based on standalone selling price (SSP). You set the SSP per item in your item records. When the total contract price differs from the sum of the individual SSPs, DualEntry allocates proportionally so that each obligation receives its relative share of the transaction price. For example, if a contract totals $90,000 and the two obligations have SSPs of $60,000 and $40,000, DualEntry allocates $54,000 and $36,000 respectively. The allocated amount (not the listed line amount) determines how much revenue DualEntry recognizes for each obligation. For full details on SSP configuration, the allocation formula, and the residual method, see Allocations and SSP.

Step 5: Recognize revenue

Revenue is recognized per each obligation’s strategy over the generated recognition schedule. DualEntry generates the schedule when the contract is activated and creates journal entries automatically at each recognition cadence (daily, weekly, monthly, quarterly, semi-annually, or annually). Available strategies include straight-line, daily pro-rata, usage-based, milestone, and immediate. You assign the strategy per obligation, so a single contract can mix approaches. The recognition start date and cadence can differ from the billing start date; billing and recognition are independent schedules. On a usage obligation, prepaid drawdown invoices a committed pool up front and recognizes revenue only as recorded usage draws that remaining balance. For obligations satisfied at discrete points rather than over time, the milestone method recognizes revenue when you mark each defined deliverable complete, so recognition follows achievement rather than the calendar. This suits deliverable-driven work such as professional services, construction, and staged development. DualEntry does not offer a named percentage-of-completion (POC) strategy. For arrangements that recognize as work is performed, the usage-based strategy (recognize based on consumption records) or the milestone method (recognize on completed deliverables) is the closest fit. If a contract specifically requires cost-to-complete POC accounting, confirm the approach with your DualEntry account team before relying on it. You can review the resulting entries in the revenue waterfall and deferred revenue schedule. Each journal entry links back to its source obligation, making it straightforward to trace recognized amounts to the underlying arrangement.
Revenue recognition begins only when the contract status is active. Contracts in draft status do not generate recognition entries, even if their start date has passed.

Where ASC 606 and IFRS 15 differ

ASC 606 (US GAAP) and IFRS 15 were issued together and share the five-step model, so the steps above apply under either standard. DualEntry has no accounting framework setting: the contract engine allocates, schedules, and posts revenue the same way whichever standard you report under. The standards diverge on a few judgments, and DualEntry leaves each of them to you. Make them before you enter or activate the contract.

Collectibility

Both standards treat an arrangement as a contract only when collecting the consideration is probable. ASC 606 sets the higher bar, because “probable” there means likely to occur. Under IFRS 15 it means more likely than not. DualEntry does not assess collectibility, and activating a contract starts recognition either way. A contract that has not yet met the threshold for your framework belongs in draft.

Licenses of intellectual property

Both standards classify a license as either a right to access intellectual property, recognized over time, or a right to use it, recognized at a point in time. They reach that classification differently. ASC 606 sorts licenses by the nature of the IP. Functional IP, such as software, has standalone utility. Symbolic IP, such as a brand, draws its value from your ongoing activities. IFRS 15 asks whether your ongoing activities significantly affect the IP the customer holds rights to. The same license can be classified differently under each standard. DualEntry records the outcome rather than the analysis: assign an over-time strategy such as straight-line for a right to access, or the immediate strategy for a right to use.

Contract costs

ASC 340-40 and IFRS 15 both require you to capitalize the incremental costs of obtaining a contract, such as sales commissions. Both let you expense those costs when the amortization period would be one year or less. They differ on impairment: IFRS 15 requires you to reverse an impairment loss when conditions improve, and US GAAP prohibits the reversal. The DualEntry revenue recognition engine does not capitalize or amortize contract costs. Record them, and any impairment, through journal entries under your framework’s rules.

Accumulated revenue on legacy contracts

When you cut over an in-flight contract from a legacy system into DualEntry, enter the amount of revenue already recognized before the cutover date as accumulated revenue. DualEntry uses this amount as the contract’s opening recognized revenue balance. Accumulated revenue preserves the historical revenue position without creating duplicate journal entries for periods before DualEntry managed the contract. After activation, DualEntry schedules and posts only the remaining revenue according to the contract’s obligations, allocation, and recognition strategy. Use accumulated revenue only for revenue that was already recognized in the legacy system. Deferred revenue, contract assets, and other opening balance sheet positions should be reconciled through your cutover balances and reviewed in the revenue waterfall and deferred revenue schedule. Those opening balances stay as you cut them over. Ongoing contract asset and deferred revenue positions post through contract adjustments when the contract has an unbilled receivables account. See How to Track Contract Assets on Revenue Contracts.

The contract lifecycle

Contracts move through five statuses that govern when recognition occurs and what actions are available.
  • Draft - the contract is being configured. No recognition occurs.
  • Active - the contract is live. DualEntry generates recognition schedules and journal entries.
  • Completed - all obligations are satisfied and all revenue is recognized.
  • Terminated - the contract ended before its original completion date. Recognition stops or adjusts according to the termination terms.
  • Archived - the contract is retained for historical reference but is no longer active.
Transitions between statuses are logged in the audit trail. You can also filter contracts by status in the contract list view and through the API. Moving a contract from draft to active triggers the allocation and schedule generation pipeline described in the next section. Moving a contract to completed, terminated, or archived does not reverse previously recognized revenue; those entries remain in the ledger.

How the steps connect

The five steps form a pipeline rather than isolated actions. When you activate a contract, DualEntry runs Steps 3 through 5 in sequence: it calculates the transaction price, allocates across obligations by SSP, and builds the recognition schedule. If a change order modifies the contract later, DualEntry reruns allocation and adjusts the schedule accordingly. The same pipeline applies (updated price, updated allocation, updated schedule), so the five-step model stays consistent through the contract’s lifetime. For reporting on recognized and deferred revenue and for auditor schedules, see Reporting. For the month-end contract asset or deferred revenue position, see How to Track Contract Assets on Revenue Contracts. For the billing side of contracts, see Subscription Billing.
Last modified on November 5, 2026