Skip to main content
Back to overview

Solutions \u00b7 Revenue recognition

Watch one contract become a journal entry.

Fourteen pages of prose, the five ASC 606 steps, and one entry at month end. Here is every stage in between \u2014 including the one where it stops and waits for you.

Stage one

First, it reads the document.

Three passes, not one. The first reads the contract and records what it finds. The second writes the ASC 606 determination from those recorded facts — not from the document. Contracts that trip a flag escalate to a third, more capable pass.

Splitting the reading from the reasoning is deliberate: the step that interprets never sees the raw prose, so it cannot quietly invent a term that was not extracted.

Scanned, image-only PDFs are rejected with a message asking you to OCR and retry — the engine does not guess at pixels.

Order form · CON-0007

term
12 months
commencement
Effective Date
element
Platform licence
element
Implementation services
consideration
53,000.00 USD
billing
annual, in advance

Illustrative — not a customer contract

ASC 606

Then it works the five steps.

Not a summary of them — the five the standard actually specifies, in order, each producing something you can read and disagree with.

Step four is the one people assume is automatic. It is not: the proposed allocation is checked against a deterministic allocator running decimal arithmetic, and a divergence past five cents becomes a judgment you have to answer.

  1. Step 1: Identify the contract

    CON-0007 · executed · 12-month term

  2. Step 2: Identify the performance obligations

    2 obligations · 1 over time, 1 point in time

  3. Step 3: Determine the transaction price

    53,000.00 USD · no variable component

  4. Step 4: Allocate the price

    48,000.00 · 5,000.00 · residual ties to 0.00

  5. Step 5: Recognize as obligations are satisfied

    12 monthly periods · 4,000.00 / mo

Held

Then it stops.

Nothing has posted. Nothing has been created in your ledger, because at this point no contract record exists at all — what exists is a proposal: the determination, the judgments behind it, the paragraphs it turned on, and the alternative it weighed and set aside.

It waits there for a person with the authority to approve it. Approve it, change it and certify your version, or reject it with a reason that stays on the record. Only then does a contract exist.

The accounting judgment stays yours. The engine does the arithmetic and keeps the evidence.

Determination · draftAwaiting your sign-off
Proposed treatment
2 obligations · ratable + point in time
Judgments raised
1 · allocation within tolerance
Citations attached
606-10-25 · 606-10-32 · 606-10-55
Posted to your ledger
nothing

After you approve

Now it’s a schedule.

Twelve periods, derived from the treatment you approved. The waterfall is recomputed from the contract and its approved template every time you open it — there is no stored number to drift out of agreement with the contract.

The rounding residual lands on the last period, so the schedule ties to the transaction price exactly rather than to within a cent.

Twelve equal monthly recognition periods of 4,000.00 US dollars for the platform licence, plus 5,000.00 recognised at go-live for implementation.

Platform licence
48,000.00
over time
Implementation
5,000.00
at go-live
Residual
0.00
ties exactly

Month end

One entry, and a person who posts it.

At month end the engine drafts the recognition entry from the approved treatment and queues it for review. Approving it does not send it anywhere.

By default the month posts as a single consolidated entry, and someone holding posting rights — re-authenticated — is the one who posts it. Two people, two moments, both on the record.

  • Prepared for QuickBooks, with your chart-of-accounts codes resolved onto the lines
  • A posting key makes a retry a no-op, so a re-run cannot double-post
  • Posted entries are read back daily and any drift is reported, never silently repaired
Journal entry · draftAwaiting approval
Draft monthly recognition entry: debit deferred revenue 4,000.00, credit revenue 4,000.00.
AccountDebitCredit
Deferred revenue4,000.00
Revenue — subscription4,000.00

Illustrative. The consolidated month pools one deferred-revenue debit against a revenue line per contract.

Every figure, traceable

Click a number. Watch it prove itself.

Lineage / CTR-2041

Monthly revenue · Acme Cloud

MAY 2026 · $4,000.00

01 · Contract

CTR-2041

Acme Cloud · $53,000 · signed order form · 2 performance obligations

02 · Approval

APR-118

Treatment V1 · controller approved · rule signature verified

03 · Schedule

SCH-2041

Row 03 / 12 · $4,000.00 · deterministic execution

04 · Journal entry

JE-1074

DR deferred revenue · CR revenue · $4,000.00

05 · QuickBooks

QBO JE #3291

Posted after approval · linked to JE-1074

What's in the box

Recognition your auditor can retrace.

Drafted treatments, with their reasoning

Every proposal carries ASC citations, a confidence read, and the alternative it weighed — persisted as a judgment record before anything executes.

Penny-perfect allocation

All money math runs in decimal arithmetic, and the rounding residual lands on the last element — so schedule totals tie to the transaction price exactly.

Contract modification math

Upgrades, downgrades, and cancellations recalculate through the same review. You see the reworked schedule before it takes effect, never after.

Versioned, immutable templates

The rule the engine runs is the exact version you approved. New versions supersede old ones; nothing is edited in place.

Certification that pins the version

Certifying refuses unless the determination's content hash still matches the version you were reading — you cannot approve one analysis and ship another.

Period locking

Hard-closed periods reject edits at the database layer. Corrections land in the next open period as reversals, the way your auditor expects.

Start with one signed contract.

See the treatment, the waterfall, and the prepared entry before you connect your GL \u2014 sample contracts included.