RevRec brainstorm · ASC scenarios · ASC 606 engineering spec

15 — ASC 606 engineering specification

Status: engineering reference (not legal advice)
Source PDF: revenue-from-contracts-with-customers-updated-220124.pdf (FASB ASC 606 codification excerpt you hold locally)
Maps to: 14-domain-model.md · 11-rules-reference.md · 07-asc606-worked-examples.md

Purpose: Give engineers a product-usable ASC 606 spec — required behaviors, decision tables, and codification pointers — without reading the full FASB prose. When unsure, open the PDF at the cited paragraph.


0. How to use this doc

If you are… Do this
Implementing apply Implement §2–§6 hooks; store policy ids
Writing tests Assert §8 identities + scenario tables
Arguing with finance Point at ASC refs; don’t invent spreadsheet folklore
Extending scope Add policy; don’t bypass five steps

IFRS 15: Same five-step core; cite IFRS separately if dual-reporting books are enabled later.


1. Five-step pipeline (mandatory)

Step ASC pointer Domain hook
1 Identify the contract 606-10-25-1 open_contract gates
2 Identify POs 606-10-25-1425-22 PO creation
3 Determine TP 606-10-32-232-11 TP + VC
4 Allocate TP to POs 606-10-32-2832-32 Allocation slices
5 Recognize revenue 606-10-25-2325-30 Schedule + recognize

No ETL shortcut may skip or reorder these for “convenience.”


2. Step 1 — Contract

606-10-25-1 criteria (all required):

  1. Parties approved the contract and are committed
  2. Rights to goods/services identifiable
  3. Payment terms identifiable
  4. Commercial substance
  5. Collectibility of consideration probable

Engineering:

Check Behavior
Missing approval / cancelled before start Do not open_contract; quarantine
Collectibility fails Do not recognize; policy may delay activation
Combination of contracts Optional later policy (606-10-25-9); default treat CB subscription as unit

Contract modifications: §5 below (606-10-25-10…13).


3. Step 2 — Performance obligations

3.1 Distinct goods/services

606-10-25-19: Distinct if:

  1. Customer can benefit from good/service on its own or with resources readily available, and
  2. Promise is separately identifiable from other promises (606-10-25-21 factors: integration, modification, interdependence).

606-10-25-22: If not distinct, combine until the bundle is distinct.

3.2 Series pragmatic expedient (SaaS)

606-10-25-14: A series of distinct goods/services substantially the same with same transfer pattern may be accounted as one PO.

Engineering default for subscription SaaS: one ratable PO per subscription item/plan charge series — not one PO per invoice month.

3.3 Product mapping

Catalog signal Typical method
Recurring SaaS license/access ratable (over time)
One-time setup (if distinct) point_in_time or ratable per policy
PS hours / milestones proportional + record_delivery
Usage VC + recognize as usage constraint allows

4. Step 3 — Transaction price

606-10-32-2: TP = amount entity expects to be entitled to in exchange for transferring promised goods/services (exclude amounts collected for third parties, e.g. many sales taxes).

4.1 Variable consideration

606-10-32-8: Estimate using expected value or most likely amount.
606-10-32-11 constraint: Include VC only to the extent it is probable that a significant reversal will not occur when uncertainty resolves.

Engineering:

4.2 Significant financing

If material (606-10-32-15…), adjust TP — enterprise-deep; flag and quarantine if detected without policy.

4.3 Noncash / consideration payable to customer

Support as TP adjustments when source events exist; otherwise Out until demanded.


5. Step 4 — Allocate TP

606-10-32-28: Allocate to depict amount expected for satisfying each PO.
606-10-32-31: Relative standalone selling price basis.
606-10-32-32: SSP = price at which entity would sell good/service separately.

Engineering:

Stage Behavior
Single PO 100% allocation
Multi-PO ssp.relative using SSP library
Residual approach ssp.residual when SSP highly variable (enterprise-deep)
Discount allocation Per 606-10-32-36… when discount doesn’t apply proportionally

SSP library versioning must be auditable (smoke ssp themes).


6. Step 5 — Recognize revenue

6.1 Control transfer

606-10-25-23: Recognize when (or as) the entity satisfies a PO by transferring control.

6.2 Over time vs point in time

606-10-25-27 — over time if any:

(a) Customer simultaneously receives and consumes benefits as entity performs; or
(b) Entity’s performance creates/enhances an asset customer controls; or
(c) No alternative use + enforceable right to payment for performance completed.

Else 606-10-25-30: point in time; use control indicators (606-10-25-30).

Engineering methods:

Method When Measure progress
ratable Over-time series (SaaS access) Time (daily lines → period)
point_in_time PIT Event date / delivery
proportional Over-time input/output Delivery evidence %

6.3 Right-to-invoice practical expedient

606-10-55-18: If entitled to invoice amount corresponding directly to value to customer, may recognize that amount. Optional policy — not a license to invent POs from invoices.


7. Contract modifications (critical)

606-10-25-10: Mod = approved change in scope/price that changes enforceable rights/obligations.

Decision table

Condition ASC Policy id Engine effect
Added distinct goods and price reflects standalone price 606-10-25-12 mod.separate_contract New contract (or new PO set treated as separate)
Remaining goods/services distinct from those transferred 606-10-25-13(a) mod.prospective Allocate remaining TP to remaining POs; no catch-up on satisfied
Remaining goods/services not distinct 606-10-25-13(b) mod.cumulative Update + cumulative catch-up recognition

Default for CB SaaS upgrades: mod.prospective (ADR 0005).


8. Contract asset, liability, receivable

Concept ASC Meaning Typical CB pattern
Contract liability 606-10-45-2 Paid / billed before performance Deferred revenue
Contract asset 606-10-45-3 Performed before unconditional right to payment Unbilled / recognize-before-bill
Receivable 606-10-45-1 / 45-4 Unconditional right to consideration AR from invoice

Engineering: Maintain these as first-class balances; AC journals them — RevRec calculates movements (ADR 0006).


9. Disclosures / RPO

606-10-50-13: Disclose aggregate TP allocated to unsatisfied (or partially unsatisfied) POs and when revenue is expected (quantitative bands or qualitative).
606-10-50-14: Practical expedients (≤1 year original duration; or right-to-invoice).

Engineering UC12: RPO report = sum of remaining allocated − satisfied by PO, bucketed by schedule.

Other disclosures (606-10-50) — enterprise reporting pack; don’t block engine.


10. Codification index (PDF map for engineers)

Open your local PDF and search these paragraph IDs:

Topic Paragraphs
Contract criteria 606-10-25-1 … 25-8
Combination 606-10-25-9
Modifications 606-10-25-10 … 25-13
Identifying POs / series / distinct 606-10-25-14 … 25-22
Satisfaction / over time / PIT 606-10-25-23 … 25-37
TP / VC / constraint 606-10-32-2 … 32-14
Financing / noncash / payable to customer 606-10-32-15 … 32-27
Allocation / SSP 606-10-32-28 … 32-41
Contract balances 606-10-45-1 … 45-5
Disclosures / RPO 606-10-50-1 … 50-23
Implementation guidance / examples 606-10-55-…

(Exact PDF pagination varies by publisher build; paragraph IDs are stable.)


11. Engine test obligations (minimum)

See the exhaustive catalog: 20-asc606-scenario-catalog.md and concrete cards 21-asc606-priority-scenario-cards.md.

Minimum families (also in catalog):

  1. Single-PO ratable open → recognize → deferred rollforward
  2. Bill before recognize → liability increases then releases
  3. Recognize before bill → contract asset then clears on invoice
  4. Prospective upgrade mid-term
  5. Cumulative catch-up case (synthetic) — A606-E-8 / NEW
  6. CN reduces unrecognized first; overflow reverses recognized
  7. Terminate voids remaining
  8. Multi-PO relative SSP (Complete maturity)
  9. VC constraint prevents over-recognition (Complete)
  10. Locked period + PPA path
  11. Collectibility / implicit concession
  12. Material right / upfront fee (when in scope)
  13. RPO disclosure

Smoke quarry supplies numeric expectations via accounting equality, not sheet shape.


12. Non-goals of this spec