Skip to main content
DoneThat

AI Adoption GuideFinanceInvoice

ASC 606 revenue recognition split

LLM applies rev-rec rules to multi-element arrangements and posts the schedule.

Finance processPlanBudgetInvoiceCollectPayCloseReportAudit

By Don, DoneThat’s AI coach · updated

The draft is a proposed allocation, not the booked schedule

A usable ASC 606 split for a multi-element arrangement is a draft allocation that names each performance obligation, cites the contract language that makes it distinct, points to the policy rule that governs timing, and maps dollars only from the approved standalone selling price (SSP) table. The controller posts. The draft is not the booked schedule.

If the model cannot identify a performance obligation, that line stays empty. If the approved SSP file has no price for an identified obligation, allocation for that obligation stays empty. Inventing a distinct good or service the contract does not support, or filling a missing SSP so the schedule foots, is a quality failure even when the arithmetic looks clean.

Invoice and billing systems (Workday, SAP, Oracle, Salesforce, and peers) already hold order lines, invoice lines, and sometimes bundled SKUs. Those lines are commercial packaging. They are not the ASC 606 performance obligation set. A one-line invoice for a platform, onboarding, and year-one support still needs a split before revenue can be recognized as each obligation is satisfied.

Related work on turning signed terms into billable documents lives in contract-to-invoice generation. The revenue split starts after you know what was sold. It is not a substitute for reading the arrangement.

Identify each performance obligation with a contract cite

Work from the customer contract and any order form, statement of work, or amendment that is part of the arrangement, not from the invoice description. For each candidate obligation, record four things.

  1. A short name that matches how policy and the SSP table refer to the good or service.
  2. A cite: section, exhibit, or SKU description, with a short quote or paraphrase of the promise.
  3. Whether the promise is distinct under the entity's ASC 606 policy: capable of being distinct, and distinct in the context of the contract.
  4. The satisfaction pattern the policy assigns: point in time or over time, and the measure of progress if over time.

If two promises are not distinct in context (for example, a license that is only functional after a tightly integrated implementation the customer cannot obtain elsewhere), combine them and cite the policy rule that requires combination. Do not split them to match invoice lines.

If a clause is ambiguous, a renewal option that might be a material right, variable consideration that might indicate a separate obligation, or a service that might be a setup activity, do not invent a distinct obligation. Leave that candidate empty and flag the clause for the accountant. Empty is the correct output when identification fails.

Illustrative walkthrough (not a live booking): a SaaS order form for $120,000 states in Section 2 access to the hosted application for 12 months, in Exhibit B a 40-hour implementation described as configuration of existing modules with no custom code, and in Section 5 standard email support during the subscription term. Policy treats the hosted access as a stand-ready series, implementation as a distinct service when it is configuration only, and standard support as part of the stand-ready access unless a separate premium SLA is sold. The draft should cite Section 2, Exhibit B, and Section 5, state the distinctness conclusion for each, and refuse to add a training obligation that appears only in a sales email.

The same contract-reading discipline shows up in contract review for revenue and lease audit, where the job is to surface the clauses that drive recognition, not to rewrite them.

Allocate transaction price only from the approved SSP file

After identification, allocate the transaction price in relative SSP. The only acceptable SSP values are those already approved for the period: the SSP file, a price book with documented SSP, or residual method where policy explicitly allows it for that class of good or service.

The model does not estimate SSP from list price, from a discount on the order form, or from what similar deals usually get. If implementation is identified as distinct and the SSP file has no implementation SSP for that product family, stop. Do not back into a number so the allocation percentages sum to 100 percent.

Variable consideration (usage, rebates, credits) stays in the transaction-price determination the accountant already owns. The split draft consumes the transaction price the desk provides, or the fixed consideration policy says to take from the contract. It does not re-forecast usage to make the schedule complete.

Continue the illustration. Assume the desk provides fixed consideration of $120,000 and the approved SSP file shows hosted access $100,000, configuration implementation $20,000, and no separate SSP for standard support because policy bundles support with access. Relative SSP is 100 to 20. Hosted access takes $100,000 of the $120,000. Implementation takes $20,000. If the SSP file had been missing implementation, the draft would show the two identified obligations, cite Exhibit B, and leave the allocated amounts blank rather than using $20,000 from the order form line as if it were SSP.

Posting an allocation without SSP is the failure mode that turns a helpful draft into a control exception. An ERP invoice in SAP or Oracle can be booked to a revenue account on cash or billings. That posting is not an ASC 606 allocation. If the draft has no SSP cite, the controller should not post the split.

Assemble the recognition schedule the controller will post

The schedule is a proposed journal pattern, not an entry. For each allocated obligation, state the amount (only if SSP-based allocation succeeded), when recognition starts and what event or time measure releases it, the contract cite and the policy paragraph that select that pattern, and the accounts or revenue codes the entity actually uses if the chart of accounts is in scope. Otherwise leave account mapping to the poster.

Do not auto-post. Do not overwrite an existing deferred-revenue amortization schedule in Workday, SAP, or Oracle, or a billing schedule in Salesforce, because the draft looks complete. The controller, or the revenue accountant they designate, compares the draft to the contract, the SSP file, and policy, then posts.

Timing often collides with period-end accruals. If implementation is in progress at period end and policy recognizes that obligation over time, the schedule may need an accrual for work performed but not billed. That is a separate judgment from the split itself. See accrual auto-suggestion. If the arrangement is a lease or contains a lease, stop the revenue split and send the contract to lease analysis rather than forcing ASC 606 treatment. lease accounting agent is the adjacent path.

In the illustration, the draft might propose $20,000 implementation at the go-live date in Exhibit B's acceptance clause, and $100,000 access ratably over the 12-month term in Section 2. It would not propose recognizing access at invoice date because the CRM billed the full $120,000 on day one.

Leave the split empty when a performance obligation or SSP is missing

Quality on this page is not a full schedule every time. Quality is a draft that is either fully supported, obligation by obligation, with cites and approved SSP, or explicitly incomplete.

Refuse to fill a performance obligation that is not in the contract, including implied training, premium support, or professional services a salesperson mentioned. Refuse to fill an SSP that is not in the approved file, including list price, cost-plus, or a rounded guess. Refuse to treat the output as a booked schedule. Treating the draft as posted deferred revenue is the second failure mode, next to posting without SSP. Inventing a distinct obligation so every invoice line has a matching performance obligation is the third.

When identification fails, return the contract clauses that were considered and a blank obligation table. When allocation fails, return the identified obligations with blank amounts and a pointer to the missing SSP rows. Either empty result is more useful than a schedule the controller must unwind.

The accountant's last step is the same as it was before a draft existed: confirm distinctness, confirm SSP, confirm timing, then post. The model shortens the write-up. It does not take the signature.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first