16 — Capability gap matrix
Status: living decision aid
Sources: research/zuora-revenue-capability-map.md §§2.1–2.10 · 12-zuora-north-star-scope.md · 03-event-catalog.md · revanu docs/revrec-scenarios
Locks: ADR 0007
Updated: 2026-07-31
0. How to read (lenses)
Every row answers five questions about a Zuora-class capability. We clone product outcomes finance buys, not RevPro staging / RC-template machinery.
| Lens | Meaning |
|---|---|
| Our domain need | What RevRec Next must produce in the domain model (Contract, PO, schedules, billing, journals, reports) — or “none” if the Zuora surface is an architectural clone we refuse |
| Maturity | When the model must include it (code delivery may lag): Foundation (core path) · Complete (Chargebee ~90% / full product) · Enterprise-deep (public / multi-book / SOX scale) · Out (product or architecture choice — domain purity, not “defer forever by accident”) |
| CB source fit | How Chargebee Billing / catalog / events naturally supply the facts (strong / partial / weak / n/a) |
| Smoke quarry themes | Tags from revanu docs/revrec-scenarios that exercise related behavior (policy quarry, not sheet parity) |
| Design doc home | Where the outcome is specified (docs 03–17, ADRs, research) |
Maturity ↔ prior tier language: Foundation ≈ MVP · Complete ≈ Next · Enterprise-deep ≈ Later · Out ≈ deliberate exclusion.
Out framing: Out means we get the finance outcome via a cleaner domain path (e.g. Contract from subscription) or we decline the surface as not part of this product. It is not a vendor-tool preference note.
1. Zuora capability → gap matrix (exhaustive §§2.1–2.10)
One row per capability named in the research inventory. Do not treat section headers as capabilities.
1.1 ASC 606 five steps / core engine (§2.1)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Transaction ingestion & staging | Normalize Chargebee (and migration) facts into domain events; raw lake retains payload; no RevPro staging tables as SoR | Foundation | strong | file-sync, sales-orders, (untagged) ingest cases |
05, 03, ADR 0004 |
| Data collection / RC formation | Grouping job that builds RCs from staged lines via templates is not our path; Contract identity comes from subscription (or adapter open) | Out | n/a | — | ADR 0002, ADR 0007 · note: outcome via Contract from subscription; not cloning Zuora RC template engine |
| Step 1 — Identify the contract | open_contract creates Contract + source_ref; one contract per subscription (or explicit multi-sub policy later) |
Foundation | strong | contract-term, sales-orders |
14, 03, ADR 0003, ADR 0002 |
| Step 2 — Identify performance obligations | POs from subscription items / product rules; multi-PO + bundles as Complete | Foundation (1:1) / Complete (multi-PO, bundles) | strong | recognition-plan, (untagged) perf-obligation* |
14, 15 §2–3, 11 |
| Step 3 — Determine transaction price | TP from subscription/price (prefer) or policy-backed invoice amount read; VC as Complete/Enterprise-deep | Foundation (fixed TP) / Complete (credits/discounts) / Enterprise-deep (full VC engine) | partial | credit-note, mrr, (untagged) product-discount |
15 §4, 03, 11 |
| Step 4 — Allocate TP to POBs (SSP) | Relative SSP allocation across POs; MVP degenerate 100% single-PO | Foundation (degenerate) / Complete (relative) | partial | ssp |
15 §5, 14, ADR 0005 |
| Step 5 — Recognize revenue when POB satisfied | Period recognize + release schedules; earned vs deferred |
Foundation | strong | recognition-plan, deferred-revenue, journal-posting |
15 §6, ADR 0005, 08 |
| Touchless automation | Default apply path without manual intervention; exceptions surface for review | Foundation | strong | — | 13 §7, 10 F1–F3 |
| Configurable policies (engine-wide) | Named policies (mod, CN, recog, cancel) — thin Foundation set, rich Complete | Foundation | strong | modification, credit-note, pause-revenue |
11, 14 §7, ADR 0005 |
| Revenue Workbench | Finance review of contract/PO/schedule/holds — our UX from use cases, not RevPro Workbench clone | Complete (review UX) · Out (literal Workbench clone) | n/a | subledger-ac (ops surfaces) |
10, 13 · note: outcome = review/exception UX; not cloning Zuora Workbench |
| Earned & deferred revenue tracking | Schedule balances through release lifecycle; CL/CA projectors | Foundation | strong | deferred-revenue, billing-invoice |
15 §8, 14 |
1.2 Contract modifications & policies (§2.2)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Contract modification detection | Detect plan/qty/term/price/scope changes from subscription change events | Foundation | strong | modification, contract-term |
03, 15 §7 |
| Modification rule engine | Named mod policies (mod.upgrade, mod.downgrade, …) — not Zuora rule-matrix UI clone |
Foundation (thin) / Complete (rich) | strong | modification, contract-term |
11, ADR 0005 |
| Retrospective (cumulative catch-up) | Reallocate + catch-up prior open amounts when policy says retrospective | Complete | partial | modification, ppa |
15 §7, ADR 0005 |
| Prospective allocation | Closed amounts unchanged; remaining reallocated forward — MVP default | Foundation | strong | modification |
15 §7, ADR 0005, 04 S03 |
| Retro-prospective treatment | Same-period mix when new PO added under retrospective mod | Enterprise-deep | weak | modification |
15 §7, research §2.2 |
| Contractual prospective recast | Optional recast of remaining contractual ratable from mod date | Enterprise-deep | weak | modification |
research §2.2, 12 Later |
| Adjustment revenue release | Separate contractual vs adjustment release % on mods | Enterprise-deep | weak | deferred-revenue, modification |
research §2.2 |
| Contract impairment | Impairment accounting on cancel / unposted adjustment | Enterprise-deep | partial | termination |
15 §7, 12 Later |
| Workbench mod review & override | Operator switch prospective↔retrospective / retain allocation — via our review UX + policy override | Complete | n/a | modification |
10, 11 |
| Advanced contract modification framework | Enterprise rule sprawl beyond named policies | Enterprise-deep | weak | modification |
12 Later |
| Contract modification report (SOX) | Audit report: lines, policy triggered, allocation treatment | Complete (basic) / Enterprise-deep (SOX pack) | n/a | modification |
15 §9, 2.7 SOX |
| Ramp contracts — straight-line accounting | Ramp deal straight-line / average pricing as first-class amend or open | Complete | partial (ramps/IBM later) | — | 12, 03 ramps, 15 |
1.3 SSP & allocation (§2.3)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| SSP formula | Configurable SSP derivation (list, % of list, formula filters) | Complete | partial | ssp |
15 §5, 11 |
| SSP upload | External SSP estimates / ranges (low/mid/high) into SSP library | Complete | n/a (admin) | ssp |
15 §5, gaps ssp-admin |
| SSP Analyzer | Historical transaction bands / compliance optimizer | Enterprise-deep | weak | ssp |
research §2.3, 12 Later |
| AI-assisted SSP modeling | Marketing AI SSP — not a core subledger requirement | Out | n/a | — | 12 · note: product choice — analytics/AI packaging outside ASC core; outcome via SSP library + analyzer later if needed |
| Residual SSP (RSSP) | Residual method when no standalone evidence | Enterprise-deep | weak | (untagged) multiple-residual-items |
15 §5, research §2.3 |
| SSP hierarchy on RC template | Zuora ties SSP source to RC grouping template tabs | Out | n/a | — | ADR 0007 · note: outcome via Contract from subscription + SSP policy on PO/product; not cloning Zuora RC template engine |
| Perform revenue allocations based on SSP | Relative allocation of TP to POs | Foundation (1 PO) / Complete (multi) | partial | ssp |
15 §5, 14 |
| Ramp allocation | Group by ramp ref; volume/term average methods | Complete | partial | — | 12, research §2.3 |
| VC allocation (2-step / line SSP range) | Allocate VC when TP outside SSP range | Enterprise-deep | weak | — | 15 §4–5, research |
| Bundle explosion | Split parent catalog/bundle into child POs for allocation | Complete | partial (CB bundles) | (untagged) product-bundle |
14, 15 §3 |
| SSP exception reporting | Lines/POs where SSP cannot be derived | Complete | n/a | ssp |
15 §5, close checks |
1.4 Recognition methods (§2.4)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Over-time vs point-in-time (POB Satisfied display) | PO recognition pattern: over-time vs PIT | Foundation (over-time) / Complete (PIT) | strong | recognition-plan, service-delivery |
15 §6, 11, ADR 0005 |
| Ratable methods | Contract ratable, monthly/daily/mid-month, 30/360, user calendars | Foundation | strong | recognition-plan |
ADR 0005, 11, 08 |
| Point-in-time (immediate) | Immediate on open/start/event | Complete | partial | service-delivery |
15 §6, 11 |
| User-defined / milestone schedules | Percent/duration sequences on PO | Enterprise-deep | weak | service-delivery |
15 §6, research |
| Delivery / quantity events | record_delivery proportional / qty release |
Complete | partial | service-delivery |
14, 03, gaps delivery |
| Budgeted cost / budgeted hours events | % complete by cost/hours (PS proxy) | Enterprise-deep | weak | service-delivery |
research §2.4, 12 Later |
| POB dependencies | Release child when parent satisfied | Enterprise-deep | weak | — | 15 §6, research |
| Upon Expiry release | Auto-release after configured days from book/open | Complete | n/a | — | 11, 15 §6 |
| Consumption / usage POB templates | Usage/consumption recognition models | Complete (basic) / Enterprise-deep (PayGo, drawdown suite) | partial | (untagged) cb-metered |
15 VC/usage, 04 S07, 12 |
| Daily vs partial monthly accounting method | Schedule granularity / proration knobs | Foundation | strong | recognition-plan |
ADR 0005 |
1.5 Billing / booking / events-based recognition modes (§2.5)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Upon Booking (Full Booking Release) | Open from subscription = booking signal; optional full booking release policy | Foundation (open) / Complete (full booking release) | strong | sales-orders, contract-term |
03, ADR 0002 |
| Upon Billing (Billed Release) | Recognize billed % when invoice recorded — sibling to AR; not invent POs from invoice | Complete | strong | billing-invoice |
03, 15 §6, ADR 0002 |
| Upon Billing (Full Booking Release) | Recognize full booking when any bill collected | Complete | strong | billing-invoice |
15 §6, 11 |
| Events-based recognition | Custom revenue/cost/hold events beyond CB delivery | Complete (delivery) / Enterprise-deep (generic event upload) | partial | service-delivery |
03 record_delivery, research §2.5 |
| Manual release | Operator-forced release of PO revenue | Complete | n/a | pause-revenue (control sibling) |
11, 10 |
| Billing–Revenue Integration sync | Native Chargebee → extract → apply (our advantage) | Foundation | strong | billing-invoice, file-sync |
05, 03, ADR 0004 |
| Usage Sync (integrated) | Rated usage → recognition/accrual | Complete | partial | (untagged) cb-metered |
03, 12 Next |
| Standalone manual upload | File/adapter ingest for migration & non-CB | Complete | n/a | file-sync, sales-orders |
05, ADR 0007 migration adapter |
1.6 Close / continuous accounting / journals / reconciliation (§2.6)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Continuous accounting | Frequent recognize + reconcile through period; not only month-end batch |
Foundation (period) / Complete (near-continuous) | strong | period-close, journal-posting |
13 §7, 10 F3 |
| Close Process dashboard | Pre-close checks, exceptions, trial-balance-ish views | Foundation (thin) / Complete (dashboard) | n/a | period-close, subledger-ac |
10 F3, 13 |
| Period-close template & task orchestration | Period state machine: soft close, reopen, lock | Foundation | n/a | period-close |
ADR 0005, 08 |
| Netting process (CA/CL) | Contract asset/liability net presentation | Complete | n/a | deferred-revenue |
15 §8–9 |
| LT/ST reclassification process | Long-term vs short-term CA/CL split | Enterprise-deep | n/a | (untagged) short-and-long-term-def-revenue |
12 Later, research §2.6 |
| Accounting transfer to GL | post_journals summarized/detail export to GL |
Foundation | n/a | journal-posting, export |
14, 17, ADR 0006 |
| Manual journal entries (MJE) | Manual JE with approval — mostly AC/close ops | Enterprise-deep | n/a | journal-posting |
17, 12 Later |
| Sweep unposted schedules | Move unposted schedule lines to next period before close | Complete | n/a | period-close |
ADR 0005, close flows |
| Reporting summarization programs | Period snapshots for waterfall/history | Foundation | n/a | deferred-revenue, export |
15 §9, serve layer |
| Report reconciliation (automated in dashboard) | Tie Accounting Detail ↔ waterfall ↔ rollforward | Complete | n/a | subledger-ac, deferred-revenue |
13, 10 |
| Revenue holds & transfer holds | Block release and/or GL transfer until cleared | Complete | n/a | pause-revenue |
11, ADR 0005 (period lock Foundation) |
| RC / MJE approvals | Approval workflows before release/post | Enterprise-deep | n/a | — | 12 Later, SOX |
1.7 Audit / SOX / controls (§2.7)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Audit Trail report | Immutable applied_events + config change log; drill event → balance → raw | Foundation | strong | (untagged) doc-audit-delete-flow |
10 F5, 14, ADR 0004 |
| Audit trail scope | Cover policies, SSP, books, roles, period ops | Complete | n/a | — | 13, 11 |
| SOX report pack | Approvals, mods, access, SSP/VC changes, holds, orphans | Enterprise-deep | n/a | modification, period-close |
12 Later, research §2.7 |
| Granular authorization / role-based access | RBAC on functions/reports | Complete | n/a | — | platform / 00 |
| Segregation of duties (marketing) | Finance subledger vs GL governance | Complete | n/a | — | ADR 0006, 17 |
| Stage validation framework | Ingest/normalize validation exceptions (not RevPro stage tables) | Foundation | strong | (untagged) doc-staging-validation, load-errors |
05, 03 |
| Soft freeze on period close | Freeze writes that would corrupt close sequence | Foundation | n/a | period-close |
ADR 0005 |
1.8 Reporting / waterfalls / disclosures / RPO / trial balance (§2.8)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Waterfall Report | Prior/current/future recognized + deferred schedules | Foundation | n/a | deferred-revenue |
15 §9, 10 F6, 00 A5 |
| Historical Waterfall (13 periods) | Multi-period actual activity from chosen period | Complete | n/a | deferred-revenue |
15 §9 |
| Billing Waterfall / Billing RollForward | Invoice-level CL / billed revenue rollforward | Complete | strong | billing-invoice |
15 §9, smoke billingrollforward* |
| RC Rollforward | CA/CL beginning/activity/ending | Complete | n/a | deferred-revenue, subledger-ac |
15 §8–9 |
| Trial Balance Report | Account balances; recon to rollforward/waterfall | Complete | n/a | subledger-ac, journal-posting |
17, 13 |
| Revenue Insight / Revenue Summary | PTD/QTD/YTD activity | Complete | n/a | (untagged) dashboard-revenue-api |
00 A6, 10 |
| ASC 606 disclosure — Prior/Current CL/CA | Disclosure categories from prior/current CL/CA | Complete | n/a | deferred-revenue |
15 §9, UC12 |
| Disclosure — Prior/Current satisfied POBs | Catch-up-aware prior vs current satisfaction | Complete | n/a | ppa, modification |
15 §9 |
| Unsatisfied POB Balances (RPO proxy) | Remaining unsatisfied/partial PO balances | Complete | n/a | deferred-revenue |
15 §9, 00 A5 |
| Unreleased POB(s) Report | POs not fully released | Complete | n/a | pause-revenue, service-delivery |
15 §9 |
| Track unbilled receivables | Unbilled AR / contract asset rollforward | Foundation | partial | deferred-revenue, (untagged) unbilled* |
ADR 0005, 15 §8 |
| VC Insight / VC Rollforward | VC activity and balances | Enterprise-deep | weak | — | 15 §4, research |
| Cost Insight / Cost Rollforward | Capitalized cost reporting | Enterprise-deep | weak | expense-commission |
12, 17 boundary |
| Consumption Usage Waterfall | Usage revenue by period | Enterprise-deep | partial | (untagged) cb-metered |
12 Later |
| Forecast Revenue | Forecast templates / waterfall forecast | Enterprise-deep | weak | — | 12 Later |
| Period FX Waterfall / Unbilled FX / Trial Balance FX | Multi-currency FX reporting | Complete (FX in AC/RevRec) / Enterprise-deep (full FX waterfall suite) | partial | multi-currency |
00 A8, 17 |
| Disclosure Aggregation config | Second-level summarization fields | Enterprise-deep | n/a | — | 15 §9 |
| 60+ pre-built reports (marketing) | Report catalog breadth as product claim | Complete (core set) / Enterprise-deep (full catalog) | n/a | export, subledger-ac |
10, 00 · note: outcome = finance-usable report set; not cloning Zuora report count |
1.9 Integrations (billing, ERP, CPQ) (§2.9)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Zuora Billing ↔ Revenue Integration | Chargebee Billing ↔ RevRec native adapter (equivalent outcome) | Foundation | strong | billing-invoice, contract-term |
05, 03, ADR 0007 |
| Zuora CPQ / quote-to-cash | Quote impact / CPQ upstream | Enterprise-deep | weak | — | 12 Later · note: CB CPQ/quotes not day-one contract path |
| NetSuite Revenue Inbound Connector | ERP orders/invoices inbound (optional adapter) | Enterprise-deep | n/a | — | ADR 0007 SourceAdapter |
| NetSuite GL Connector | JE → NetSuite | Complete | n/a | journal-posting, export |
17, existing connector reuse |
| Workday Accounting Center Connector | JE / billing → Workday | Complete | n/a | export |
17 |
| Workday Financials GL Connector | Revenue JE transfer | Complete | n/a | export |
17 |
| Microsoft Dynamics 365 Connector | Listed enterprise GL path | Enterprise-deep | n/a | export |
17 |
| Open APIs / SDK | Apply API + read APIs for contracts/schedules/journals | Foundation | n/a | (untagged) public-api / admin-apis |
14, 13, 08 |
| Standalone file upload | Migration / edge file SourceAdapter | Complete | n/a | file-sync |
05, ADR 0007 |
| Salesforce / SAP (marketing FAQ) | CRM/ERP inbound examples | Enterprise-deep | weak | — | ADR 0007 adapters |
1.10 Advanced (§2.10)
| Zuora capability | Our domain need | Maturity | CB source fit | Smoke quarry themes | Design doc home |
|---|---|---|---|---|---|
| Multi-book revenue accounting | Primary/secondary books (GAAP vs IFRS vs local) | Enterprise-deep | n/a | — | 12 Later, research §2.10 |
| Revenue Book Comparison Report | Compare two books | Enterprise-deep | n/a | — | 12 Later |
| Advanced Variable Consideration Analyzer | VC constraint / analyzer beyond basic TP adjustments | Enterprise-deep | weak | — | 15 §4, research |
| Advanced SSP Analyzer | Historical SSP optimizer (see §2.3 Analyzer) | Enterprise-deep | weak | ssp |
research §2.3/2.10 |
| Cost processing (COGS, commissions, rebates, accruals) | Capitalize/amortize incremental costs — often sibling pack, not RevRec recognition core | Enterprise-deep | partial | expense-commission |
12, 17 · note: domain purity — cost amortization may ship as separate capability pack |
| Consumption revenue suite | Usage models, unbilled usage accrual, prepaid drawdown | Complete (basic) / Enterprise-deep (full suite) | partial | (untagged) cb-metered |
12, 15 |
| Financing / significant financing component | Financing accrual / payment exception | Enterprise-deep | weak | — | 12 Later · rare for pure SaaS |
| Mass actions | Batch hold/release, re-allocate, close/open contracts | Complete | n/a | — | 13 ops, 11 |
| Simulations / quote impact (marketing) | Pre-ledger GTM simulations | Out | n/a | — | 12 · note: product choice — GTM simulation is not ASC subledger core |
| AI-assisted validations / SSP (marketing) | AI validation packaging | Out | n/a | — | 12 · note: product choice — deterministic validation + audit first |
| Dedicated shard / migration sandbox / managed services | Deployment packaging | Out | n/a | — | 12 · note: ops/entitlement packaging, not domain model |
2. Smoke theme coverage
Source: revanu docs/revrec-scenarios/README.md (generated 2026-07-30; 317 case specs). Tags are a policy/use-case quarry for engine replacement and accounting-equality tests — not Hotglue sheet parity.
| Smoke theme | Case count | Domain capability / policy | Maturity pressure | Design / quarry notes |
|---|---|---|---|---|
(untagged) |
102 | Mixed ingest, admin, conversion, backlog, tax, writeoff, CB connect, PO formation | Foundation–Complete | Triage into tagged policies over time; many are harness/ops |
subledger-ac |
72 | Accounting Central sibling: journals, AR balances, recon, FX, tax mapping, aging | Foundation (AC) / Complete | 17, ADR 0006 — amounts from RevRec |
billing-invoice |
25 | record_billing; billing schedules; invoice-as-signal not contract |
Foundation | 03, ADR 0002 |
deferred-revenue |
22 | Earned/deferred schedules; adjustments; unearned-by-*; rollforward | Foundation | 15 §8, waterfall |
journal-posting |
16 | post_journals; mapping; rounding; posting jobs; unbilled postings |
Foundation | 14, 17 |
service-delivery |
15 | record_delivery; PSD; proportional / date / discard |
Complete | 03 later, gaps delivery-* |
contract-term |
12 | Service window on open/amend; term sync; CN allocation interaction | Foundation | 03, 14 |
multi-currency |
12 | FX rates, home currency, FX gain/loss, MC PPA | Complete | 00 A8, AC FX |
modification |
11 | amend_contract; prospective (MVP); catch-up Complete |
Foundation / Complete | ADR 0005, 15 §7 |
credit-note |
10 | record_credit + named CN policy |
Foundation | 03, 11 cn.* |
expense-commission |
10 | Cost/commission amortization (sibling / Enterprise-deep pack) | Enterprise-deep | 12 boundary |
recognition-plan |
9 | Ratable methods, plan types, 30/360, long plans | Foundation | ADR 0005, 11 |
ppa |
7 | Prior-period adjustment / reopen / catch-up journaling | Foundation | ADR 0005 |
sales-orders |
7 | Legacy SO projection / migration adapter emitting same events | Complete (compat) | ADR 0007 migration |
ssp |
7 | SSP library, list SSP, analyzer, versioning | Complete / Enterprise-deep (analyzer) | 15 §5 |
export |
6 | Continuous/journal/data export | Foundation | 05 egress, 17 |
voided-invoice |
6 | Void policy on billing identity | Complete | 11 billing void policy |
file-sync |
3 | File/zip ingest adapter | Complete | 05, migration |
period-close |
3 | Period close / freeze / transaction-date vs closed period | Foundation | ADR 0005 |
mrr |
2 | MRR metrics / disabled MRR paths | Complete (metrics) | 00 A6 |
reprocess-sales-order |
2 | Replay/reprocess apply idempotency | Foundation | 03 §6, 13 |
termination |
2 | terminate + cancel policy |
Foundation | 03, 11 term.cancel |
clone |
1 | Tenant/config clone (ops) | Complete (ops) | platform |
hotglue |
1 | Legacy sync failure path — migration quarry only | Out as product bar | ADR 0001 · note: behavior may inform migration adapter; CSV byte-parity is Out |
pause-revenue |
1 | Hold/pause recognition | Complete | gaps pause-revenue, 11 |
2.1 Priority quarry fixtures (accounting-equality first)
| Priority | Smoke case / theme | Why |
|---|---|---|
| 1 | simple-mod |
Multi-period amend + reopen + allocation integrity |
| 2 | plan-types |
Ratable proration shapes |
| 3 | contract-term-modification |
Mod treatment classification |
| 4 | deferred-revenue-adj |
Deferred/unbilled + rollforward export |
| 5 | prospective-modification |
Prospective waves + SSP reload + terminate |
| 6 | Expand by tag | modification, credit-note, ssp, service-delivery, ppa, multi-currency |
Gap specs (proposed): revanu docs/revrec-scenarios/gaps/ — prospective helper, allocation strategy, delivery-date, pause, close, SSP admin, etc.
2.2 Theme → apply op map (quick)
| Theme cluster | Primary apply ops |
|---|---|
contract-term, sales-orders, recognition-plan |
open_contract, recognize |
modification, termination |
amend_contract, terminate |
billing-invoice, voided-invoice, credit-note |
record_billing, record_credit |
service-delivery, pause-revenue |
record_delivery, hold policies, recognize |
deferred-revenue, ppa, period-close |
recognize, period lock/reopen |
journal-posting, export, subledger-ac |
post_journals (+ AC projectors) |
ssp, expense-commission, multi-currency |
allocate / cost pack / FX projectors |
3. Chargebee stream → domain event → apply op
From 03-event-catalog.md. Rule: source facts become domain events; invoices do not invent contracts.
3.1 Domain operations (apply API)
| Operation | Intent | Maturity | ASC / policy home |
|---|---|---|---|
open_contract |
Steps 1–4 | Foundation | 14, 15, ADR 0003 |
amend_contract |
Modification (prospective Foundation; catch-up Complete) | Foundation / Complete | 15 §7, ADR 0005 |
record_billing |
Invoice → AR + deferred timing | Foundation | ADR 0002, 03 |
record_payment |
Cash application | Foundation | 03, 17 AR |
record_credit |
CN with named policy | Foundation (one default) / Complete (policy table) | 11 cn.* |
record_delivery |
Proportional / PIT / qty | Complete | 14, 03 |
recognize |
Period Step 5 | Foundation | ADR 0005 |
post_journals |
GL summary | Foundation | 14, 17, ADR 0006 |
terminate |
Cancel remaining | Foundation (policy TBD) | 11 term.cancel |
3.2 Streams → emit → op
| Chargebee stream / fact | Domain emit | Apply op(s) | Maturity | Notes |
|---|---|---|---|---|
customers |
upsert Customer | (identity only) | Foundation | No ASC step alone |
subscriptions created |
Contract opened | open_contract |
Foundation | POs from items + term |
subscriptions changed |
Contract amended | amend_contract |
Foundation | Plan/qty/term; prospective default |
subscriptions cancelled |
Contract terminated | terminate |
Foundation | Policy on remaining schedule |
contract_term (nested/related) |
Feeds open/amend dates | open_contract / amend_contract |
Foundation | Service window for ratable PO |
items / item_prices / plans / addons |
Product + list/sale hints | catalog upsert → SSP later | Foundation / Complete | PO product_ref |
invoices |
Billing recorded | record_billing |
Foundation | Never open_contract |
credit_notes |
Credit recorded | record_credit |
Foundation | reason_code → policy id |
transactions |
Payment recorded | record_payment |
Foundation | Link to invoice |
unbilled_charges |
Optional billing / CA signal | record_billing (partial) or CA projector |
Complete | |
events |
Realtime trigger for extract | (orchestration) | Complete | Poll OK without stream |
coupons / discounts on invoice |
TP / billing line attributes | attributes on open/bill | Complete | MVP: amounts on lines may suffice |
| ramps / IBM | Structured amend | amend_contract |
Complete | First-class if API exposes; don’t infer via asof |
orders (CB shipping orders) |
Usually ignore for SaaS RevRec | — | Out | Not ASC PO by default |
| Usage / metered (usage events or invoice usage lines) | Usage satisfaction | record_delivery / usage recognize |
Complete | Smoke: cb-metered |
| File / migration adapter | Same domain emits | same ops | Complete | ADR 0007 |
3.3 Field-level MVP anchors
| Apply op | Key domain fields | Typical CB source |
|---|---|---|
open_contract |
source_ref, customer, currency, service_start/end, product_ref, TP, method |
subscription.id, customer_id, contract_term / current_term_*, item_price/plan, item amounts |
record_billing |
source_ref, date, totals/lines, contract_link, customer_id |
invoice.id, date, line_items, subscription_id |
record_payment |
source_ref, invoice_id, amount |
transaction.id, linked invoice, amount |
record_credit |
source_ref, reason→policy, amounts, invoice_link |
credit_note.id, reason_code, lines |
3.4 Named policies (CB-facing)
| Policy ID | Applies | Maturity default |
|---|---|---|
mod.upgrade |
Mid-term up | Foundation → prospective |
mod.downgrade |
Mid-term down | Foundation → prospective |
cn.refund_unrecog |
Most CNs | Foundation → reduce unrecognized/deferred |
cn.reverse_recog |
Return-like | Complete |
cn.ar_only |
Billing credit only | Complete |
term.cancel |
Cancellation | Foundation (ADR TBD) |
recog.method |
PO method | Foundation → ratable |
recog.billing_release |
Upon billing variants | Complete |
hold.release |
Pause / revenue hold | Complete |
4. Exhaustiveness review
4.1 Covered well (Foundation model + strong CB fit + smoke quarry)
| Area | Evidence |
|---|---|
| Contract from subscription (Step 1 outcome) | ADR 0002/0003; §1.1 Step 1; themes contract-term, sales-orders |
| Ratable Step 5 + earned/deferred | ADR 0005; themes recognition-plan, deferred-revenue |
| Prospective amend + terminate + default CN | §1.2 / §3; themes modification, termination, credit-note |
| Billing/payment as billing ops (not PO factory) | §1.5 / §3; themes billing-invoice |
| Period close + journals export | §1.6; themes period-close, journal-posting, export |
| Audit drill event → balance → raw | §1.7; applied_events design |
| Waterfall / unbilled basics | §1.8; deferred-revenue, unbilled* cases |
| Native CB extract path | §1.9 / §3; 05 + 03 |
| AC sibling journaling | §2 subledger-ac; ADR 0006 / 17 |
4.2 Still thin (model may name it; policy/tests/docs incomplete)
| Area | Gap | Next pressure |
|---|---|---|
| Multi-PO + relative SSP | Degenerate Foundation only; smoke ssp thin vs Zuora |
Complete — CB markets multi-PO |
| Retrospective / catch-up mods | Spec’d Complete; few golden fixtures | Complete — expand modification + ppa |
| Delivery / PSD | record_delivery later in 03; smoke strong |
Complete |
| Usage / consumption | Basic Next; PayGo/drawdown Enterprise-deep | Complete for CB usage merchants |
| Billing-as-recognition trigger | AR path Foundation; billed-release policies thin | Complete |
| CA/CL netting + RPO disclosures | Aims exist; report suite incomplete | Complete |
| Trial balance + automated recon matrix | AC-heavy; RevRec waterfall tie-out thin | Complete |
| Holds / mass actions / review UX | Period lock only Foundation | Complete |
| FX waterfalls | Smoke strong on AC FX; RevRec FX disclosure thin | Complete |
| Ramp first-class | Catalogued; no smoke tag | Complete |
| VC engine | TP discounts partial; analyzer/insight Enterprise-deep | Complete (basic) / Enterprise-deep (full) |
| CN policy table richness | One default Foundation | Complete |
term.cancel ADR |
TBD | Foundation lock needed |
| Untagged smoke (102) | Behavior not mapped to named policies | Quarry hygiene |
4.3 Out on purpose (domain purity / product boundary)
| Item | Why Out |
|---|---|
| Data collection / RC formation via RC grouping templates | Outcome via Contract from subscription; not cloning Zuora RC template engine |
| SSP hierarchy on RC template | SSP policy lives on product/PO/Contract — not RC template tabs |
| Literal Revenue Workbench / advanced mod Workbench UX | Design our review UX from 10 |
| AI-assisted SSP / AI validations (marketing) | Deterministic SSP library + audit first; AI packaging is not ASC core |
| Simulations / quote impact (marketing) | GTM simulation is not the subledger product |
| Dedicated shard / managed services entitlements | Ops packaging, not domain |
CB shipping orders as ASC POs by default |
Not performance obligations for SaaS RevRec |
| Hotglue CSV / OrderDetails byte-parity as correctness bar | Accidental complexity (ADR 0001); if migrating, adapters emit domain events — correctness remains accounting equality |
| Invoice/time-series reconstruction of POs | Rejected (ADR 0002) |
| Warehouse as mutable system of record | ADR 0004 |
| AC computing recognition amounts | ADR 0006 / AC PRD — RevRec owns recognition math |
| Catalyst / full ERP-as-RevRec | Parallel product surface |
4.4 Enterprise-deep (in north star; not Foundation)
Multi-book + book comparison · LT/ST reclass · full SOX pack + 7-year retention packaging · MJE approvals · RSSP / SSP Analyzer · advanced VC analyzer · budgeted hours / POB dependencies · financing component · full consumption suite · cost capitalization pack (may be separate product surface) · Dynamics/NetSuite inbound · CPQ quote-to-cash · disclosure aggregation knobs · forecast revenue · VC/cost/consumption waterfalls.
4.5 Count check (inventory completeness)
| Research section | Capability rows in §1 |
|---|---|
| 2.1 Core engine | 11 |
| 2.2 Contract modifications | 12 |
| 2.3 SSP & allocation | 11 |
| 2.4 Recognition methods | 10 |
| 2.5 Billing/booking/events modes | 8 |
| 2.6 Close / journals / recon | 12 |
| 2.7 Audit / SOX | 7 |
| 2.8 Reporting / disclosures | 18 |
| 2.9 Integrations | 10 |
| 2.10 Advanced | 11 |
| Total | 110 |
Smoke themes in §2: 25 tags (including (untagged)). Apply ops in §3: 9. CB streams mapped in §3.2: 16 rows.
4.6 Have / need by lens
| Lens | Have in design (docs 13–17 + ADRs) | Still need |
|---|---|---|
| Zuora-class outcomes | Full capability model in this matrix + 12/15 | Delivery phased; Enterprise-deep report/SOX/multi-book |
| Chargebee ~90% | Native stream→op map; Foundation SaaS path | Usage, multi-PO SSP, richer mods/CN, delivery |
| Legacy migration | SourceAdapter + same domain events | Compat projections; shadow accounting-equality; SO themes |
| Smoke quarry | 317 specs + theme map | Policy IDs on every tagged case; golden amounts in engine tests |
5. Related docs
| Doc | Role |
|---|---|
| research/zuora-revenue-capability-map.md | Sourced Zuora inventory (§§2.1–2.10) |
| 12-zuora-north-star-scope.md | Tier proposals MVP/Next/Later/Out |
| 03-event-catalog.md | CB → domain events |
| 14-domain-model.md | Contract / PO / apply seam |
| 15-asc606-engineering-spec.md | Steps, SSP, mods, release |
| 17-revrec-ac-boundary.md | RevRec vs AC |
| decisions/0007-enterprise-zuora-class-scope.md | Scope lock |
revanu docs/revrec-scenarios/ |
Smoke quarry |
Changelog
| Date | Change |
|---|---|
| 2026-07-31 | Exhaustive rewrite: 110 Zuora rows §§2.1–2.10, smoke theme coverage, CB stream→op, exhaustiveness review |
| 2026-07-30 | Initial living matrix (aggregated capability groups) |