22 — Capability master (STAR)
Tone: raw internal brainstorm / ramp-up notes for a public-ish brainstorm site. Generated: 2026-07-31T08:20:13.017635+00:00 Companion JSON:
22-capability-master.json
1. Intro + legend
This is the STAR inventory: every Zuora Revenue capability in research map §§2.1–2.10 (110 rows), plus ASC-only constraints with weak/no Zuora twin (8 rows). Merged from:
docs/research/zuora-revenue-capability-map.mddocs/20-asc606-scenario-catalog.json(A606 ids)docs/16-capability-gap-matrix.md(prior maturity / CB fit / smoke themes)- revanu
docs/revrec-scenarios/index.json+gaps/*.md
What the lenses mean (read this or misread the whole sheet)
| Lens | Meaning |
|---|---|
| revrec_today | Proves something exists in the CURRENT product test corpus (smoke / AC sibling). Not “we should clone Hotglue.” Not automatic “easy to build.” Values: in_product · partial · evidence_only · not_in_product · n_a. |
| evidence | Concrete pointers: smoke_case paths like packages/revlock-test-driver/src/__tests__/cases/<id>/, smoke_tag, cypress_gap, engine_s, or none. |
| next_build | Whether Next domain/architecture can host it: ready · needs_design · out. Orthogonal to revrec_today — something can be in_product today and still needs_design for Next, or not_in_product but ready to build. |
| cb_facts | Where facts come from: from_billing · from_catalog · derived_in_revrec · ac_only · not_applicable. |
| cb_facts = not_applicable | Capability is not sourced from Chargebee streams. Examples: trial balance report, close dashboard, SOX pack, RBAC, mass actions, deployment packaging. Still a real product outcome — just not an ingest mapping. |
| cb_facts = ac_only | Lands primarily in Accounting Central / GL transfer sibling (amounts still owned by RevRec where ADR boundary says so). |
| maturity | When the model must include it: Foundation · Complete · Enterprise-deep · Out. Out = deliberate exclusion / domain purity, not “forgot.” |
| a606_ids | Mapped ids from 20-asc606-scenario-catalog.json when we have a mapping; empty means no confident map yet. |
Billing Waterfall / Billing RollForward (don’t confuse with recognition waterfall)
CAP-074 is invoice-level CL / billed revenue rollforward — beginning billed/unearned, billings, recognition, ending. Zuora recon doc: Billing Waterfall report. Current evidence:
packages/revlock-test-driver/src/__tests__/cases/billingrollforward-scenarios/packages/revlock-test-driver/src/__tests__/cases/billingrollforward-scenarios-by-so/
Recognition waterfall is CAP-072 (different animal).
Counts (this file)
- Total CAP rows: 118 (Zuora map 110 + ASC-only 8)
- by revrec_today:
evidence_only=15,in_product=15,n_a=6,not_in_product=42,partial=40 - by next_build:
needs_design=70,out=7,ready=41 - by maturity:
Complete=48,Enterprise-deep=33,Foundation=30,Out=7 - by cb_facts:
ac_only=7,derived_in_revrec=38,from_billing=30,from_catalog=7,not_applicable=36
2. Master tables by category (Zuora §§2.1–2.10 + ASC-only)
One row per capability. Do not skip. Tables are wide — use JSON for machine joins.
2.1 ASC 606 five steps / core engine
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-001 |
Transaction ingestion & staging | Pull contracts/orders/invoices/costs into a validated intake path before ASC steps. For us: Chargebee extract → normalize → domain events; raw lake keeps payload. Not RevPro stagin… | Subscription created webhook → open_contract event with source_ref=sub_xxx. | Transaction ingestion & staging | in_product |
ready |
from_billing |
Foundation |
A606-C-five_steps, A606-P01 |
tag:file-sync; case:splitfiles-by-version-zip; case:zip; case:zip-multifiles; +4 |
Direction alignment: normalize CB facts; refuse RevPro staging clone. Smoke file-sync + sales-orders prove current inges |
CAP-002 |
Data collection / RC formation | Zuora batch that groups staged lines into revenue contracts via RC grouping templates. We do not clone this — Contract identity comes from subscription (or adapter). | TBD — outcome is open_contract from subscription, not RC template job. | Data collection / RC formation | n_a |
out |
not_applicable |
Out |
A606-C-contract_existence_25_1 |
none:Out as architecture; no smoke for RC template engine | Outcome via Contract from subscription. Matrix marks Out. Do not build Zuora collect/RC-template machinery. |
CAP-003 |
Step 1 — Identify the contract | ASC Step 1: establish the revenue contract (parties, rights, payment terms, commercial substance, collectibility). Product: open_contract creates Contract + source_ref; typically o… | Annual SaaS sub → one Contract bound to subscription.id. | Step 1 — Identify the contract | in_product |
ready |
from_billing |
Foundation |
A606-C-contract_existence_25_1, A606-C-five_steps, A606-P01, A606-E-1 |
tag:contract-term; case:contract-term-cn-allocation; case:contract-term-disable-cn-allocation; case:contract-term-item-billing-metric; +3 |
Collectibility / free-trial edge cases still thin (A606-C-contract_existence marked new). Core open path is real. |
CAP-004 |
Step 2 — Identify performance obligations | Identify distinct goods/services (POs) in the contract. Foundation: 1:1 line→PO from subscription items. Complete: multi-PO, bundles, distinctness judgments. | Plan + implementation addon → two POs if distinct; else series/bundle. | Step 2 — Identify performance obligation | partial |
ready |
from_catalog |
Foundation |
A606-C-distinct_25_19_21, A606-C-series_25_14, A606-P06, A606-E-10… |
case:perf-obligations-contract-term; tag:recognition-plan; case:eight-year-plan-test; case:fixed-30x360-plan |
1:1 Foundation is ready. Multi-PO distinctness + bundles still partial in smoke. Maturity Complete for multi-PO. |
CAP-005 |
Step 3 — Determine transaction price | Fixed + variable consideration into TP. Foundation: subscription/price amounts. Complete: credits/discounts. Enterprise-deep: full VC estimate + constraint engine. | $1,200 annual prepaid → TP 1200; usage estimate later adjusts TP. | Step 3 — Determine transaction price | partial |
ready |
from_billing |
Foundation |
A606-C-variable_consideration_32_5, A606-C-vc_constraint_32_11, A606-C-tp_changes_32_42, A606-P04… |
tag:credit-note; case:contract-term-cn-allocation; case:contract-term-disable-cn-allocation; case:credit-note-by-backlog; +3 |
Fixed TP in product. VC constraint/true-up is a known domain gap. Credits touch TP changes. |
CAP-006 |
Step 4 — Allocate TP to POBs (SSP) | Relative SSP allocation of TP across POs. MVP degenerate: 100% to single PO. Complete: multi-PO relative SSP. | License SSP 800 + support SSP 200; TP 900 → allocated 720/180. | Step 4 — Allocate TP to POBs (SSP) | partial |
ready |
derived_in_revrec |
Foundation |
A606-C-allocation_ssp_32_28, A606-C-discount_allocation_32_36, A606-P06, A606-E-33 |
tag:ssp; case:auto-create-ssp; case:autocreatessp-expense-scenarios; case:listPriceSSP; +2 |
SSP library + listPriceSSP exist; multi-PO relative allocation still thin. Cypress reallocation gap. |
CAP-007 |
Step 5 — Recognize revenue when POB satisfied | Release/recognize when PO satisfied (over time or PIT). Period recognize + schedules; earned vs deferred. | Monthly ratable: recognize 100 of 1200 each month. | Step 5 — Recognize revenue when POB sati | in_product |
ready |
derived_in_revrec |
Foundation |
A606-C-over_time_25_27, A606-C-measure_progress, A606-P01, A606-P09… |
tag:recognition-plan; case:eight-year-plan-test; case:fixed-30x360-plan; case:fixed-30x360-plan-enddate-inclusive; +5 |
Core ratable path is the strongest smoke quarry we have. |
CAP-008 |
Touchless automation | Default path applies rules without manual intervention unless exception/hold. Finance only touches exceptions. | Nightly extract→apply→recognize with zero human clicks for clean SaaS renewals. | Touchless automation | partial |
ready |
derived_in_revrec |
Foundation |
A606-C-five_steps |
none:No dedicated smoke tag; implied by end-to-end suite cases | Product intent is clear; evidence is “suite runs” not a named touchless test. |
CAP-009 |
Configurable policies (engine-wide) | Named policies for mods, CNs, recognition, cancel, holds — thin Foundation set, richer Complete. Not Zuora’s full policy sprawl UI. | mod.upgrade → prospective; cn.refund_unrecog → cut deferred first. | Configurable policies (engine-wide) | partial |
ready |
derived_in_revrec |
Foundation |
A606-P03, A606-P04, A606-C-mod_termination_25_13 |
tag:modification; case:contract-term-modification; case:contract-term-modification-2; case:deferred-revenue-adj-prospective-mod; +5 |
Named policies exist in design; smoke exercises some. Policy ID coverage on every tagged case still messy. |
CAP-010 |
Revenue Workbench | Zuora RC/POB/line UI for review, holds, approvals, mod history. We want review/exception UX from our use cases — not a RevPro Workbench clone. | TBD — exception queue for failed apply / holds / SSP missing. | Revenue Workbench | evidence_only |
needs_design |
not_applicable |
Complete |
— | tag:subledger-ac; case:ac-custom-payment-method-display |
Outcome = review UX (Complete). Literal Workbench clone = Out. next_build needs_design for our UX. |
CAP-011 |
Earned & deferred revenue tracking | Schedules maintain earned vs deferred (CL) and contract asset balances through the release lifecycle. | Bill 1200 Jan 1 → deferred 1200; recognize 100/mo → deferred declines. | Earned & deferred revenue tracking | in_product |
ready |
derived_in_revrec |
Foundation |
A606-C-contract_balances_45, A606-E-38, A606-E-39, A606-P01… |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item; +3 |
Strongest balance evidence in deferred-revenue + billing-invoice tags. |
2.2 Contract modifications & policies
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-012 |
Contract modification detection | Detect price/scope/term/qty/PO changes after initial timeline from subscription change events. | Mid-term plan upgrade → amend_contract with new TP/term. | Contract modification detection | in_product |
ready |
from_billing |
Foundation |
A606-C-mod_separate_25_12, A606-C-mod_termination_25_13, A606-P03, A606-E-5… |
tag:modification; case:contract-term-modification; case:contract-term-modification-2; case:deferred-revenue-adj-prospective-mod; +3 |
CB subscription changed is the natural detector. Smoke modification tag is solid. |
CAP-013 |
Modification rule engine | Named mod policies (upgrade/downgrade/…) — not Zuora’s full rule-matrix UI. Classifies separate vs prospective vs catch-up. | mod.upgrade → prospective realloc of remaining. | Modification rule engine | partial |
ready |
derived_in_revrec |
Foundation |
A606-C-mod_separate_25_12, A606-C-mod_termination_25_13, A606-E-5, A606-E-6… |
tag:modification; case:contract-term-modification; case:contract-term-modification-2; case:deferred-revenue-adj-prospective-mod; +1 |
Thin Foundation policies ready; rich matrix is Complete. Prospective helper gap noted. |
CAP-014 |
Retrospective (cumulative catch-up) | Recalculate allocatable/allocated amounts; adjust prior open periods via cumulative catch-up when goods not distinct (25-13(b)). | Price change on non-distinct series → catch-up revenue in current period. | Retrospective (cumulative catch-up) | partial |
needs_design |
derived_in_revrec |
Complete |
A606-C-mod_termination_25_13, A606-E-8, A606-P10 |
tag:modification; case:contract-term-modification; case:contract-term-modification-2; tag:ppa; +4 |
Spec’d Complete; golden catch-up fixtures thin. E-8 still new in ASC catalog. |
CAP-015 |
Prospective allocation | Closed-period amounts unchanged; remaining obligations reallocated going forward. MVP default for SaaS upgrades. | Upgrade month 4 of 12 → months 1–3 stay; remaining TP reallocated over months 4– | Prospective allocation | in_product |
ready |
derived_in_revrec |
Foundation |
A606-C-mod_termination_25_13, A606-P03, A606-E-7 |
case:prospective-modification; case:simple-mod; tag:modification; case:contract-term-modification |
Priority quarry fixtures. This is the SaaS default path. |
CAP-016 |
Retro-prospective treatment | Same period applies both retrospective and prospective when a new PO is added during a retrospective mod. | TBD | Retro-prospective treatment | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-mod_termination_25_13 |
none:No dedicated smoke | Rare SaaS path. Enterprise-deep. Don’t pretend we have it. |
CAP-017 |
Contractual prospective recast | Optional recast of remaining ratable contractual revenue from modification date (Zuora ENABLE_CONTRACTUAL_PROSPECTIVE). | TBD | Contractual prospective recast | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
— | none | Zuora knob. We may never need the exact flag; outcome can fold into named mod policies. |
CAP-018 |
Adjustment revenue release | Separate contractual vs adjustment revenue release percentages on modifications. | TBD | Adjustment revenue release | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-tp_changes_32_42 |
tag:deferred-revenue; case:adj-unearned-by-order; none:adjustment release % not first-class |
Deferred adj cases exist; contractual-vs-adjustment release split is not modeled as Zuora does. |
CAP-019 |
Contract impairment | Impairment accounting when cancellation triggers prospective treatment / unposted adjustment revenue. | Cancel mid-term with unreleased allocation → impairment / write-down path. | Contract impairment | partial |
needs_design |
from_billing |
Enterprise-deep |
A606-P05 |
tag:termination; case:cancel-jobs; case:termination; case:termination-regress; +1 |
Terminate smoke exists; true impairment accounting is Later/Enterprise-deep. |
CAP-020 |
Workbench mod review & override | Operator views mod history; switches prospective↔retrospective; retains allocation — via our review UX + policy override, not Workbench clone. | TBD | Workbench mod review & override | not_in_product |
needs_design |
not_applicable |
Complete |
A606-C-mod_termination_25_13 |
tag:modification; case:contract-term-modification; none:no override UX smoke |
Depends on CAP-010 review UX. |
CAP-021 |
Advanced contract modification framework | Zuora “advanced” use case beyond standard rules — enterprise rule sprawl. | TBD | Advanced contract modification framework | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
— | none | Named policies should absorb 90% of CB SaaS. Don’t build a second rule engine. |
CAP-022 |
Contract modification report (SOX) | Audit report: lines, rules/policies triggered, allocation treatment. | Export of all amends in period with treatment = prospective|catch-up|separate. | Contract modification report (SOX) | not_in_product |
needs_design |
not_applicable |
Complete |
A606-C-mod_termination_25_13 |
tag:modification; case:contract-term-modification; none:no SOX mod report smoke |
Basic audit report Complete; full SOX pack Enterprise-deep. |
CAP-023 |
Ramp contracts — straight-line accounting | Ramp deal straight-line / average pricing treatment as first-class amend or open. | Y1 100/mo, Y2 150/mo → straight-line avg over total term. | Ramp contracts — straight-line accountin | not_in_product |
needs_design |
from_billing |
Complete |
A606-C-tp_changes_32_42 |
gap:gap-domain-ramp-pricing |
CB ramps/IBM later. Domain gap explicitly filed. High-value backlog. |
2.3 SSP & allocation
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-024 |
SSP formula | Configurable SSP derivation (list, % of list, formula filters on eligible lines). | SSP = 90% of list_price for product family X. | SSP formula | partial |
ready |
from_catalog |
Complete |
A606-C-allocation_ssp_32_28, A606-P06 |
tag:ssp; case:auto-create-ssp; case:autocreatessp-expense-scenarios; case:listPriceSSP; +1 |
listPriceSSP proves list-based path; formula richness TBD. |
CAP-025 |
SSP upload | External SSP estimates uploaded via templates; range evaluation (low/mid/high). | CSV upload SSP mid=100 for SKU-A effective 2026-01-01. | SSP upload | partial |
ready |
not_applicable |
Complete |
A606-C-allocation_ssp_32_28, A606-E-18 |
tag:ssp; case:auto-create-ssp; case:autocreatessp-expense-scenarios; case:listPriceSSP; +1 |
Admin path; versioning gap. Not from CB streams (cb_facts=not_applicable). |
CAP-026 |
SSP Analyzer | Historical transaction analysis with bands, compliance %, optimizer scale. | TBD | SSP Analyzer | evidence_only |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-allocation_ssp_32_28 |
case:ssp-analyzer; tag:ssp; case:auto-create-ssp |
Smoke case ssp-analyzer exists — evidence_only, not proof of Zuora-depth analyzer. |
CAP-027 |
AI-assisted SSP modeling | Marketing claim for AI-assisted SSP analysis. Not a core subledger requirement. | TBD | AI-assisted SSP modeling | n_a |
out |
not_applicable |
Out |
— | none:product choice Out | Deterministic SSP library first. AI packaging outside ASC core. |
CAP-028 |
Residual SSP (RSSP) | Residual allocation when products never sold standalone / new to market. | New SKU in bundle; residual = TP − observable SSPs. | Residual SSP (RSSP) | evidence_only |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-allocation_ssp_32_28 |
case:multiple-residual-items |
Matrix points at untagged multiple-residual-items. Verify case still in suite. |
CAP-029 |
SSP hierarchy on RC template | Zuora ties SSP source/range to RC grouping template tabs. We refuse this surface — SSP policy lives on product/PO/Contract. | TBD | SSP hierarchy on RC template | n_a |
out |
not_applicable |
Out |
— | none:Out — not cloning RC template SSP tabs | Outcome via SSP policy on PO/product. |
CAP-030 |
Perform revenue allocations based on SSP | Relative allocation of TP across eligible POs using SSP. | See CAP-006. | Perform revenue allocations based on SSP | partial |
ready |
derived_in_revrec |
Foundation |
A606-C-allocation_ssp_32_28, A606-P06, A606-E-33, A606-E-34 |
tag:ssp; case:auto-create-ssp; case:autocreatessp-expense-scenarios; case:listPriceSSP; +1 |
Foundation degenerate ready; multi-PO Complete. |
CAP-031 |
Ramp allocation | Group lines by ramp deal ref; volume/term average pricing methods. | TBD | Ramp allocation | not_in_product |
needs_design |
from_billing |
Complete |
— | gap:gap-domain-ramp-pricing |
Paired with CAP-023. No smoke tag. |
CAP-032 |
VC allocation (2-step / line SSP range) | Allocate VC when TP outside SSP range — RC-level or line-level triggers. | TBD | VC allocation (2-step / line SSP range) | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-vc_allocation_32_39, A606-E-35 |
gap:gap-domain-variable-consideration |
VC allocation beyond basic usage is enterprise-deep. |
CAP-033 |
Bundle explosion | Split parent catalog/bundle into child POs for allocation/PO assignment. | “Suite” SKU → License + Support child POs. | Bundle explosion | evidence_only |
needs_design |
from_catalog |
Complete |
A606-C-distinct_25_19_21, A606-P06 |
case:product-bundle |
CB bundles partial. Need explicit golden. |
CAP-034 |
SSP exception reporting | Lines/POs where SSP cannot be derived; SOX-adjacent exception list. | Close check: 3 POs missing SSP → block transfer. | SSP exception reporting | not_in_product |
needs_design |
not_applicable |
Complete |
A606-C-allocation_ssp_32_28 |
tag:ssp; case:auto-create-ssp; none:no exception-report smoke |
Close-check outcome, not a CB stream fact. |
2.4 Recognition methods
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-035 |
Over-time vs point-in-time | PO recognition pattern: over-time (stand-ready SaaS) vs point-in-time. | SaaS access = over time; one-time setup fee = PIT if distinct. | Over-time vs point-in-time (POB Satisfie | partial |
ready |
from_catalog |
Foundation |
A606-C-over_time_25_27, A606-P01, A606-P08, A606-E-13 |
tag:recognition-plan; case:eight-year-plan-test; case:fixed-30x360-plan; case:fixed-30x360-plan-enddate-inclusive; +3 |
Over-time Foundation strong; PIT Complete. |
CAP-036 |
Ratable methods | Contract ratable, monthly/daily/mid-month, 30/360, user calendars — schedule shapes. | fixed-30x360-plan smoke. | Ratable methods | in_product |
ready |
derived_in_revrec |
Foundation |
A606-C-measure_progress, A606-P09, A606-E-33 |
tag:recognition-plan; case:eight-year-plan-test; case:fixed-30x360-plan; case:fixed-30x360-plan-enddate-inclusive; +2 |
Best-covered recognition surface. |
CAP-037 |
Point-in-time (immediate) | Immediate recognition using open period or start date. | One-time professional services fee recognized on delivery date. | Point-in-time (immediate) | partial |
ready |
from_billing |
Complete |
A606-P08, A606-C-measure_progress |
tag:service-delivery; case:export-psd; case:serviceDelivery-by-baseProduct; case:servicedelivery-base; +1 |
Delivery cases exist; PIT-as-first-class method still partial. |
CAP-038 |
User-defined / milestone schedules | Percent/duration sequences on PO (milestone-like). | TBD — 40/40/20 milestone schedule. | User-defined / milestone schedules | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
A606-C-measure_progress |
none | PS/milestone world. Not day-one SaaS. |
CAP-039 |
Delivery / quantity events | record_delivery proportional / qty release; Upon Delivery By Qty style. | Ship 3 of 10 licenses → recognize 30%. | Delivery / quantity events | partial |
ready |
from_billing |
Complete |
A606-P08, A606-C-measure_progress, A606-E-34 |
tag:service-delivery; case:export-psd; case:serviceDelivery-by-baseProduct; case:servicedelivery-base; +1 |
Strong smoke theme; delivery-date gap still open. |
CAP-040 |
Budgeted cost / budgeted hours events | Release revenue by % completed cost or hours (services/milestone proxy). | TBD | Budgeted cost / budgeted hours events | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
A606-C-measure_progress |
none | Input methods for PS. Weak CB fit. |
CAP-041 |
POB dependencies | Release child PO when parent PO satisfied. | TBD — support starts only after license delivered. | POB dependencies | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-distinct_25_19_21 |
none | Interesting for hardware+SaaS; rare for pure CB SaaS. |
CAP-042 |
Upon Expiry release | Auto-release remaining after configured days from book/open date. | TBD — breakage-adjacent auto-release after 24 months. | Upon Expiry release | not_in_product |
needs_design |
derived_in_revrec |
Complete |
A606-C-breakage_55_46 |
none | Useful for prepaid credits / breakage cousins. |
CAP-043 |
Consumption / usage POB templates | Usage/consumption recognition models (Consumption Ratable, PayGo, Usage Event). | Metered API calls → recognize as usage arrives (constrained). | Consumption / usage POB templates | partial |
needs_design |
from_billing |
Complete |
A606-P07, A606-C-variable_consideration_32_5, A606-E-21 |
case:cb-metered; gap:gap-domain-usage-metered |
cb-metered is narrow. Full PayGo/drawdown suite Enterprise-deep (see CAP-104). |
CAP-044 |
Daily vs partial monthly accounting method | Schedule granularity / proration knobs on PO method. | True-days vs 30/360 vs inclusive end date. | Daily vs partial monthly accounting meth | in_product |
ready |
derived_in_revrec |
Foundation |
A606-P09, A606-E-33 |
tag:recognition-plan; case:eight-year-plan-test; case:fixed-30x360-plan; case:fixed-30x360-plan-enddate-inclusive; +1 |
Proration calendars are a RevRec strength today. |
2.5 Billing / booking / events-based recognition modes
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-045 |
Upon Booking (Full Booking Release) | Open from subscription = booking signal; optional full booking release policy. | Recognize full booking amount when SO/sub collected (rare for prepaid SaaS). | Upon Booking (Full Booking Release) | partial |
ready |
from_billing |
Foundation |
A606-P01, A606-C-five_steps |
tag:sales-orders; case:commission-scenarios-salesorderitem; case:invoice-salesorder-scenarios; case:outOfSyncOrders-scenarios; +3 |
Open path Foundation; full booking release as policy = Complete. |
CAP-046 |
Upon Billing (Billed Release) | Recognize billed % when invoice recorded — sibling to AR; invoices do not invent POs. | Invoice 50% → release 50% of allocated revenue if billing-release policy on. | Upon Billing (Billed Release) | partial |
ready |
from_billing |
Complete |
A606-P01, A606-E-40 |
tag:billing-invoice; case:444-voided-invoice; case:445-voided-invoice; case:billing-by-contract; +1 |
record_billing Foundation as AR. Billed-release recognition policy still thin. |
CAP-047 |
Upon Billing (Full Booking Release) | Total booking amount recognized when any bill collected (partial or full). | TBD | Upon Billing (Full Booking Release) | not_in_product |
needs_design |
from_billing |
Complete |
A606-P01 |
tag:billing-invoice; case:444-voided-invoice; none:no full-booking-on-any-bill policy smoke |
Policy variant; less common for ratable SaaS. |
CAP-048 |
Events-based recognition | Custom revenue/cost/hold events beyond CB delivery; upload + process. | Manual “go-live” event releases implementation PO. | Events-based recognition | partial |
needs_design |
from_billing |
Complete |
A606-P08, A606-C-measure_progress |
tag:service-delivery; case:export-psd; case:serviceDelivery-by-baseProduct; case:servicedelivery-base |
Delivery Complete; generic event upload Enterprise-deep. |
CAP-049 |
Manual release | Operator-forced release of PO revenue. | Finance releases held PO after audit sign-off. | Manual release | evidence_only |
needs_design |
not_applicable |
Complete |
A606-P11 |
tag:pause-revenue; case:pause-revenue; gap:gap-pause-revenue |
pause-revenue is the control sibling; manual release UX thin. |
CAP-050 |
Billing–Revenue Integration sync | Native upstream billing → extract → apply. Our Chargebee advantage vs Zuora Billing↔Revenue. | Daily CB invoice/subscription sync → domain events. | Billing–Revenue Integration sync | in_product |
ready |
from_billing |
Foundation |
A606-P01, A606-P12 |
tag:billing-invoice; case:444-voided-invoice; case:445-voided-invoice; case:billing-by-contract; +6 |
This is the whole point of Chargebee-native RevRec. |
CAP-051 |
Usage Sync (integrated) | Rated usage from Billing synced to trigger recognition/accrual. | CB usage events → period recognition. | Usage Sync (integrated) | partial |
needs_design |
from_billing |
Complete |
A606-P07 |
case:cb-metered; gap:gap-domain-usage-metered |
Narrow path only today. |
CAP-052 |
Standalone manual upload | File/adapter ingest for migration & non-CB sources emitting same domain events. | Zip of SO/invoice CSV → SourceAdapter → open/bill events. | Standalone manual upload | in_product |
ready |
not_applicable |
Complete |
— | tag:file-sync; case:splitfiles-by-version-zip; case:zip; case:zip-multifiles; +3 |
Migration adapter Complete. Hotglue CSV byte-parity is Out as product bar. |
2.6 Close / continuous accounting / journals / reconciliation
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-053 |
Continuous accounting | Reconcile throughout period; frequent recognize; not only month-end batch. Marketing + close dashboard at Zuora. | Daily recognize job + mid-period trial balance view. | Continuous accounting | partial |
ready |
derived_in_revrec |
Foundation |
A606-P10 |
tag:period-close; case:accounting-close; case:auto-accounting-close; case:transactionDate_closeperiod; +3 |
Period recognize Foundation; near-continuous Complete. |
CAP-054 |
Close Process dashboard | Pre-close checks, exceptions, trial-balance-ish views, accounting analysis tabs. | TBD — checklist: orphans, missing SSP, unposted schedules. | Close Process dashboard | partial |
needs_design |
not_applicable |
Foundation |
— | tag:period-close; case:accounting-close; case:auto-accounting-close; case:transactionDate_closeperiod; +4 |
Thin Foundation checks ready; full dashboard Complete. Not sourced from CB streams. |
CAP-055 |
Period-close template & task orchestration | Period state machine: soft close, reopen, lock; sequenced tasks. | Soft-close P1 → reject late sync or PPA path; hard-close locks. | Period-close template & task orchestrati | partial |
ready |
not_applicable |
Foundation |
A606-P10 |
tag:period-close; case:accounting-close; case:auto-accounting-close; case:transactionDate_closeperiod; +2 |
accounting-close exists (local_only). Soft/hard close gap still proposed. |
CAP-056 |
Netting process (CA/CL) | Calculate contract asset/liability net presentation; create accounting entries. | Same contract: deferred 800 + unbilled 200 → net CL 600 presentation. | Netting process (CA/CL) | partial |
needs_design |
derived_in_revrec |
Complete |
A606-C-contract_balances_45, A606-E-38, A606-E-39 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item |
Balances exist; netting presentation incomplete. |
CAP-057 |
LT/ST reclassification process | Reclass CA/CL between long-term and short-term accounts for balance sheet. | Deferred beyond 12 months → LT deferred liability. | LT/ST reclassification process | evidence_only |
needs_design |
not_applicable |
Enterprise-deep |
A606-C-contract_balances_45 |
case:short-and-long-term-def-revenue |
Public company need. Smoke may exist untagged. |
CAP-058 |
Accounting transfer to GL | post_journals summarized/detail export to GL as revenue sub-ledger. | Period JE CSV/API → NetSuite/Workday/AC. | Accounting transfer to GL | in_product |
ready |
ac_only |
Foundation |
— | tag:journal-posting; case:incorrect-journal-account-mappings; case:journal-diagnostics; case:journal-entries-custom-fields; +4 |
cb_facts=ac_only: transfer/posting often lands in Accounting Central sibling; RevRec owns amounts (ADR 0006). |
CAP-059 |
Manual journal entries (MJE) | Upload/post manual JEs with approval rules and SOB validation. | TBD | Manual journal entries (MJE) | not_in_product |
needs_design |
ac_only |
Enterprise-deep |
— | tag:journal-posting; case:incorrect-journal-account-mappings; none:no MJE approval smoke |
Mostly AC/close ops. Enterprise-deep. |
CAP-060 |
Sweep unposted schedules | Move unposted schedule lines to next period before close. | TBD | Sweep unposted schedules | not_in_product |
needs_design |
derived_in_revrec |
Complete |
A606-P10 |
tag:period-close; case:accounting-close; none:sweep not explicit |
Close-flow detail. |
CAP-061 |
Reporting summarization programs | Period snapshots for waterfall/history; current-period post summarize. | Month-end snapshot feeds historical waterfall. | Reporting summarization programs | partial |
ready |
derived_in_revrec |
Foundation |
A606-C-contract_balances_45 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; tag:export; +1 |
Serve-layer snapshots Foundation-ish. |
CAP-062 |
Report reconciliation (automated in dashboard) | Cross-check Accounting Detail vs Revenue Insight, Waterfall, Rollforwards. | Waterfall total = TB revenue account = RC rollforward activity. | Report reconciliation (automated in dash | partial |
needs_design |
not_applicable |
Complete |
— | tag:subledger-ac; case:ac-custom-payment-method-display; case:subledger; tag:deferred-revenue; +1 |
AC-heavy today; RevRec waterfall tie-out thin. |
CAP-063 |
Revenue holds & transfer holds | Block release and/or GL posting at contract/PO/line until cleared. | Hold recognition on disputed contract; transfer hold blocks JE export. | Revenue holds & transfer holds | evidence_only |
needs_design |
not_applicable |
Complete |
A606-P11 |
tag:pause-revenue; case:pause-revenue; gap:gap-pause-revenue |
Period lock is Foundation; holds Complete. pause-revenue is the quarry. |
CAP-064 |
RC / MJE approvals | Approval workflows before release or posting. | TBD | RC / MJE approvals | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
— | none | SOX-scale workflow. |
2.7 Audit / SOX / controls
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-065 |
Audit Trail report | Immutable applied_events + config change log; drill event → balance → raw. Zuora claims 7-year retention. | Show who changed SSP and which contracts reallocated. | Audit Trail report | evidence_only |
ready |
derived_in_revrec |
Foundation |
— | case:doc-audit-delete-flow |
Design Foundation (applied_events). Smoke thin/untagged. |
CAP-066 |
Audit trail scope | Cover policies, SSP, books, roles, period ops — not just transactional events. | TBD | Audit trail scope | not_in_product |
needs_design |
not_applicable |
Complete |
— | none | Config audit Completeness. |
CAP-067 |
SOX report pack | Approvals, contract mod, role privileges, user access, SSP/VC changes, mass actions, holds, orphan lines, staging exceptions. | TBD | SOX report pack | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
— | tag:modification; case:contract-term-modification; tag:period-close; case:accounting-close |
Full pack Enterprise-deep. Basic mod audit Complete (CAP-022). |
CAP-068 |
Granular authorization / role-based access | RBAC on functions, reports, dashboard tabs. | TBD | Granular authorization / role-based acce | not_in_product |
needs_design |
not_applicable |
Complete |
— | none | Platform concern as much as RevRec domain. |
CAP-069 |
Segregation of duties | Finance subledger vs GL governance — RevRec owns recognition math; AC/GL posts. | Recognition amounts computed in RevRec; AC cannot invent revenue. | Segregation of duties (marketing) | evidence_only |
ready |
ac_only |
Complete |
— | tag:subledger-ac; case:ac-custom-payment-method-display; case:subledger; tag:journal-posting; +1 |
Direction alignment with ADR 0006 / AC boundary. Marketing SoD claim → real boundary. |
CAP-070 |
Stage validation framework | Ingest/normalize validation exceptions (not RevPro stage tables). Capture and report bad lines. | Invoice missing subscription_id → exception queue. | Stage validation framework | evidence_only |
ready |
from_billing |
Foundation |
— | case:doc-staging-validation; tag:(untagged) |
Foundation ingest validation. |
CAP-071 |
Soft freeze on period close | Freeze writes that would corrupt close sequence during soft close. | Soft-closed period rejects new invoices into that period (or routes to PPA). | Soft freeze on period close | partial |
ready |
not_applicable |
Foundation |
A606-P10 |
tag:period-close; case:accounting-close; case:auto-accounting-close; case:transactionDate_closeperiod; +1 |
Paired with CAP-055. |
2.8 Reporting / waterfalls / disclosures / RPO / trial balance
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-072 |
Waterfall Report | Prior/current/future recognized + deferred/cost/forecast schedules; unsatisfied/partial PO timing. | Columns: prior periods | current | future months of deferred release. | Waterfall Report | in_product |
ready |
derived_in_revrec |
Foundation |
A606-C-contract_balances_45, A606-C-rpo_50_13, A606-P02 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item; +1 |
Foundation report. Helper gap exists but deferred-revenue quarry is strong. |
CAP-073 |
Historical Waterfall (13 periods) | Multi-period actual activity from a chosen historical period. | TBD — 13-month trailing waterfall. | Historical Waterfall (13 periods) | partial |
needs_design |
derived_in_revrec |
Complete |
A606-C-contract_balances_45 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue |
Needs summarization snapshots (CAP-061). |
CAP-074 |
Billing Waterfall / Billing RollForward | Invoice-level contract liability balances and billed revenue rollforward — beginning billed/unearned, billings, recognition, ending. Distinct from pure recognition waterfall: ties … | Beginning unearned 10k + invoices 5k − recognized 3k = ending 12k at invoice gra | Billing Waterfall / Billing RollForward | in_product |
ready |
from_billing |
Complete |
A606-C-contract_balances_45, A606-E-40, A606-P01 |
case:billingrollforward-scenarios; case:billingrollforward-scenarios-by-so; tag:billing-invoice |
Explicit smoke: packages/revlock-test-driver/src/tests/cases/billingrollforward-scenarios/ and billingrollforward-sc |
CAP-075 |
RC Rollforward | CA/CL beginning / activity / ending; GL reconciliation rollforward. | CL begin + billings − revenue + adjustments = CL end. | RC Rollforward | partial |
ready |
derived_in_revrec |
Complete |
A606-C-contract_balances_45, A606-E-38 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item; +3 |
Unearned summary rollforward gap. Related to CAP-074 billing RF. |
CAP-076 |
Trial Balance Report | Account balances in reporting currency; reconciles to rollforward/waterfall. Not sourced from Chargebee streams — derived from posted journals / subledger. | Deferred revenue GL account balance = sum of CL schedules. | Trial Balance Report | evidence_only |
ready |
not_applicable |
Complete |
— | tag:subledger-ac; case:ac-custom-payment-method-display; case:subledger; case:subledger-2; +2 |
cb_facts=not_applicable: trial balance is a RevRec/AC report artifact, not a CB ingest fact. AC-heavy evidence today. |
CAP-077 |
Revenue Insight / Revenue Summary | PTD/QTD/YTD revenue activity with line detail. | TBD | Revenue Insight / Revenue Summary | evidence_only |
needs_design |
derived_in_revrec |
Complete |
A606-E-41 |
case:dashboard-revenue-api; tag:mrr |
Analytics surface Complete. |
CAP-078 |
ASC 606 disclosure — Prior/Current CL/CA | Revenue from prior/current period contract liability and contract asset categories. | How much of this period’s revenue was in opening deferred. | ASC 606 disclosure — Prior/Current CL/CA | partial |
needs_design |
derived_in_revrec |
Complete |
A606-C-contract_balances_45, A606-C-rpo_50_13 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item |
Disclosure suite incomplete vs Zuora. |
CAP-079 |
Disclosure — Prior/Current satisfied POBs | Separate prior vs current period revenue at line level (catch-up aware). | Catch-up from retrospective mod shown as prior-period satisfaction. | Disclosure — Prior/Current satisfied POB | partial |
needs_design |
derived_in_revrec |
Complete |
A606-C-mod_termination_25_13, A606-P10 |
tag:ppa; case:journal-mapping-revenue-ppa-fallback; case:ppa; case:ppa-alltests; +2 |
Needs catch-up maturity (CAP-014). |
CAP-080 |
Unsatisfied POB Balances (RPO proxy) | Remaining balances for unsatisfied/partially satisfied POs — Remaining Performance Obligations proxy. | Open deferred + unbilled allocated = RPO-ish total. | Unsatisfied POB Balances (RPO proxy) | partial |
needs_design |
derived_in_revrec |
Complete |
A606-C-rpo_50_13, A606-E-42, A606-E-43 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item; +1 |
Balances exist; formal RPO disclosure new in ASC catalog. |
CAP-081 |
Unreleased POB(s) Report | POs not fully released — operational exception list. | Held / paused / delivery-pending POs. | Unreleased POB(s) Report | partial |
needs_design |
derived_in_revrec |
Complete |
A606-P11, A606-P08 |
tag:pause-revenue; case:pause-revenue; tag:service-delivery; case:export-psd |
Ops report. |
CAP-082 |
Track unbilled receivables | Unbilled AR / contract asset rollforward when performance precedes billing. | Recognize before invoice → contract asset / unbilled. | Track unbilled receivables | partial |
ready |
from_billing |
Foundation |
A606-P02, A606-E-39, A606-C-contract_balances_45 |
tag:deferred-revenue; case:adj-unearned-by-order; case:adjustment-for-unearned-revenue; case:deferred-by-item; +1 |
Foundation aim; unbilled* cases exist. CB unbilled_charges Complete. |
CAP-083 |
VC Insight / VC Rollforward | Variable consideration activity and balances. | TBD | VC Insight / VC Rollforward | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-variable_consideration_32_5, A606-C-vc_constraint_32_11 |
gap:gap-domain-variable-consideration |
Blocked on VC engine depth. |
CAP-084 |
Cost Insight / Cost Rollforward | Capitalized cost reporting (commissions, COGS amortization). | Commission capitalized then amortized with revenue. | Cost Insight / Cost Rollforward | partial |
needs_design |
from_billing |
Enterprise-deep |
A606-E-36 |
tag:expense-commission; case:autocreatessp-expense-scenarios; case:commission-scenarios; case:commission-scenarios-salesorderitem; +1 |
Sibling pack / boundary with AC. Smoke exists; may ship separate from recognition core. |
CAP-085 |
Consumption Usage Waterfall | Usage revenue scheduled by period for consumption customers. | TBD | Consumption Usage Waterfall | not_in_product |
needs_design |
from_billing |
Enterprise-deep |
A606-P07 |
case:cb-metered; gap:gap-domain-usage-metered |
Needs consumption suite. |
CAP-086 |
Forecast Revenue | Forecast templates / waterfall forecast data (future recognition projection). | TBD | Forecast Revenue | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-rpo_50_13 |
none | Related to RPO / remaining schedule. |
CAP-087 |
Period FX Waterfall / Unbilled FX / Trial Balance FX | Multi-currency reporting and FX gain/loss analysis across waterfall/TB/unbilled. | EUR contract reported in USD home currency with FX P&L. | Period FX Waterfall / Unbilled FX / Tria | partial |
needs_design |
from_billing |
Complete |
A606-E-32 |
tag:multi-currency; case:expense-multicurrency; case:expense-multicurrency-1; case:forex |
AC FX smoke strong; RevRec FX disclosure thin. Full FX waterfall suite Enterprise-deep. |
CAP-088 |
Disclosure Aggregation config | Second-level summarization fields for disclosure reports. | TBD | Disclosure Aggregation config | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
A606-E-41 |
none | Config knobs after core disclosures exist. |
CAP-089 |
60+ pre-built reports (marketing) | Product-page claim for waterfalls, disclosures, VC, SOX dashboards. Outcome = finance-usable report set — not cloning Zuora report count. | Core set: waterfall, billing RF, RC RF, TB, RPO, mod audit. | 60+ pre-built reports (marketing) | partial |
needs_design |
not_applicable |
Complete |
— | tag:export; case:continuous-export-revrec; case:export-data; case:export-psd; +4 |
Complete = core set; Enterprise-deep = full catalog. Don’t chase “60+”. |
2.9 Integrations (billing, ERP, CPQ)
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-090 |
Chargebee Billing ↔ Revenue (Zuora Billing↔Revenue twin) | Native Chargebee Billing ↔ RevRec adapter — equivalent outcome to Zuora Billing–Revenue Integration. | subscriptions + invoices streams → open_contract / record_billing. | Zuora Billing ↔ Revenue Integration | in_product |
ready |
from_billing |
Foundation |
A606-P01, A606-P03, A606-P12 |
tag:billing-invoice; case:444-voided-invoice; case:445-voided-invoice; case:billing-by-contract; +3 |
Our advantage. Same as CAP-050 outcome lens. |
CAP-091 |
CPQ / quote-to-cash | Quote impact / CPQ upstream into revenue contracts. CB CPQ/quotes not day-one contract path. | TBD | Zuora CPQ / quote-to-cash | not_in_product |
needs_design |
from_catalog |
Enterprise-deep |
— | none | Later. Don’t invent contracts from quotes day one. |
CAP-092 |
NetSuite Revenue Inbound Connector | ERP orders/invoices inbound via optional SourceAdapter. | TBD | NetSuite Revenue Inbound Connector | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
— | none | Adapter pattern; same domain events. |
CAP-093 |
NetSuite GL Connector | JE → NetSuite GL. | post_journals export to NetSuite. | NetSuite GL Connector | evidence_only |
ready |
ac_only |
Complete |
— | tag:journal-posting; case:incorrect-journal-account-mappings; case:journal-diagnostics; tag:export; +1 |
Reuse existing connector patterns; AC boundary. |
CAP-094 |
Workday Accounting Center Connector | JE / billing → Workday Accounting Center / Prism batches. | TBD | Workday Accounting Center Connector | not_in_product |
needs_design |
ac_only |
Complete |
— | tag:export; case:continuous-export-revrec |
Egress Complete when connector ships. |
CAP-095 |
Workday Financials GL Connector | Revenue JE transfer to Workday Financials. | TBD | Workday Financials GL Connector | not_in_product |
needs_design |
ac_only |
Complete |
— | tag:export; case:continuous-export-revrec |
Same family as CAP-094. |
CAP-096 |
Microsoft Dynamics 365 Connector | Enterprise GL path listed in Zuora entitlements. | TBD | Microsoft Dynamics 365 Connector | not_in_product |
needs_design |
ac_only |
Enterprise-deep |
— | none | Enterprise-deep connector. |
CAP-097 |
Open APIs / SDK | Apply API + read APIs for contracts/schedules/journals; developer surface. | POST /apply open_contract; GET contract schedules. | Open APIs / SDK | partial |
ready |
not_applicable |
Foundation |
— | case:admin-apis; gap:gap-public-api-etl |
Foundation apply/read. Public API ETL gap noted. |
CAP-098 |
Standalone file upload (integration) | Migration / edge file SourceAdapter — same as CAP-052 lens for integrations catalog. | See CAP-052. | Standalone file upload | in_product |
ready |
not_applicable |
Complete |
— | tag:file-sync; case:splitfiles-by-version-zip; case:zip; case:zip-multifiles |
Duplicate inventory row from Zuora §2.9; keep for exhaustiveness. |
CAP-099 |
Salesforce / SAP (marketing FAQ) | CRM/ERP inbound examples from product FAQ — adapter candidates. | TBD | Salesforce / SAP (marketing FAQ) | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
— | none | Marketing list. SourceAdapter when needed. |
2.10 Advanced (multi-book, VC, cost, AI, simulations)
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-100 |
Multi-book revenue accounting | Primary/secondary books (GAAP vs IFRS vs local); per-book period templates, LT/ST, transfer, Workbench view. | TBD — Book A ASC 606, Book B IFRS 15 local. | Multi-book revenue accounting | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
— | none | Single book Foundation. Multi-book Later. |
CAP-101 |
Revenue Book Comparison Report | Compare two books under ASC 606 / IFRS rules. | TBD | Revenue Book Comparison Report | not_in_product |
needs_design |
not_applicable |
Enterprise-deep |
— | none | Depends on CAP-100. |
CAP-102 |
Advanced Variable Consideration Analyzer | VC constraint / analyzer beyond basic TP adjustments — Zuora advanced use case. | TBD | Advanced Variable Consideration Analyzer | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-vc_constraint_32_11, A606-E-25 |
gap:gap-domain-variable-consideration |
Distinct from CAP-005 fixed TP. |
CAP-103 |
Advanced SSP Analyzer | Historical SSP with optimizer/bands — same family as CAP-026. | TBD | Advanced SSP Analyzer | evidence_only |
needs_design |
derived_in_revrec |
Enterprise-deep |
A606-C-allocation_ssp_32_28 |
case:ssp-analyzer |
Inventory duplicate with CAP-026 (Zuora lists in both §2.3 and §2.10). Keep both for map exhaustiveness. |
CAP-104 |
Cost processing (COGS, commissions, rebates, accruals) | Capitalize/amortize incremental costs of obtaining/fulfilling; formula rules; follow-revenue or independent release. Often a sibling pack. | Sales commission capitalized then amortized with SaaS PO. | Cost processing (COGS, commissions, reba | partial |
needs_design |
from_billing |
Enterprise-deep |
A606-E-36, A606-E-37 |
tag:expense-commission; case:autocreatessp-expense-scenarios; case:commission-scenarios; case:commission-scenarios-salesorderitem; +1 |
Domain purity note: may ship as separate capability pack from recognition core. |
CAP-105 |
Consumption revenue suite | Usage models, unbilled usage accrual, prepaid drawdown, usage tracking reports — full suite beyond basic metered. | Prepaid credits drawdown + PayGo overage. | Consumption revenue suite | partial |
needs_design |
from_billing |
Complete |
A606-P07, A606-C-breakage_55_46 |
case:cb-metered; gap:gap-domain-usage-metered |
Basic Complete; full suite Enterprise-deep. |
CAP-106 |
Financing / significant financing component | Financing accrual rollforward, insight, payment exception — significant financing component under ASC 606. | Multi-year arrears payment with interest income split from revenue. | Financing / significant financing compon | not_in_product |
needs_design |
derived_in_revrec |
Enterprise-deep |
— | gap:gap-domain-significant-financing |
Rare for pure SaaS. Explicit domain gap. |
CAP-107 |
Mass actions | Batch hold/release, re-allocate, close/open contracts. | Hold all contracts for customer X pending dispute. | Mass actions | not_in_product |
needs_design |
not_applicable |
Complete |
— | none | Ops scale Complete. |
CAP-108 |
Simulations / quote impact (marketing) | Pre-ledger GTM/pricing simulations before ledger impact. Not ASC subledger core. | TBD | Simulations / quote impact (marketing) | n_a |
out |
not_applicable |
Out |
— | none:Out — GTM simulation not subledger | Product choice Out. |
CAP-109 |
AI-assisted validations / SSP (marketing) | Product-page AI validation packaging. Deterministic validation + audit first. | TBD | AI-assisted validations / SSP (marketing | n_a |
out |
not_applicable |
Out |
— | none:Out | Same stance as CAP-027. |
CAP-110 |
Dedicated shard / migration sandbox / managed services | Enterprise deployment & services entitlements — ops packaging, not domain model. | TBD | Dedicated shard / migration sandbox / ma | n_a |
out |
not_applicable |
Out |
— | none:Out — ops entitlement | Not a domain capability. |
ASC-only (weak/no Zuora twin)
| id | name | definition | example | zuora | revrec_today | next_build | cb_facts | maturity | a606 | evidence | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
CAP-111 |
Contract existence / collectibility | ASC 606-10-25-1..7 contract criteria including collectibility. Soft collections / free trials. Weak Zuora “feature” twin — it’s Step 1 gatekeeping. | Free trial with low collectibility → no contract until criteria met. | (embedded in Step 1 / RC formation) | not_in_product |
needs_design |
from_billing |
Complete |
A606-C-contract_existence_25_1, A606-E-1, A606-E-4 |
none:A606 coverage=new | High SaaS relevance; almost no smoke. Don’t bury under CAP-003 forever. |
CAP-112 |
Combining contracts | ASC 606-10-25-9 combine contracts entered at/near same time with single commercial objective / price interdependence. | Two subs sold as package with interdependent pricing → one accounting contract. | — | not_in_product |
needs_design |
from_billing |
Enterprise-deep |
A606-C-combine_contracts_25_9 |
none | Conflicts with naive 1-sub=1-contract. Policy later. |
CAP-113 |
Material rights (customer options) | Renewal/discount options that are material rights — allocate TP to the option PO. | Renewal at 50% off if material right → allocate SSP to option; release on exerci | — | not_in_product |
needs_design |
from_catalog |
Enterprise-deep |
A606-C-material_right_55_41, A606-E-49, A606-E-50, A606-E-51 |
gap:gap-domain-material-rights |
Explicit domain gap. No Zuora twin in §§2.1–2.10 as named capability. |
CAP-114 |
Nonrefundable upfront fees | Upfront fees that may be advance payment for future goods/services or a separate PO — ASC 606-10-55-50.. | Setup fee that is not distinct → defer and recognize with SaaS series. | — | not_in_product |
needs_design |
from_billing |
Complete |
A606-C-upfront_fees_55_50, A606-E-53 |
none | Common SaaS pattern; catalog marked new. |
CAP-115 |
Licensing IP / sales-based royalties | Functional vs symbolic IP licenses; sales-based royalty exception. | Royalty recognized when later of sale occurrence / obligation satisfied. | — | not_in_product |
out |
not_applicable |
Out |
A606-C-licensing_55_54, A606-E-54, A606-E-60 |
gap:gap-domain-royalty-ip |
Mostly out of CB SaaS RevRec core. Gap filed for honesty. |
CAP-116 |
Principal versus agent | Gross vs net presentation when arranging for goods/services (marketplace). | Agent books net commission only; principal books gross. | — | evidence_only |
needs_design |
from_catalog |
Complete |
A606-C-principal_agent_55_36, A606-E-45, A606-E-46 |
gap:gap-domain-principal-agent; case:pass-through-product |
pass-through-product is thin. Need explicit principal/agent goldens. |
CAP-117 |
Breakage (unexercised rights) | Customers’ unexercised rights — estimate breakage and recognize as revenue when likelihood remote of exercise / proportional. | Prepaid credits unused → breakage revenue. | (related Upon Expiry / consumption) | not_in_product |
needs_design |
from_billing |
Enterprise-deep |
A606-C-breakage_55_46 |
none | Weak Zuora twin via expiry/consumption; ASC constraint is first-class. |
CAP-118 |
Right of return / refund liability | Sale with right of return — refund liability + asset for recovery. CN policies are partial twin. | Expected returns → constrain revenue; refund liability. | (partial via CN / returns mods) | partial |
needs_design |
from_billing |
Complete |
A606-C-right_of_return_55_22, A606-E-22, A606-P04, A606-P12 |
tag:credit-note; case:contract-term-cn-allocation; case:contract-term-disable-cn-allocation; case:credit-note-by-backlog; +3 |
CN/void cover refund mechanics; formal return asset/liability model thin. |
2b. Full row detail (no truncation)
Same CAP ids; full definition / example / asc_refs / evidence blobs.
Detail — 2.1 ASC 606 five steps / core engine
CAP-001 — Transaction ingestion & staging
- definition: Pull contracts/orders/invoices/costs into a validated intake path before ASC steps. For us: Chargebee extract → normalize → domain events; raw lake keeps payload. Not RevPro staging tables as SoR.
- example: Subscription created webhook → open_contract event with source_ref=sub_xxx.
- zuora: Transaction ingestion & staging
- asc_refs: 606-10-05-4
- a606_ids:
A606-C-five_steps,A606-P01 - revrec_today:
in_product· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·file-sync— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/splitfiles-by-version-zip— splitfiles-by-version-zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip— zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip-multifiles— zip-multifilessmoke_tag·sales-orders— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios-salesorderitem— commission-scenarios-salesorderitemsmoke_case·packages/revlock-test-driver/src/__tests__/cases/invoice-salesorder-scenarios— invoice-salesorder-scenariossmoke_tag·(untagged)— many ingest harness cases- notes: Direction alignment: normalize CB facts; refuse RevPro staging clone. Smoke file-sync + sales-orders prove current ingest exists.
CAP-002 — Data collection / RC formation
- definition: Zuora batch that groups staged lines into revenue contracts via RC grouping templates. We do not clone this — Contract identity comes from subscription (or adapter).
- example: TBD — outcome is open_contract from subscription, not RC template job.
- zuora: Data collection / RC formation
- asc_refs: 606-10-25-1
- a606_ids:
A606-C-contract_existence_25_1 - revrec_today:
n_a· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
none·—— Out as architecture; no smoke for RC template engine- notes: Outcome via Contract from subscription. Matrix marks Out. Do not build Zuora collect/RC-template machinery.
CAP-003 — Step 1 — Identify the contract
- definition: ASC Step 1: establish the revenue contract (parties, rights, payment terms, commercial substance, collectibility). Product: open_contract creates Contract + source_ref; typically one contract per subscription.
- example: Annual SaaS sub → one Contract bound to subscription.id.
- zuora: Step 1 — Identify the contract
- asc_refs: 606-10-25-1, 606-10-25-2, 606-10-25-3, 606-10-25-4, 606-10-25-5, 606-10-25-6, 606-10-25-7
- a606_ids:
A606-C-contract_existence_25_1,A606-C-five_steps,A606-P01,A606-E-1 - revrec_today:
in_product· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·contract-term— 12 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-item-billing-metric— contract-term-item-billing-metricsmoke_tag·sales-orders— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios-salesorderitem— commission-scenarios-salesorderitemsmoke_case·packages/revlock-test-driver/src/__tests__/cases/invoice-salesorder-scenarios— invoice-salesorder-scenarios- notes: Collectibility / free-trial edge cases still thin (A606-C-contract_existence marked new). Core open path is real.
CAP-004 — Step 2 — Identify performance obligations
- definition: Identify distinct goods/services (POs) in the contract. Foundation: 1:1 line→PO from subscription items. Complete: multi-PO, bundles, distinctness judgments.
- example: Plan + implementation addon → two POs if distinct; else series/bundle.
- zuora: Step 2 — Identify performance obligations
- asc_refs: 606-10-25-14, 606-10-25-19, 606-10-25-20, 606-10-25-21, 606-10-25-22
- a606_ids:
A606-C-distinct_25_19_21,A606-C-series_25_14,A606-P06,A606-E-10,A606-E-11 - revrec_today:
partial· next_build:ready· cb_facts:from_catalog· maturity:Foundation - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/perf-obligations-contract-term/— perf-obligations-contract-termsmoke_tag·recognition-plan— 9 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/eight-year-plan-test— eight-year-plan-testsmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan— fixed-30x360-plan- notes: 1:1 Foundation is ready. Multi-PO distinctness + bundles still partial in smoke. Maturity Complete for multi-PO.
CAP-005 — Step 3 — Determine transaction price
- definition: Fixed + variable consideration into TP. Foundation: subscription/price amounts. Complete: credits/discounts. Enterprise-deep: full VC estimate + constraint engine.
- example: $1,200 annual prepaid → TP 1200; usage estimate later adjusts TP.
- zuora: Step 3 — Determine transaction price
- asc_refs: 606-10-32-2, 606-10-32-5, 606-10-32-6, 606-10-32-11
- a606_ids:
A606-C-variable_consideration_32_5,A606-C-vc_constraint_32_11,A606-C-tp_changes_32_42,A606-P04,A606-P07 - revrec_today:
partial· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·credit-note— 10 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/credit-note-by-backlog— credit-note-by-backlogsmoke_tag·mrr— 2 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/mrr-disabled-scenarios— mrr-disabled-scenarioscypress_gap·docs/revrec-scenarios/gaps/gap-domain-variable-consideration.md— VC constraint under-covered- notes: Fixed TP in product. VC constraint/true-up is a known domain gap. Credits touch TP changes.
CAP-006 — Step 4 — Allocate TP to POBs (SSP)
- definition: Relative SSP allocation of TP across POs. MVP degenerate: 100% to single PO. Complete: multi-PO relative SSP.
- example: License SSP 800 + support SSP 200; TP 900 → allocated 720/180.
- zuora: Step 4 — Allocate TP to POBs (SSP)
- asc_refs: 606-10-32-28, 606-10-32-29, 606-10-32-30, 606-10-32-31
- a606_ids:
A606-C-allocation_ssp_32_28,A606-C-discount_allocation_32_36,A606-P06,A606-E-33 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·ssp— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-create-ssp— auto-create-sspsmoke_case·packages/revlock-test-driver/src/__tests__/cases/autocreatessp-expense-scenarios— autocreatessp-expense-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/listPriceSSP— listPriceSSPcypress_gap·docs/revrec-scenarios/gaps/gap-revenue-allocation-strategy.mdcypress_gap·docs/revrec-scenarios/gaps/gap-cypress-ssp-reallocation-ui.md- notes: SSP library + listPriceSSP exist; multi-PO relative allocation still thin. Cypress reallocation gap.
CAP-007 — Step 5 — Recognize revenue when POB satisfied
- definition: Release/recognize when PO satisfied (over time or PIT). Period recognize + schedules; earned vs deferred.
- example: Monthly ratable: recognize 100 of 1200 each month.
- zuora: Step 5 — Recognize revenue when POB satisfied
- asc_refs: 606-10-25-23, 606-10-25-27, 606-10-25-31
- a606_ids:
A606-C-over_time_25_27,A606-C-measure_progress,A606-P01,A606-P09,A606-E-13 - revrec_today:
in_product· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·recognition-plan— 9 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/eight-year-plan-test— eight-year-plan-testsmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan— fixed-30x360-plansmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan-enddate-inclusive— fixed-30x360-plan-enddate-inclusivesmoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappings- notes: Core ratable path is the strongest smoke quarry we have.
CAP-008 — Touchless automation
- definition: Default path applies rules without manual intervention unless exception/hold. Finance only touches exceptions.
- example: Nightly extract→apply→recognize with zero human clicks for clean SaaS renewals.
- zuora: Touchless automation
- asc_refs: 606-10-05-4
- a606_ids:
A606-C-five_steps - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
none·—— No dedicated smoke tag; implied by end-to-end suite cases- notes: Product intent is clear; evidence is “suite runs” not a named touchless test.
CAP-009 — Configurable policies (engine-wide)
- definition: Named policies for mods, CNs, recognition, cancel, holds — thin Foundation set, richer Complete. Not Zuora’s full policy sprawl UI.
- example: mod.upgrade → prospective; cn.refund_unrecog → cut deferred first.
- zuora: Configurable policies (engine-wide)
- asc_refs: 606-10-25-12, 606-10-25-13
- a606_ids:
A606-P03,A606-P04,A606-C-mod_termination_25_13 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification-2— contract-term-modification-2smoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-revenue-adj-prospective-mod— deferred-revenue-adj-prospective-modsmoke_tag·credit-note— 10 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocationsmoke_tag·pause-revenue— 1 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/pause-revenue— pause-revenue- notes: Named policies exist in design; smoke exercises some. Policy ID coverage on every tagged case still messy.
CAP-010 — Revenue Workbench
- definition: Zuora RC/POB/line UI for review, holds, approvals, mod history. We want review/exception UX from our use cases — not a RevPro Workbench clone.
- example: TBD — exception queue for failed apply / holds / SSP missing.
- zuora: Revenue Workbench
- asc_refs: —
- a606_ids: —
- revrec_today:
evidence_only· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·subledger-ac— ops surfaces sibling, not Workbench clonesmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-display- notes: Outcome = review UX (Complete). Literal Workbench clone = Out. next_build needs_design for our UX.
CAP-011 — Earned & deferred revenue tracking
- definition: Schedules maintain earned vs deferred (CL) and contract asset balances through the release lifecycle.
- example: Bill 1200 Jan 1 → deferred 1200; recognize 100/mo → deferred declines.
- zuora: Earned & deferred revenue tracking
- asc_refs: 606-10-45-1, 606-10-45-2, 606-10-45-3, 606-10-45-4, 606-10-45-5
- a606_ids:
A606-C-contract_balances_45,A606-E-38,A606-E-39,A606-P01,A606-P02 - revrec_today:
in_product· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-itemsmoke_tag·billing-invoice— 26 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/444-voided-invoice— 444-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/445-voided-invoice— 445-voided-invoice- notes: Strongest balance evidence in deferred-revenue + billing-invoice tags.
Detail — 2.2 Contract modifications & policies
CAP-012 — Contract modification detection
- definition: Detect price/scope/term/qty/PO changes after initial timeline from subscription change events.
- example: Mid-term plan upgrade → amend_contract with new TP/term.
- zuora: Contract modification detection
- asc_refs: 606-10-25-10, 606-10-25-11, 606-10-25-12, 606-10-25-13
- a606_ids:
A606-C-mod_separate_25_12,A606-C-mod_termination_25_13,A606-P03,A606-E-5,A606-E-7 - revrec_today:
in_product· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification-2— contract-term-modification-2smoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-revenue-adj-prospective-mod— deferred-revenue-adj-prospective-modsmoke_tag·contract-term— 12 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocation- notes: CB subscription changed is the natural detector. Smoke modification tag is solid.
CAP-013 — Modification rule engine
- definition: Named mod policies (upgrade/downgrade/…) — not Zuora’s full rule-matrix UI. Classifies separate vs prospective vs catch-up.
- example: mod.upgrade → prospective realloc of remaining.
- zuora: Modification rule engine
- asc_refs: 606-10-25-12, 606-10-25-13
- a606_ids:
A606-C-mod_separate_25_12,A606-C-mod_termination_25_13,A606-E-5,A606-E-6,A606-E-7 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification-2— contract-term-modification-2smoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-revenue-adj-prospective-mod— deferred-revenue-adj-prospective-modcypress_gap·docs/revrec-scenarios/gaps/gap-prospective-modification-helper.md- notes: Thin Foundation policies ready; rich matrix is Complete. Prospective helper gap noted.
CAP-014 — Retrospective (cumulative catch-up)
- definition: Recalculate allocatable/allocated amounts; adjust prior open periods via cumulative catch-up when goods not distinct (25-13(b)).
- example: Price change on non-distinct series → catch-up revenue in current period.
- zuora: Retrospective (cumulative catch-up)
- asc_refs: 606-10-25-13
- a606_ids:
A606-C-mod_termination_25_13,A606-E-8,A606-P10 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification-2— contract-term-modification-2smoke_tag·ppa— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/journal-mapping-revenue-ppa-fallback— journal-mapping-revenue-ppa-fallbacksmoke_case·packages/revlock-test-driver/src/__tests__/cases/ppa— ppasmoke_case·packages/revlock-test-driver/src/__tests__/cases/ppa-alltests— ppa-alltestsnone·—— A606-E-8 marked new — catch-up fixture thin- notes: Spec’d Complete; golden catch-up fixtures thin. E-8 still new in ASC catalog.
CAP-015 — Prospective allocation
- definition: Closed-period amounts unchanged; remaining obligations reallocated going forward. MVP default for SaaS upgrades.
- example: Upgrade month 4 of 12 → months 1–3 stay; remaining TP reallocated over months 4–12.
- zuora: Prospective allocation
- asc_refs: 606-10-25-13
- a606_ids:
A606-C-mod_termination_25_13,A606-P03,A606-E-7 - revrec_today:
in_product· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/prospective-modification— prospective-modificationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/simple-mod— simple-modsmoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modification- notes: Priority quarry fixtures. This is the SaaS default path.
CAP-016 — Retro-prospective treatment
- definition: Same period applies both retrospective and prospective when a new PO is added during a retrospective mod.
- example: TBD
- zuora: Retro-prospective treatment
- asc_refs: 606-10-25-13
- a606_ids:
A606-C-mod_termination_25_13 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
none·—— No dedicated smoke- notes: Rare SaaS path. Enterprise-deep. Don’t pretend we have it.
CAP-017 — Contractual prospective recast
- definition: Optional recast of remaining ratable contractual revenue from modification date (Zuora ENABLE_CONTRACTUAL_PROSPECTIVE).
- example: TBD
- zuora: Contractual prospective recast
- asc_refs: 606-10-25-13
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
none·—- notes: Zuora knob. We may never need the exact flag; outcome can fold into named mod policies.
CAP-018 — Adjustment revenue release
- definition: Separate contractual vs adjustment revenue release percentages on modifications.
- example: TBD
- zuora: Adjustment revenue release
- asc_refs: 606-10-32-42, 606-10-32-43
- a606_ids:
A606-C-tp_changes_32_42 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordernone·—— adjustment release % not first-class- notes: Deferred adj cases exist; contractual-vs-adjustment release split is not modeled as Zuora does.
CAP-019 — Contract impairment
- definition: Impairment accounting when cancellation triggers prospective treatment / unposted adjustment revenue.
- example: Cancel mid-term with unreleased allocation → impairment / write-down path.
- zuora: Contract impairment
- asc_refs: 606-10-25-13
- a606_ids:
A606-P05 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Enterprise-deep - evidence:
smoke_tag·termination— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/cancel-jobs— cancel-jobssmoke_case·packages/revlock-test-driver/src/__tests__/cases/termination— terminationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/termination-regress— termination-regresscypress_gap·docs/revrec-scenarios/gaps/gap-sales-order-terminate.md- notes: Terminate smoke exists; true impairment accounting is Later/Enterprise-deep.
CAP-020 — Workbench mod review & override
- definition: Operator views mod history; switches prospective↔retrospective; retains allocation — via our review UX + policy override, not Workbench clone.
- example: TBD
- zuora: Workbench mod review & override
- asc_refs: 606-10-25-13
- a606_ids:
A606-C-mod_termination_25_13 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationnone·—— no override UX smoke- notes: Depends on CAP-010 review UX.
CAP-021 — Advanced contract modification framework
- definition: Zuora “advanced” use case beyond standard rules — enterprise rule sprawl.
- example: TBD
- zuora: Advanced contract modification framework
- asc_refs: 606-10-25-10, 606-10-25-13
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
none·—- notes: Named policies should absorb 90% of CB SaaS. Don’t build a second rule engine.
CAP-022 — Contract modification report (SOX)
- definition: Audit report: lines, rules/policies triggered, allocation treatment.
- example: Export of all amends in period with treatment = prospective|catch-up|separate.
- zuora: Contract modification report (SOX)
- asc_refs: 606-10-50-1
- a606_ids:
A606-C-mod_termination_25_13 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationnone·—— no SOX mod report smoke- notes: Basic audit report Complete; full SOX pack Enterprise-deep.
CAP-023 — Ramp contracts — straight-line accounting
- definition: Ramp deal straight-line / average pricing treatment as first-class amend or open.
- example: Y1 100/mo, Y2 150/mo → straight-line avg over total term.
- zuora: Ramp contracts — straight-line accounting
- asc_refs: 606-10-32-2, 606-10-32-42
- a606_ids:
A606-C-tp_changes_32_42 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-ramp-pricing.md— no smoke tag for ramps- notes: CB ramps/IBM later. Domain gap explicitly filed. High-value backlog.
Detail — 2.3 SSP & allocation
CAP-024 — SSP formula
- definition: Configurable SSP derivation (list, % of list, formula filters on eligible lines).
- example: SSP = 90% of list_price for product family X.
- zuora: SSP formula
- asc_refs: 606-10-32-33, 606-10-32-34
- a606_ids:
A606-C-allocation_ssp_32_28,A606-P06 - revrec_today:
partial· next_build:ready· cb_facts:from_catalog· maturity:Complete - evidence:
smoke_tag·ssp— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-create-ssp— auto-create-sspsmoke_case·packages/revlock-test-driver/src/__tests__/cases/autocreatessp-expense-scenarios— autocreatessp-expense-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/listPriceSSP— listPriceSSPsmoke_case·packages/revlock-test-driver/src/__tests__/cases/listPriceSSP— listPriceSSP- notes: listPriceSSP proves list-based path; formula richness TBD.
CAP-025 — SSP upload
- definition: External SSP estimates uploaded via templates; range evaluation (low/mid/high).
- example: CSV upload SSP mid=100 for SKU-A effective 2026-01-01.
- zuora: SSP upload
- asc_refs: 606-10-32-33
- a606_ids:
A606-C-allocation_ssp_32_28,A606-E-18 - revrec_today:
partial· next_build:ready· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·ssp— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-create-ssp— auto-create-sspsmoke_case·packages/revlock-test-driver/src/__tests__/cases/autocreatessp-expense-scenarios— autocreatessp-expense-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/listPriceSSP— listPriceSSPcypress_gap·docs/revrec-scenarios/gaps/gap-ssp-admin-versioning.md- notes: Admin path; versioning gap. Not from CB streams (cb_facts=not_applicable).
CAP-026 — SSP Analyzer
- definition: Historical transaction analysis with bands, compliance %, optimizer scale.
- example: TBD
- zuora: SSP Analyzer
- asc_refs: 606-10-32-33
- a606_ids:
A606-C-allocation_ssp_32_28 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/ssp-analyzer— case exists; depth unknownsmoke_tag·ssp— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-create-ssp— auto-create-ssp- notes: Smoke case ssp-analyzer exists — evidence_only, not proof of Zuora-depth analyzer.
CAP-027 — AI-assisted SSP modeling
- definition: Marketing claim for AI-assisted SSP analysis. Not a core subledger requirement.
- example: TBD
- zuora: AI-assisted SSP modeling
- asc_refs: —
- a606_ids: —
- revrec_today:
n_a· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
none·—— product choice Out- notes: Deterministic SSP library first. AI packaging outside ASC core.
CAP-028 — Residual SSP (RSSP)
- definition: Residual allocation when products never sold standalone / new to market.
- example: New SKU in bundle; residual = TP − observable SSPs.
- zuora: Residual SSP (RSSP)
- asc_refs: 606-10-32-34
- a606_ids:
A606-C-allocation_ssp_32_28 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/multiple-residual-items/— untagged residual case if present- notes: Matrix points at untagged multiple-residual-items. Verify case still in suite.
CAP-029 — SSP hierarchy on RC template
- definition: Zuora ties SSP source/range to RC grouping template tabs. We refuse this surface — SSP policy lives on product/PO/Contract.
- example: TBD
- zuora: SSP hierarchy on RC template
- asc_refs: —
- a606_ids: —
- revrec_today:
n_a· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
none·—— Out — not cloning RC template SSP tabs- notes: Outcome via SSP policy on PO/product.
CAP-030 — Perform revenue allocations based on SSP
- definition: Relative allocation of TP across eligible POs using SSP.
- example: See CAP-006.
- zuora: Perform revenue allocations based on SSP
- asc_refs: 606-10-32-28
- a606_ids:
A606-C-allocation_ssp_32_28,A606-P06,A606-E-33,A606-E-34 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·ssp— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-create-ssp— auto-create-sspsmoke_case·packages/revlock-test-driver/src/__tests__/cases/autocreatessp-expense-scenarios— autocreatessp-expense-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/listPriceSSP— listPriceSSPcypress_gap·docs/revrec-scenarios/gaps/gap-revenue-allocation-strategy.md- notes: Foundation degenerate ready; multi-PO Complete.
CAP-031 — Ramp allocation
- definition: Group lines by ramp deal ref; volume/term average pricing methods.
- example: TBD
- zuora: Ramp allocation
- asc_refs: 606-10-32-28
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-ramp-pricing.md- notes: Paired with CAP-023. No smoke tag.
CAP-032 — VC allocation (2-step / line SSP range)
- definition: Allocate VC when TP outside SSP range — RC-level or line-level triggers.
- example: TBD
- zuora: VC allocation (2-step / line SSP range)
- asc_refs: 606-10-32-39, 606-10-32-40
- a606_ids:
A606-C-vc_allocation_32_39,A606-E-35 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-variable-consideration.md- notes: VC allocation beyond basic usage is enterprise-deep.
CAP-033 — Bundle explosion
- definition: Split parent catalog/bundle into child POs for allocation/PO assignment.
- example: “Suite” SKU → License + Support child POs.
- zuora: Bundle explosion
- asc_refs: 606-10-25-19, 606-10-25-21
- a606_ids:
A606-C-distinct_25_19_21,A606-P06 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:from_catalog· maturity:Complete - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/product-bundle/— untagged product-bundle if present- notes: CB bundles partial. Need explicit golden.
CAP-034 — SSP exception reporting
- definition: Lines/POs where SSP cannot be derived; SOX-adjacent exception list.
- example: Close check: 3 POs missing SSP → block transfer.
- zuora: SSP exception reporting
- asc_refs: 606-10-32-33
- a606_ids:
A606-C-allocation_ssp_32_28 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·ssp— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-create-ssp— auto-create-sspnone·—— no exception-report smoke- notes: Close-check outcome, not a CB stream fact.
Detail — 2.4 Recognition methods
CAP-035 — Over-time vs point-in-time
- definition: PO recognition pattern: over-time (stand-ready SaaS) vs point-in-time.
- example: SaaS access = over time; one-time setup fee = PIT if distinct.
- zuora: Over-time vs point-in-time (POB Satisfied display)
- asc_refs: 606-10-25-23, 606-10-25-27, 606-10-25-30
- a606_ids:
A606-C-over_time_25_27,A606-P01,A606-P08,A606-E-13 - revrec_today:
partial· next_build:ready· cb_facts:from_catalog· maturity:Foundation - evidence:
smoke_tag·recognition-plan— 9 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/eight-year-plan-test— eight-year-plan-testsmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan— fixed-30x360-plansmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan-enddate-inclusive— fixed-30x360-plan-enddate-inclusivesmoke_tag·service-delivery— 16 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psdsmoke_case·packages/revlock-test-driver/src/__tests__/cases/serviceDelivery-by-baseProduct— serviceDelivery-by-baseProduct- notes: Over-time Foundation strong; PIT Complete.
CAP-036 — Ratable methods
- definition: Contract ratable, monthly/daily/mid-month, 30/360, user calendars — schedule shapes.
- example: fixed-30x360-plan smoke.
- zuora: Ratable methods
- asc_refs: 606-10-25-31, 606-10-25-36
- a606_ids:
A606-C-measure_progress,A606-P09,A606-E-33 - revrec_today:
in_product· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·recognition-plan— 9 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/eight-year-plan-test— eight-year-plan-testsmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan— fixed-30x360-plansmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan-enddate-inclusive— fixed-30x360-plan-enddate-inclusivesmoke_case·packages/revlock-test-driver/src/__tests__/cases/plan-types— plan-typessmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan— fixed-30x360-plan- notes: Best-covered recognition surface.
CAP-037 — Point-in-time (immediate)
- definition: Immediate recognition using open period or start date.
- example: One-time professional services fee recognized on delivery date.
- zuora: Point-in-time (immediate)
- asc_refs: 606-10-25-30
- a606_ids:
A606-P08,A606-C-measure_progress - revrec_today:
partial· next_build:ready· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·service-delivery— 16 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psdsmoke_case·packages/revlock-test-driver/src/__tests__/cases/serviceDelivery-by-baseProduct— serviceDelivery-by-baseProductsmoke_case·packages/revlock-test-driver/src/__tests__/cases/servicedelivery-base— servicedelivery-basecypress_gap·docs/revrec-scenarios/gaps/gap-revenue-delivery-date.md- notes: Delivery cases exist; PIT-as-first-class method still partial.
CAP-038 — User-defined / milestone schedules
- definition: Percent/duration sequences on PO (milestone-like).
- example: TBD — 40/40/20 milestone schedule.
- zuora: User-defined / milestone schedules
- asc_refs: 606-10-25-31
- a606_ids:
A606-C-measure_progress - revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: PS/milestone world. Not day-one SaaS.
CAP-039 — Delivery / quantity events
- definition: record_delivery proportional / qty release; Upon Delivery By Qty style.
- example: Ship 3 of 10 licenses → recognize 30%.
- zuora: Delivery / quantity events
- asc_refs: 606-10-25-31, 606-10-25-36
- a606_ids:
A606-P08,A606-C-measure_progress,A606-E-34 - revrec_today:
partial· next_build:ready· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·service-delivery— 16 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psdsmoke_case·packages/revlock-test-driver/src/__tests__/cases/serviceDelivery-by-baseProduct— serviceDelivery-by-baseProductsmoke_case·packages/revlock-test-driver/src/__tests__/cases/servicedelivery-base— servicedelivery-basecypress_gap·docs/revrec-scenarios/gaps/gap-revenue-delivery-date.md- notes: Strong smoke theme; delivery-date gap still open.
CAP-040 — Budgeted cost / budgeted hours events
- definition: Release revenue by % completed cost or hours (services/milestone proxy).
- example: TBD
- zuora: Budgeted cost / budgeted hours events
- asc_refs: 606-10-25-31, 606-10-25-36
- a606_ids:
A606-C-measure_progress - revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: Input methods for PS. Weak CB fit.
CAP-041 — POB dependencies
- definition: Release child PO when parent PO satisfied.
- example: TBD — support starts only after license delivered.
- zuora: POB dependencies
- asc_refs: 606-10-25-19
- a606_ids:
A606-C-distinct_25_19_21 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
none·—- notes: Interesting for hardware+SaaS; rare for pure CB SaaS.
CAP-042 — Upon Expiry release
- definition: Auto-release remaining after configured days from book/open date.
- example: TBD — breakage-adjacent auto-release after 24 months.
- zuora: Upon Expiry release
- asc_refs: 606-10-55-46, 606-10-55-47, 606-10-55-48
- a606_ids:
A606-C-breakage_55_46 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
none·—- notes: Useful for prepaid credits / breakage cousins.
CAP-043 — Consumption / usage POB templates
- definition: Usage/consumption recognition models (Consumption Ratable, PayGo, Usage Event).
- example: Metered API calls → recognize as usage arrives (constrained).
- zuora: Consumption / usage POB templates
- asc_refs: 606-10-32-5, 606-10-25-31
- a606_ids:
A606-P07,A606-C-variable_consideration_32_5,A606-E-21 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/cb-metered— cb-meteredcypress_gap·docs/revrec-scenarios/gaps/gap-domain-usage-metered.md- notes: cb-metered is narrow. Full PayGo/drawdown suite Enterprise-deep (see CAP-104).
CAP-044 — Daily vs partial monthly accounting method
- definition: Schedule granularity / proration knobs on PO method.
- example: True-days vs 30/360 vs inclusive end date.
- zuora: Daily vs partial monthly accounting method
- asc_refs: 606-10-25-31
- a606_ids:
A606-P09,A606-E-33 - revrec_today:
in_product· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·recognition-plan— 9 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/eight-year-plan-test— eight-year-plan-testsmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan— fixed-30x360-plansmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan-enddate-inclusive— fixed-30x360-plan-enddate-inclusivesmoke_case·packages/revlock-test-driver/src/__tests__/cases/fixed-30x360-plan-enddate-inclusive— fixed-30x360-plan-enddate-inclusive- notes: Proration calendars are a RevRec strength today.
Detail — 2.5 Billing / booking / events-based recognition modes
CAP-045 — Upon Booking (Full Booking Release)
- definition: Open from subscription = booking signal; optional full booking release policy.
- example: Recognize full booking amount when SO/sub collected (rare for prepaid SaaS).
- zuora: Upon Booking (Full Booking Release)
- asc_refs: 606-10-25-23
- a606_ids:
A606-P01,A606-C-five_steps - revrec_today:
partial· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·sales-orders— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios-salesorderitem— commission-scenarios-salesorderitemsmoke_case·packages/revlock-test-driver/src/__tests__/cases/invoice-salesorder-scenarios— invoice-salesorder-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/outOfSyncOrders-scenarios— outOfSyncOrders-scenariossmoke_tag·contract-term— 12 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocation- notes: Open path Foundation; full booking release as policy = Complete.
CAP-046 — Upon Billing (Billed Release)
- definition: Recognize billed % when invoice recorded — sibling to AR; invoices do not invent POs.
- example: Invoice 50% → release 50% of allocated revenue if billing-release policy on.
- zuora: Upon Billing (Billed Release)
- asc_refs: 606-10-25-23, 606-10-45-1
- a606_ids:
A606-P01,A606-E-40 - revrec_today:
partial· next_build:ready· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·billing-invoice— 26 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/444-voided-invoice— 444-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/445-voided-invoice— 445-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/billing-by-contract— billing-by-contractcypress_gap·docs/revrec-scenarios/gaps/gap-cypress-billing-all-disabled.md- notes: record_billing Foundation as AR. Billed-release recognition policy still thin.
CAP-047 — Upon Billing (Full Booking Release)
- definition: Total booking amount recognized when any bill collected (partial or full).
- example: TBD
- zuora: Upon Billing (Full Booking Release)
- asc_refs: 606-10-25-23
- a606_ids:
A606-P01 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·billing-invoice— 26 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/444-voided-invoice— 444-voided-invoicenone·—— no full-booking-on-any-bill policy smoke- notes: Policy variant; less common for ratable SaaS.
CAP-048 — Events-based recognition
- definition: Custom revenue/cost/hold events beyond CB delivery; upload + process.
- example: Manual “go-live” event releases implementation PO.
- zuora: Events-based recognition
- asc_refs: 606-10-25-31
- a606_ids:
A606-P08,A606-C-measure_progress - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·service-delivery— 16 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psdsmoke_case·packages/revlock-test-driver/src/__tests__/cases/serviceDelivery-by-baseProduct— serviceDelivery-by-baseProductsmoke_case·packages/revlock-test-driver/src/__tests__/cases/servicedelivery-base— servicedelivery-base- notes: Delivery Complete; generic event upload Enterprise-deep.
CAP-049 — Manual release
- definition: Operator-forced release of PO revenue.
- example: Finance releases held PO after audit sign-off.
- zuora: Manual release
- asc_refs: 606-10-25-23
- a606_ids:
A606-P11 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·pause-revenue— 1 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/pause-revenue— pause-revenuecypress_gap·docs/revrec-scenarios/gaps/gap-pause-revenue.md- notes: pause-revenue is the control sibling; manual release UX thin.
CAP-050 — Billing–Revenue Integration sync
- definition: Native upstream billing → extract → apply. Our Chargebee advantage vs Zuora Billing↔Revenue.
- example: Daily CB invoice/subscription sync → domain events.
- zuora: Billing–Revenue Integration sync
- asc_refs: —
- a606_ids:
A606-P01,A606-P12 - revrec_today:
in_product· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·billing-invoice— 26 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/444-voided-invoice— 444-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/445-voided-invoice— 445-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/billing-by-contract— billing-by-contractsmoke_tag·file-sync— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/splitfiles-by-version-zip— splitfiles-by-version-zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip— zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip-multifiles— zip-multifilessmoke_tag·contract-term— 12 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocation- notes: This is the whole point of Chargebee-native RevRec.
CAP-051 — Usage Sync (integrated)
- definition: Rated usage from Billing synced to trigger recognition/accrual.
- example: CB usage events → period recognition.
- zuora: Usage Sync (integrated)
- asc_refs: 606-10-32-5
- a606_ids:
A606-P07 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/cb-metered— cb-meteredcypress_gap·docs/revrec-scenarios/gaps/gap-domain-usage-metered.md- notes: Narrow path only today.
CAP-052 — Standalone manual upload
- definition: File/adapter ingest for migration & non-CB sources emitting same domain events.
- example: Zip of SO/invoice CSV → SourceAdapter → open/bill events.
- zuora: Standalone manual upload
- asc_refs: —
- a606_ids: —
- revrec_today:
in_product· next_build:ready· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·file-sync— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/splitfiles-by-version-zip— splitfiles-by-version-zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip— zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip-multifiles— zip-multifilessmoke_tag·sales-orders— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios-salesorderitem— commission-scenarios-salesorderitemsmoke_case·packages/revlock-test-driver/src/__tests__/cases/invoice-salesorder-scenarios— invoice-salesorder-scenarios- notes: Migration adapter Complete. Hotglue CSV byte-parity is Out as product bar.
Detail — 2.6 Close / continuous accounting / journals / reconciliation
CAP-053 — Continuous accounting
- definition: Reconcile throughout period; frequent recognize; not only month-end batch. Marketing + close dashboard at Zuora.
- example: Daily recognize job + mid-period trial balance view.
- zuora: Continuous accounting
- asc_refs: —
- a606_ids:
A606-P10 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·period-close— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-accounting-close— auto-accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/transactionDate_closeperiod— transactionDate_closeperiodsmoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappingssmoke_case·packages/revlock-test-driver/src/__tests__/cases/journal-diagnostics— journal-diagnostics- notes: Period recognize Foundation; near-continuous Complete.
CAP-054 — Close Process dashboard
- definition: Pre-close checks, exceptions, trial-balance-ish views, accounting analysis tabs.
- example: TBD — checklist: orphans, missing SSP, unposted schedules.
- zuora: Close Process dashboard
- asc_refs: —
- a606_ids: —
- revrec_today:
partial· next_build:needs_design· cb_facts:not_applicable· maturity:Foundation - evidence:
smoke_tag·period-close— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-accounting-close— auto-accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/transactionDate_closeperiod— transactionDate_closeperiodsmoke_tag·subledger-ac— 73 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-displaysmoke_case·packages/revlock-test-driver/src/__tests__/cases/subledger— subledgercypress_gap·docs/revrec-scenarios/gaps/gap-accounting-close.md- notes: Thin Foundation checks ready; full dashboard Complete. Not sourced from CB streams.
CAP-055 — Period-close template & task orchestration
- definition: Period state machine: soft close, reopen, lock; sequenced tasks.
- example: Soft-close P1 → reject late sync or PPA path; hard-close locks.
- zuora: Period-close template & task orchestration
- asc_refs: —
- a606_ids:
A606-P10 - revrec_today:
partial· next_build:ready· cb_facts:not_applicable· maturity:Foundation - evidence:
smoke_tag·period-close— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-accounting-close— auto-accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/transactionDate_closeperiod— transactionDate_closeperiodsmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-closecypress_gap·docs/revrec-scenarios/gaps/gap-accounting-close.md- notes: accounting-close exists (local_only). Soft/hard close gap still proposed.
CAP-056 — Netting process (CA/CL)
- definition: Calculate contract asset/liability net presentation; create accounting entries.
- example: Same contract: deferred 800 + unbilled 200 → net CL 600 presentation.
- zuora: Netting process (CA/CL)
- asc_refs: 606-10-45-1, 606-10-45-5
- a606_ids:
A606-C-contract_balances_45,A606-E-38,A606-E-39 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-item- notes: Balances exist; netting presentation incomplete.
CAP-057 — LT/ST reclassification process
- definition: Reclass CA/CL between long-term and short-term accounts for balance sheet.
- example: Deferred beyond 12 months → LT deferred liability.
- zuora: LT/ST reclassification process
- asc_refs: 606-10-45-1
- a606_ids:
A606-C-contract_balances_45 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/short-and-long-term-def-revenue/— untagged LT/ST if present- notes: Public company need. Smoke may exist untagged.
CAP-058 — Accounting transfer to GL
- definition: post_journals summarized/detail export to GL as revenue sub-ledger.
- example: Period JE CSV/API → NetSuite/Workday/AC.
- zuora: Accounting transfer to GL
- asc_refs: —
- a606_ids: —
- revrec_today:
in_product· next_build:ready· cb_facts:ac_only· maturity:Foundation - evidence:
smoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappingssmoke_case·packages/revlock-test-driver/src/__tests__/cases/journal-diagnostics— journal-diagnosticssmoke_case·packages/revlock-test-driver/src/__tests__/cases/journal-entries-custom-fields— journal-entries-custom-fieldssmoke_tag·export— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/continuous-export-revrec— continuous-export-revrecsmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-data— export-datasmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psd- notes: cb_facts=ac_only: transfer/posting often lands in Accounting Central sibling; RevRec owns amounts (ADR 0006).
CAP-059 — Manual journal entries (MJE)
- definition: Upload/post manual JEs with approval rules and SOB validation.
- example: TBD
- zuora: Manual journal entries (MJE)
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:ac_only· maturity:Enterprise-deep - evidence:
smoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappingsnone·—— no MJE approval smoke- notes: Mostly AC/close ops. Enterprise-deep.
CAP-060 — Sweep unposted schedules
- definition: Move unposted schedule lines to next period before close.
- example: TBD
- zuora: Sweep unposted schedules
- asc_refs: —
- a606_ids:
A606-P10 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·period-close— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-closenone·—— sweep not explicit- notes: Close-flow detail.
CAP-061 — Reporting summarization programs
- definition: Period snapshots for waterfall/history; current-period post summarize.
- example: Month-end snapshot feeds historical waterfall.
- zuora: Reporting summarization programs
- asc_refs: —
- a606_ids:
A606-C-contract_balances_45 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_tag·export— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/continuous-export-revrec— continuous-export-revrec- notes: Serve-layer snapshots Foundation-ish.
CAP-062 — Report reconciliation (automated in dashboard)
- definition: Cross-check Accounting Detail vs Revenue Insight, Waterfall, Rollforwards.
- example: Waterfall total = TB revenue account = RC rollforward activity.
- zuora: Report reconciliation (automated in dashboard)
- asc_refs: —
- a606_ids: —
- revrec_today:
partial· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·subledger-ac— 73 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-displaysmoke_case·packages/revlock-test-driver/src/__tests__/cases/subledger— subledgersmoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-order- notes: AC-heavy today; RevRec waterfall tie-out thin.
CAP-063 — Revenue holds & transfer holds
- definition: Block release and/or GL posting at contract/PO/line until cleared.
- example: Hold recognition on disputed contract; transfer hold blocks JE export.
- zuora: Revenue holds & transfer holds
- asc_refs: —
- a606_ids:
A606-P11 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·pause-revenue— 1 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/pause-revenue— pause-revenuecypress_gap·docs/revrec-scenarios/gaps/gap-pause-revenue.md- notes: Period lock is Foundation; holds Complete. pause-revenue is the quarry.
CAP-064 — RC / MJE approvals
- definition: Approval workflows before release or posting.
- example: TBD
- zuora: RC / MJE approvals
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: SOX-scale workflow.
Detail — 2.7 Audit / SOX / controls
CAP-065 — Audit Trail report
- definition: Immutable applied_events + config change log; drill event → balance → raw. Zuora claims 7-year retention.
- example: Show who changed SSP and which contracts reallocated.
- zuora: Audit Trail report
- asc_refs: —
- a606_ids: —
- revrec_today:
evidence_only· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/doc-audit-delete-flow/— untagged audit delete flow if present- notes: Design Foundation (applied_events). Smoke thin/untagged.
CAP-066 — Audit trail scope
- definition: Cover policies, SSP, books, roles, period ops — not just transactional events.
- example: TBD
- zuora: Audit trail scope
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
none·—- notes: Config audit Completeness.
CAP-067 — SOX report pack
- definition: Approvals, contract mod, role privileges, user access, SSP/VC changes, mass actions, holds, orphan lines, staging exceptions.
- example: TBD
- zuora: SOX report pack
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
smoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modificationsmoke_tag·period-close— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-close- notes: Full pack Enterprise-deep. Basic mod audit Complete (CAP-022).
CAP-068 — Granular authorization / role-based access
- definition: RBAC on functions, reports, dashboard tabs.
- example: TBD
- zuora: Granular authorization / role-based access
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
none·—- notes: Platform concern as much as RevRec domain.
CAP-069 — Segregation of duties
- definition: Finance subledger vs GL governance — RevRec owns recognition math; AC/GL posts.
- example: Recognition amounts computed in RevRec; AC cannot invent revenue.
- zuora: Segregation of duties (marketing)
- asc_refs: —
- a606_ids: —
- revrec_today:
evidence_only· next_build:ready· cb_facts:ac_only· maturity:Complete - evidence:
smoke_tag·subledger-ac— 73 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-displaysmoke_case·packages/revlock-test-driver/src/__tests__/cases/subledger— subledgersmoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappings- notes: Direction alignment with ADR 0006 / AC boundary. Marketing SoD claim → real boundary.
CAP-070 — Stage validation framework
- definition: Ingest/normalize validation exceptions (not RevPro stage tables). Capture and report bad lines.
- example: Invoice missing subscription_id → exception queue.
- zuora: Stage validation framework
- asc_refs: —
- a606_ids: —
- revrec_today:
evidence_only· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/doc-staging-validation/— if presentsmoke_tag·(untagged)— load-errors style cases- notes: Foundation ingest validation.
CAP-071 — Soft freeze on period close
- definition: Freeze writes that would corrupt close sequence during soft close.
- example: Soft-closed period rejects new invoices into that period (or routes to PPA).
- zuora: Soft freeze on period close
- asc_refs: —
- a606_ids:
A606-P10 - revrec_today:
partial· next_build:ready· cb_facts:not_applicable· maturity:Foundation - evidence:
smoke_tag·period-close— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/accounting-close— accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/auto-accounting-close— auto-accounting-closesmoke_case·packages/revlock-test-driver/src/__tests__/cases/transactionDate_closeperiod— transactionDate_closeperiodcypress_gap·docs/revrec-scenarios/gaps/gap-accounting-close.md- notes: Paired with CAP-055.
Detail — 2.8 Reporting / waterfalls / disclosures / RPO / trial balance
CAP-072 — Waterfall Report
- definition: Prior/current/future recognized + deferred/cost/forecast schedules; unsatisfied/partial PO timing.
- example: Columns: prior periods | current | future months of deferred release.
- zuora: Waterfall Report
- asc_refs: 606-10-45-1, 606-10-50-13
- a606_ids:
A606-C-contract_balances_45,A606-C-rpo_50_13,A606-P02 - revrec_today:
in_product· next_build:ready· cb_facts:derived_in_revrec· maturity:Foundation - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-itemcypress_gap·docs/revrec-scenarios/gaps/gap-order-waterfall-helper.md— order waterfall helper under-covered- notes: Foundation report. Helper gap exists but deferred-revenue quarry is strong.
CAP-073 — Historical Waterfall (13 periods)
- definition: Multi-period actual activity from a chosen historical period.
- example: TBD — 13-month trailing waterfall.
- zuora: Historical Waterfall (13 periods)
- asc_refs: —
- a606_ids:
A606-C-contract_balances_45 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenue- notes: Needs summarization snapshots (CAP-061).
CAP-074 — Billing Waterfall / Billing RollForward
- definition: Invoice-level contract liability balances and billed revenue rollforward — beginning billed/unearned, billings, recognition, ending. Distinct from pure recognition waterfall: ties invoice billing activity to deferred movements.
- example: Beginning unearned 10k + invoices 5k − recognized 3k = ending 12k at invoice grain.
- zuora: Billing Waterfall / Billing RollForward
- asc_refs: 606-10-45-1, 606-10-45-2
- a606_ids:
A606-C-contract_balances_45,A606-E-40,A606-P01 - revrec_today:
in_product· next_build:ready· cb_facts:from_billing· maturity:Complete - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/billingrollforward-scenarios— billingrollforward-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/billingrollforward-scenarios-by-so— billingrollforward-scenarios-by-sosmoke_tag·billing-invoice— includes billing rollforward cases- notes: Explicit smoke: packages/revlock-test-driver/src/tests/cases/billingrollforward-scenarios/ and billingrollforward-scenarios-by-so/. Zuora recon doc is the URL above. Keep this distinct from CAP-072 recognition waterfall.
CAP-075 — RC Rollforward
- definition: CA/CL beginning / activity / ending; GL reconciliation rollforward.
- example: CL begin + billings − revenue + adjustments = CL end.
- zuora: RC Rollforward
- asc_refs: 606-10-45-1
- a606_ids:
A606-C-contract_balances_45,A606-E-38 - revrec_today:
partial· next_build:ready· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-itemsmoke_tag·subledger-ac— 73 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-displaycypress_gap·docs/revrec-scenarios/gaps/gap-unearned-summary-rollforward.md- notes: Unearned summary rollforward gap. Related to CAP-074 billing RF.
CAP-076 — Trial Balance Report
- definition: Account balances in reporting currency; reconciles to rollforward/waterfall. Not sourced from Chargebee streams — derived from posted journals / subledger.
- example: Deferred revenue GL account balance = sum of CL schedules.
- zuora: Trial Balance Report
- asc_refs: —
- a606_ids: —
- revrec_today:
evidence_only· next_build:ready· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·subledger-ac— 73 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-displaysmoke_case·packages/revlock-test-driver/src/__tests__/cases/subledger— subledgersmoke_case·packages/revlock-test-driver/src/__tests__/cases/subledger-2— subledger-2smoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappings- notes: cb_facts=not_applicable: trial balance is a RevRec/AC report artifact, not a CB ingest fact. AC-heavy evidence today.
CAP-077 — Revenue Insight / Revenue Summary
- definition: PTD/QTD/YTD revenue activity with line detail.
- example: TBD
- zuora: Revenue Insight / Revenue Summary
- asc_refs: 606-10-50-5
- a606_ids:
A606-E-41 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/dashboard-revenue-api/— untagged dashboard API if presentsmoke_tag·mrr— MRR metrics adjacent- notes: Analytics surface Complete.
CAP-078 — ASC 606 disclosure — Prior/Current CL/CA
- definition: Revenue from prior/current period contract liability and contract asset categories.
- example: How much of this period’s revenue was in opening deferred.
- zuora: ASC 606 disclosure — Prior/Current CL/CA
- asc_refs: 606-10-50-8, 606-10-50-10
- a606_ids:
A606-C-contract_balances_45,A606-C-rpo_50_13 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-item- notes: Disclosure suite incomplete vs Zuora.
CAP-079 — Disclosure — Prior/Current satisfied POBs
- definition: Separate prior vs current period revenue at line level (catch-up aware).
- example: Catch-up from retrospective mod shown as prior-period satisfaction.
- zuora: Disclosure — Prior/Current satisfied POBs
- asc_refs: 606-10-50-8
- a606_ids:
A606-C-mod_termination_25_13,A606-P10 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·ppa— 7 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/journal-mapping-revenue-ppa-fallback— journal-mapping-revenue-ppa-fallbacksmoke_case·packages/revlock-test-driver/src/__tests__/cases/ppa— ppasmoke_case·packages/revlock-test-driver/src/__tests__/cases/ppa-alltests— ppa-alltestssmoke_tag·modification— 11 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-modification— contract-term-modification- notes: Needs catch-up maturity (CAP-014).
CAP-080 — Unsatisfied POB Balances (RPO proxy)
- definition: Remaining balances for unsatisfied/partially satisfied POs — Remaining Performance Obligations proxy.
- example: Open deferred + unbilled allocated = RPO-ish total.
- zuora: Unsatisfied POB Balances (RPO proxy)
- asc_refs: 606-10-50-13, 606-10-50-14, 606-10-50-15
- a606_ids:
A606-C-rpo_50_13,A606-E-42,A606-E-43 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-itemnone·—— A606-C-rpo_50_13 coverage=new- notes: Balances exist; formal RPO disclosure new in ASC catalog.
CAP-081 — Unreleased POB(s) Report
- definition: POs not fully released — operational exception list.
- example: Held / paused / delivery-pending POs.
- zuora: Unreleased POB(s) Report
- asc_refs: —
- a606_ids:
A606-P11,A606-P08 - revrec_today:
partial· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Complete - evidence:
smoke_tag·pause-revenue— 1 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/pause-revenue— pause-revenuesmoke_tag·service-delivery— 16 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psd- notes: Ops report.
CAP-082 — Track unbilled receivables
- definition: Unbilled AR / contract asset rollforward when performance precedes billing.
- example: Recognize before invoice → contract asset / unbilled.
- zuora: Track unbilled receivables
- asc_refs: 606-10-45-1, 606-10-45-3, 606-10-45-4
- a606_ids:
A606-P02,A606-E-39,A606-C-contract_balances_45 - revrec_today:
partial· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-ordersmoke_case·packages/revlock-test-driver/src/__tests__/cases/adjustment-for-unearned-revenue— adjustment-for-unearned-revenuesmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-by-item— deferred-by-itemsmoke_case·packages/revlock-test-driver/src/__tests__/cases/deferred-unbilled-by-item— deferred-unbilled-by-item- notes: Foundation aim; unbilled* cases exist. CB unbilled_charges Complete.
CAP-083 — VC Insight / VC Rollforward
- definition: Variable consideration activity and balances.
- example: TBD
- zuora: VC Insight / VC Rollforward
- asc_refs: 606-10-32-5, 606-10-32-11
- a606_ids:
A606-C-variable_consideration_32_5,A606-C-vc_constraint_32_11 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-variable-consideration.md- notes: Blocked on VC engine depth.
CAP-084 — Cost Insight / Cost Rollforward
- definition: Capitalized cost reporting (commissions, COGS amortization).
- example: Commission capitalized then amortized with revenue.
- zuora: Cost Insight / Cost Rollforward
- asc_refs: 340-40-25-1
- a606_ids:
A606-E-36 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Enterprise-deep - evidence:
smoke_tag·expense-commission— 14 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/autocreatessp-expense-scenarios— autocreatessp-expense-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios— commission-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios-salesorderitem— commission-scenarios-salesorderitemcypress_gap·docs/revrec-scenarios/gaps/gap-expense-commission.md- notes: Sibling pack / boundary with AC. Smoke exists; may ship separate from recognition core.
CAP-085 — Consumption Usage Waterfall
- definition: Usage revenue scheduled by period for consumption customers.
- example: TBD
- zuora: Consumption Usage Waterfall
- asc_refs: 606-10-32-5
- a606_ids:
A606-P07 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Enterprise-deep - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/cb-metered— cb-meteredcypress_gap·docs/revrec-scenarios/gaps/gap-domain-usage-metered.md- notes: Needs consumption suite.
CAP-086 — Forecast Revenue
- definition: Forecast templates / waterfall forecast data (future recognition projection).
- example: TBD
- zuora: Forecast Revenue
- asc_refs: —
- a606_ids:
A606-C-rpo_50_13 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
none·—- notes: Related to RPO / remaining schedule.
CAP-087 — Period FX Waterfall / Unbilled FX / Trial Balance FX
- definition: Multi-currency reporting and FX gain/loss analysis across waterfall/TB/unbilled.
- example: EUR contract reported in USD home currency with FX P&L.
- zuora: Period FX Waterfall / Unbilled FX / Trial Balance FX
- asc_refs: —
- a606_ids:
A606-E-32 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·multi-currency— 14 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/expense-multicurrency— expense-multicurrencysmoke_case·packages/revlock-test-driver/src/__tests__/cases/expense-multicurrency-1— expense-multicurrency-1smoke_case·packages/revlock-test-driver/src/__tests__/cases/forex— forex- notes: AC FX smoke strong; RevRec FX disclosure thin. Full FX waterfall suite Enterprise-deep.
CAP-088 — Disclosure Aggregation config
- definition: Second-level summarization fields for disclosure reports.
- example: TBD
- zuora: Disclosure Aggregation config
- asc_refs: 606-10-50-5
- a606_ids:
A606-E-41 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: Config knobs after core disclosures exist.
CAP-089 — 60+ pre-built reports (marketing)
- definition: Product-page claim for waterfalls, disclosures, VC, SOX dashboards. Outcome = finance-usable report set — not cloning Zuora report count.
- example: Core set: waterfall, billing RF, RC RF, TB, RPO, mod audit.
- zuora: 60+ pre-built reports (marketing)
- asc_refs: —
- a606_ids: —
- revrec_today:
partial· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·export— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/continuous-export-revrec— continuous-export-revrecsmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-data— export-datasmoke_case·packages/revlock-test-driver/src/__tests__/cases/export-psd— export-psdsmoke_tag·subledger-ac— 73 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/ac-custom-payment-method-display— ac-custom-payment-method-displaysmoke_tag·deferred-revenue— 22 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/adj-unearned-by-order— adj-unearned-by-order- notes: Complete = core set; Enterprise-deep = full catalog. Don’t chase “60+”.
Detail — 2.9 Integrations (billing, ERP, CPQ)
CAP-090 — Chargebee Billing ↔ Revenue (Zuora Billing↔Revenue twin)
- definition: Native Chargebee Billing ↔ RevRec adapter — equivalent outcome to Zuora Billing–Revenue Integration.
- example: subscriptions + invoices streams → open_contract / record_billing.
- zuora: Zuora Billing ↔ Revenue Integration
- asc_refs: —
- a606_ids:
A606-P01,A606-P03,A606-P12 - revrec_today:
in_product· next_build:ready· cb_facts:from_billing· maturity:Foundation - evidence:
smoke_tag·billing-invoice— 26 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/444-voided-invoice— 444-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/445-voided-invoice— 445-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/billing-by-contract— billing-by-contractsmoke_tag·contract-term— 12 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocation- notes: Our advantage. Same as CAP-050 outcome lens.
CAP-091 — CPQ / quote-to-cash
- definition: Quote impact / CPQ upstream into revenue contracts. CB CPQ/quotes not day-one contract path.
- example: TBD
- zuora: Zuora CPQ / quote-to-cash
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_catalog· maturity:Enterprise-deep - evidence:
none·—- notes: Later. Don’t invent contracts from quotes day one.
CAP-092 — NetSuite Revenue Inbound Connector
- definition: ERP orders/invoices inbound via optional SourceAdapter.
- example: TBD
- zuora: NetSuite Revenue Inbound Connector
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: Adapter pattern; same domain events.
CAP-093 — NetSuite GL Connector
- definition: JE → NetSuite GL.
- example: post_journals export to NetSuite.
- zuora: NetSuite GL Connector
- asc_refs: —
- a606_ids: —
- revrec_today:
evidence_only· next_build:ready· cb_facts:ac_only· maturity:Complete - evidence:
smoke_tag·journal-posting— 17 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/incorrect-journal-account-mappings— incorrect-journal-account-mappingssmoke_case·packages/revlock-test-driver/src/__tests__/cases/journal-diagnostics— journal-diagnosticssmoke_tag·export— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/continuous-export-revrec— continuous-export-revrec- notes: Reuse existing connector patterns; AC boundary.
CAP-094 — Workday Accounting Center Connector
- definition: JE / billing → Workday Accounting Center / Prism batches.
- example: TBD
- zuora: Workday Accounting Center Connector
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:ac_only· maturity:Complete - evidence:
smoke_tag·export— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/continuous-export-revrec— continuous-export-revrec- notes: Egress Complete when connector ships.
CAP-095 — Workday Financials GL Connector
- definition: Revenue JE transfer to Workday Financials.
- example: TBD
- zuora: Workday Financials GL Connector
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:ac_only· maturity:Complete - evidence:
smoke_tag·export— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/continuous-export-revrec— continuous-export-revrec- notes: Same family as CAP-094.
CAP-096 — Microsoft Dynamics 365 Connector
- definition: Enterprise GL path listed in Zuora entitlements.
- example: TBD
- zuora: Microsoft Dynamics 365 Connector
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:ac_only· maturity:Enterprise-deep - evidence:
none·—- notes: Enterprise-deep connector.
CAP-097 — Open APIs / SDK
- definition: Apply API + read APIs for contracts/schedules/journals; developer surface.
- example: POST /apply open_contract; GET contract schedules.
- zuora: Open APIs / SDK
- asc_refs: —
- a606_ids: —
- revrec_today:
partial· next_build:ready· cb_facts:not_applicable· maturity:Foundation - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/admin-apis/— admin-apiscypress_gap·docs/revrec-scenarios/gaps/gap-public-api-etl.md- notes: Foundation apply/read. Public API ETL gap noted.
CAP-098 — Standalone file upload (integration)
- definition: Migration / edge file SourceAdapter — same as CAP-052 lens for integrations catalog.
- example: See CAP-052.
- zuora: Standalone file upload
- asc_refs: —
- a606_ids: —
- revrec_today:
in_product· next_build:ready· cb_facts:not_applicable· maturity:Complete - evidence:
smoke_tag·file-sync— 3 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/splitfiles-by-version-zip— splitfiles-by-version-zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip— zipsmoke_case·packages/revlock-test-driver/src/__tests__/cases/zip-multifiles— zip-multifiles- notes: Duplicate inventory row from Zuora §2.9; keep for exhaustiveness.
CAP-099 — Salesforce / SAP (marketing FAQ)
- definition: CRM/ERP inbound examples from product FAQ — adapter candidates.
- example: TBD
- zuora: Salesforce / SAP (marketing FAQ)
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: Marketing list. SourceAdapter when needed.
Detail — 2.10 Advanced (multi-book, VC, cost, AI, simulations)
CAP-100 — Multi-book revenue accounting
- definition: Primary/secondary books (GAAP vs IFRS vs local); per-book period templates, LT/ST, transfer, Workbench view.
- example: TBD — Book A ASC 606, Book B IFRS 15 local.
- zuora: Multi-book revenue accounting
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: Single book Foundation. Multi-book Later.
CAP-101 — Revenue Book Comparison Report
- definition: Compare two books under ASC 606 / IFRS rules.
- example: TBD
- zuora: Revenue Book Comparison Report
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Enterprise-deep - evidence:
none·—- notes: Depends on CAP-100.
CAP-102 — Advanced Variable Consideration Analyzer
- definition: VC constraint / analyzer beyond basic TP adjustments — Zuora advanced use case.
- example: TBD
- zuora: Advanced Variable Consideration Analyzer
- asc_refs: 606-10-32-11, 606-10-32-12
- a606_ids:
A606-C-vc_constraint_32_11,A606-E-25 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-variable-consideration.md- notes: Distinct from CAP-005 fixed TP.
CAP-103 — Advanced SSP Analyzer
- definition: Historical SSP with optimizer/bands — same family as CAP-026.
- example: TBD
- zuora: Advanced SSP Analyzer
- asc_refs: 606-10-32-33
- a606_ids:
A606-C-allocation_ssp_32_28 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/ssp-analyzer— ssp-analyzer- notes: Inventory duplicate with CAP-026 (Zuora lists in both §2.3 and §2.10). Keep both for map exhaustiveness.
CAP-104 — Cost processing (COGS, commissions, rebates, accruals)
- definition: Capitalize/amortize incremental costs of obtaining/fulfilling; formula rules; follow-revenue or independent release. Often a sibling pack.
- example: Sales commission capitalized then amortized with SaaS PO.
- zuora: Cost processing (COGS, commissions, rebates, accruals)
- asc_refs: 340-40-25-1, 340-40-35-1
- a606_ids:
A606-E-36,A606-E-37 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Enterprise-deep - evidence:
smoke_tag·expense-commission— 14 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/autocreatessp-expense-scenarios— autocreatessp-expense-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios— commission-scenariossmoke_case·packages/revlock-test-driver/src/__tests__/cases/commission-scenarios-salesorderitem— commission-scenarios-salesorderitemcypress_gap·docs/revrec-scenarios/gaps/gap-expense-commission.md- notes: Domain purity note: may ship as separate capability pack from recognition core.
CAP-105 — Consumption revenue suite
- definition: Usage models, unbilled usage accrual, prepaid drawdown, usage tracking reports — full suite beyond basic metered.
- example: Prepaid credits drawdown + PayGo overage.
- zuora: Consumption revenue suite
- asc_refs: 606-10-32-5, 606-10-55-46
- a606_ids:
A606-P07,A606-C-breakage_55_46 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_case·packages/revlock-test-driver/src/__tests__/cases/cb-metered— cb-meteredcypress_gap·docs/revrec-scenarios/gaps/gap-domain-usage-metered.md- notes: Basic Complete; full suite Enterprise-deep.
CAP-106 — Financing / significant financing component
- definition: Financing accrual rollforward, insight, payment exception — significant financing component under ASC 606.
- example: Multi-year arrears payment with interest income split from revenue.
- zuora: Financing / significant financing component
- asc_refs: 606-10-32-15, 606-10-32-16
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:derived_in_revrec· maturity:Enterprise-deep - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-significant-financing.md- notes: Rare for pure SaaS. Explicit domain gap.
CAP-107 — Mass actions
- definition: Batch hold/release, re-allocate, close/open contracts.
- example: Hold all contracts for customer X pending dispute.
- zuora: Mass actions
- asc_refs: —
- a606_ids: —
- revrec_today:
not_in_product· next_build:needs_design· cb_facts:not_applicable· maturity:Complete - evidence:
none·—- notes: Ops scale Complete.
CAP-108 — Simulations / quote impact (marketing)
- definition: Pre-ledger GTM/pricing simulations before ledger impact. Not ASC subledger core.
- example: TBD
- zuora: Simulations / quote impact (marketing)
- asc_refs: —
- a606_ids: —
- revrec_today:
n_a· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
none·—— Out — GTM simulation not subledger- notes: Product choice Out.
CAP-109 — AI-assisted validations / SSP (marketing)
- definition: Product-page AI validation packaging. Deterministic validation + audit first.
- example: TBD
- zuora: AI-assisted validations / SSP (marketing)
- asc_refs: —
- a606_ids: —
- revrec_today:
n_a· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
none·—— Out- notes: Same stance as CAP-027.
CAP-110 — Dedicated shard / migration sandbox / managed services
- definition: Enterprise deployment & services entitlements — ops packaging, not domain model.
- example: TBD
- zuora: Dedicated shard / migration sandbox / managed services
- asc_refs: —
- a606_ids: —
- revrec_today:
n_a· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
none·—— Out — ops entitlement- notes: Not a domain capability.
Detail — ASC-only (weak/no Zuora twin)
CAP-111 — Contract existence / collectibility
- definition: ASC 606-10-25-1..7 contract criteria including collectibility. Soft collections / free trials. Weak Zuora “feature” twin — it’s Step 1 gatekeeping.
- example: Free trial with low collectibility → no contract until criteria met.
- zuora: (embedded in Step 1 / RC formation)
- asc_refs: 606-10-25-1, 606-10-25-2, 606-10-25-3, 606-10-25-4, 606-10-25-5, 606-10-25-6, 606-10-25-7, 606-10-55-3A
- a606_ids:
A606-C-contract_existence_25_1,A606-E-1,A606-E-4 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
none·—— A606 coverage=new- notes: High SaaS relevance; almost no smoke. Don’t bury under CAP-003 forever.
CAP-112 — Combining contracts
- definition: ASC 606-10-25-9 combine contracts entered at/near same time with single commercial objective / price interdependence.
- example: Two subs sold as package with interdependent pricing → one accounting contract.
- zuora: (no named twin)
- asc_refs: 606-10-25-9
- a606_ids:
A606-C-combine_contracts_25_9 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Enterprise-deep - evidence:
none·—- notes: Conflicts with naive 1-sub=1-contract. Policy later.
CAP-113 — Material rights (customer options)
- definition: Renewal/discount options that are material rights — allocate TP to the option PO.
- example: Renewal at 50% off if material right → allocate SSP to option; release on exercise/expiry.
- zuora: (no named twin)
- asc_refs: 606-10-55-41, 606-10-55-42, 606-10-55-43
- a606_ids:
A606-C-material_right_55_41,A606-E-49,A606-E-50,A606-E-51 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_catalog· maturity:Enterprise-deep - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-material-rights.md- notes: Explicit domain gap. No Zuora twin in §§2.1–2.10 as named capability.
CAP-114 — Nonrefundable upfront fees
- definition: Upfront fees that may be advance payment for future goods/services or a separate PO — ASC 606-10-55-50..
- example: Setup fee that is not distinct → defer and recognize with SaaS series.
- zuora: (no named twin)
- asc_refs: 606-10-55-50, 606-10-55-51
- a606_ids:
A606-C-upfront_fees_55_50,A606-E-53 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
none·—- notes: Common SaaS pattern; catalog marked new.
CAP-115 — Licensing IP / sales-based royalties
- definition: Functional vs symbolic IP licenses; sales-based royalty exception.
- example: Royalty recognized when later of sale occurrence / obligation satisfied.
- zuora: (no named twin)
- asc_refs: 606-10-55-54, 606-10-55-65
- a606_ids:
A606-C-licensing_55_54,A606-E-54,A606-E-60 - revrec_today:
not_in_product· next_build:out· cb_facts:not_applicable· maturity:Out - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-royalty-ip.md- notes: Mostly out of CB SaaS RevRec core. Gap filed for honesty.
CAP-116 — Principal versus agent
- definition: Gross vs net presentation when arranging for goods/services (marketplace).
- example: Agent books net commission only; principal books gross.
- zuora: (no named twin)
- asc_refs: 606-10-55-36, 606-10-55-37, 606-10-55-38, 606-10-55-39, 606-10-55-40
- a606_ids:
A606-C-principal_agent_55_36,A606-E-45,A606-E-46 - revrec_today:
evidence_only· next_build:needs_design· cb_facts:from_catalog· maturity:Complete - evidence:
cypress_gap·docs/revrec-scenarios/gaps/gap-domain-principal-agent.mdsmoke_case·packages/revlock-test-driver/src/__tests__/cases/pass-through-product/— thin pass-through- notes: pass-through-product is thin. Need explicit principal/agent goldens.
CAP-117 — Breakage (unexercised rights)
- definition: Customers’ unexercised rights — estimate breakage and recognize as revenue when likelihood remote of exercise / proportional.
- example: Prepaid credits unused → breakage revenue.
- zuora: (related Upon Expiry / consumption)
- asc_refs: 606-10-55-46, 606-10-55-47, 606-10-55-48, 606-10-55-49
- a606_ids:
A606-C-breakage_55_46 - revrec_today:
not_in_product· next_build:needs_design· cb_facts:from_billing· maturity:Enterprise-deep - evidence:
none·—- notes: Weak Zuora twin via expiry/consumption; ASC constraint is first-class.
CAP-118 — Right of return / refund liability
- definition: Sale with right of return — refund liability + asset for recovery. CN policies are partial twin.
- example: Expected returns → constrain revenue; refund liability.
- zuora: (partial via CN / returns mods)
- asc_refs: 606-10-55-22, 606-10-55-23, 606-10-55-24, 606-10-55-25, 606-10-55-26, 606-10-55-27, 606-10-55-28, 606-10-55-29
- a606_ids:
A606-C-right_of_return_55_22,A606-E-22,A606-P04,A606-P12 - revrec_today:
partial· next_build:needs_design· cb_facts:from_billing· maturity:Complete - evidence:
smoke_tag·credit-note— 10 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-cn-allocation— contract-term-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/contract-term-disable-cn-allocation— contract-term-disable-cn-allocationsmoke_case·packages/revlock-test-driver/src/__tests__/cases/credit-note-by-backlog— credit-note-by-backlogsmoke_tag·voided-invoice— 6 casessmoke_case·packages/revlock-test-driver/src/__tests__/cases/444-voided-invoice— 444-voided-invoicesmoke_case·packages/revlock-test-driver/src/__tests__/cases/445-voided-invoice— 445-voided-invoice- notes: CN/void cover refund mechanics; formal return asset/liability model thin.
3. ASC-only constraints with weak/no Zuora twin
These are first-class ASC 606 product obligations that do not show up as clean named rows in Zuora §§2.1–2.10 (or only as buried Step-1 / expiry / CN cousins). Kept as CAP-111…CAP-118 so they don’t get lost under “Step 1” forever.
| id | name | asc_refs | a606 | revrec_today | next_build | maturity | why weak Zuora twin |
|---|---|---|---|---|---|---|---|
CAP-111 |
Contract existence / collectibility | 606-10-25-1, 606-10-25-2, 606-10-25-3, 606-10-25-4, 606-10-25-5, 606-10-25-6, 606-10-25-7, 606-10-55-3A | A606-C-contract_existence_25_1, A606-E-1, A606-E-4 |
not_in_product |
needs_design |
Complete |
High SaaS relevance; almost no smoke. Don’t bury under CAP-003 forever. |
CAP-112 |
Combining contracts | 606-10-25-9 | A606-C-combine_contracts_25_9 |
not_in_product |
needs_design |
Enterprise-deep |
Conflicts with naive 1-sub=1-contract. Policy later. |
CAP-113 |
Material rights (customer options) | 606-10-55-41, 606-10-55-42, 606-10-55-43 | A606-C-material_right_55_41, A606-E-49, A606-E-50 |
not_in_product |
needs_design |
Enterprise-deep |
Explicit domain gap. No Zuora twin in §§2.1–2.10 as named capability. |
CAP-114 |
Nonrefundable upfront fees | 606-10-55-50, 606-10-55-51 | A606-C-upfront_fees_55_50, A606-E-53 |
not_in_product |
needs_design |
Complete |
Common SaaS pattern; catalog marked new. |
CAP-115 |
Licensing IP / sales-based royalties | 606-10-55-54, 606-10-55-65 | A606-C-licensing_55_54, A606-E-54, A606-E-60 |
not_in_product |
out |
Out |
Mostly out of CB SaaS RevRec core. Gap filed for honesty. |
CAP-116 |
Principal versus agent | 606-10-55-36, 606-10-55-37, 606-10-55-38, 606-10-55-39, 606-10-55-40 | A606-C-principal_agent_55_36, A606-E-45, A606-E-46 |
evidence_only |
needs_design |
Complete |
pass-through-product is thin. Need explicit principal/agent goldens. |
CAP-117 |
Breakage (unexercised rights) | 606-10-55-46, 606-10-55-47, 606-10-55-48, 606-10-55-49 | A606-C-breakage_55_46 |
not_in_product |
needs_design |
Enterprise-deep |
Weak Zuora twin via expiry/consumption; ASC constraint is first-class. |
CAP-118 |
Right of return / refund liability | 606-10-55-22, 606-10-55-23, 606-10-55-24, 606-10-55-25, 606-10-55-26, 606-10-55-27, 606-10-55-28, 606-10-55-29 | A606-C-right_of_return_55_22, A606-E-22, A606-P04 |
partial |
needs_design |
Complete |
CN/void cover refund mechanics; formal return asset/liability model thin. |
Also watch ASC catalog new / domain gaps even when a Zuora twin exists: VC constraint, RPO disclosures, ramp pricing, usage beyond cb-metered.
4. RevRec evidence index (smoke tag → CAP ids)
Tags from revanu docs/revrec-scenarios/index.json. Mapping is policy quarry, not Hotglue sheet parity.
| smoke tag | case count (approx) | CAP ids |
|---|---|---|
(untagged) |
122 | CAP-001, CAP-070 |
subledger-ac |
73 | CAP-010, CAP-054, CAP-062, CAP-069, CAP-075, CAP-076, CAP-089 |
billing-invoice |
26 | CAP-011, CAP-046, CAP-047, CAP-050, CAP-074, CAP-090 |
deferred-revenue |
22 | CAP-007, CAP-011, CAP-018, CAP-056, CAP-061, CAP-062, CAP-072, CAP-073, CAP-075, CAP-078, CAP-080, CAP-082, CAP-089 |
journal-posting |
17 | CAP-007, CAP-053, CAP-058, CAP-059, CAP-069, CAP-076, CAP-093 |
service-delivery |
16 | CAP-035, CAP-037, CAP-039, CAP-048, CAP-081 |
expense-commission |
14 | CAP-084, CAP-104 |
multi-currency |
14 | CAP-087 |
contract-term |
12 | CAP-003, CAP-012, CAP-045, CAP-050, CAP-090 |
modification |
11 | CAP-009, CAP-012, CAP-013, CAP-014, CAP-015, CAP-020, CAP-022, CAP-067, CAP-079 |
credit-note |
10 | CAP-005, CAP-009, CAP-118 |
recognition-plan |
9 | CAP-004, CAP-007, CAP-035, CAP-036, CAP-044 |
ppa |
7 | CAP-014, CAP-079 |
sales-orders |
7 | CAP-001, CAP-003, CAP-045, CAP-052 |
ssp |
7 | CAP-006, CAP-024, CAP-025, CAP-026, CAP-030, CAP-034 |
export |
6 | CAP-058, CAP-061, CAP-089, CAP-093, CAP-094, CAP-095 |
voided-invoice |
6 | CAP-118 |
file-sync |
3 | CAP-001, CAP-050, CAP-052, CAP-098 |
period-close |
3 | CAP-053, CAP-054, CAP-055, CAP-060, CAP-067, CAP-071 |
termination |
3 | CAP-019 |
mrr |
2 | CAP-005, CAP-077 |
pause-revenue |
1 | CAP-009, CAP-049, CAP-063, CAP-081 |
Priority quarry fixtures (from gap matrix)
| Priority | Smoke case | CAP gravity |
|---|---|---|
| 1 | simple-mod |
CAP-012, CAP-015 |
| 2 | plan-types |
CAP-007, CAP-036, CAP-044 |
| 3 | contract-term-modification |
CAP-012, CAP-013 |
| 4 | deferred-revenue-adj |
CAP-011, CAP-072, CAP-075 |
| 5 | prospective-modification |
CAP-015, CAP-014 |
| — | billingrollforward-scenarios (+ -by-so) |
CAP-074 |
| — | cb-metered |
CAP-043, CAP-051, CAP-105 |
| — | pause-revenue |
CAP-049, CAP-063 |
5. Gaps / not_in_product high-value backlog
Candid cut: high SaaS / Chargebee relevance, missing or thin evidence, Next can host (ready or needs_design). Not the full Enterprise-deep zoo.
| id | name | revrec_today | next_build | maturity | why it matters | gap pointer |
|---|---|---|---|---|---|---|
CAP-023 |
Ramp contracts | not_in_product |
needs_design |
Complete |
CB ramps/IBM; ASC TP over time | gap-domain-ramp-pricing |
CAP-031 |
Ramp allocation | not_in_product |
needs_design |
Complete |
Pairs with ramp contracts | gap-domain-ramp-pricing |
CAP-014 |
Retrospective catch-up | partial |
needs_design |
Complete |
25-13(b); E-8 still new | modification + ppa tags |
CAP-006 |
SSP allocate multi-PO | partial |
ready |
Foundation |
Chargebee markets multi-PO | gap-revenue-allocation-strategy / ssp |
CAP-030 |
Relative SSP allocation | partial |
ready |
Foundation |
Same as above | gap-cypress-ssp-reallocation-ui |
CAP-046 |
Upon Billing release | partial |
ready |
Complete |
Marketing claim; AR path exists | gap-cypress-billing-all-disabled |
CAP-043 |
Usage POB templates | partial |
needs_design |
Complete |
Usage merchants | gap-domain-usage-metered |
CAP-051 |
Usage Sync | partial |
needs_design |
Complete |
CB usage → recognize | gap-domain-usage-metered |
CAP-039 |
Delivery / qty events | partial |
ready |
Complete |
PSD / proportional | gap-revenue-delivery-date |
CAP-056 |
CA/CL netting | partial |
needs_design |
Complete |
Balance sheet presentation | deferred-revenue |
CAP-075 |
RC Rollforward | partial |
ready |
Complete |
Close / GL recon | gap-unearned-summary-rollforward |
CAP-080 |
RPO / unsatisfied POB | partial |
needs_design |
Complete |
Disclosure; A606-C-rpo new | — |
CAP-078 |
Prior/Current CL/CA disclosure | partial |
needs_design |
Complete |
ASC 606 disclosure suite | — |
CAP-063 |
Revenue / transfer holds | evidence_only |
needs_design |
Complete |
Ops control | gap-pause-revenue |
CAP-111 |
Collectibility / contract existence | not_in_product |
needs_design |
Complete |
Free trial / soft collect | A606-C-contract_existence |
CAP-113 |
Material rights | not_in_product |
needs_design |
Enterprise-deep |
Renewal options | gap-domain-material-rights |
CAP-114 |
Upfront fees | not_in_product |
needs_design |
Complete |
Setup fees SaaS | A606-C-upfront_fees |
CAP-116 |
Principal vs agent | evidence_only |
needs_design |
Complete |
Marketplace | gap-domain-principal-agent |
CAP-102 |
VC Analyzer / constraint | not_in_product |
needs_design |
Enterprise-deep |
Usage + contingent fees | gap-domain-variable-consideration |
CAP-105 |
Consumption suite | partial |
needs_design |
Complete |
PayGo / drawdown | gap-domain-usage-metered |
CAP-054 |
Close dashboard | partial |
needs_design |
Foundation |
Finance close UX | gap-accounting-close |
CAP-062 |
Automated report recon | partial |
needs_design |
Complete |
TB ↔ waterfall ↔ RF | subledger-ac |
CAP-022 |
Mod SOX report | not_in_product |
needs_design |
Complete |
Auditability | — |
CAP-034 |
SSP exception reporting | not_in_product |
needs_design |
Complete |
Close blocker list | ssp |
CAP-087 |
FX waterfall suite | partial |
needs_design |
Complete |
MC merchants | multi-currency |
CAP-106 |
Significant financing | not_in_product |
needs_design |
Enterprise-deep |
Rare but ASC-real | gap-domain-significant-financing |
Out on purpose (don’t put on the build board as “missing”)
| id | name | why Out |
|---|---|---|
CAP-002 |
Data collection / RC formation | Outcome via Contract from subscription. Matrix marks Out. Do not build Zuora collect/RC-template machinery. |
CAP-027 |
AI-assisted SSP modeling | Deterministic SSP library first. AI packaging outside ASC core. |
CAP-029 |
SSP hierarchy on RC template | Outcome via SSP policy on PO/product. |
CAP-108 |
Simulations / quote impact (marketing) | Product choice Out. |
CAP-109 |
AI-assisted validations / SSP (marketing) | Same stance as CAP-027. |
CAP-110 |
Dedicated shard / migration sandbox / managed services | Not a domain capability. |
CAP-115 |
Licensing IP / sales-based royalties | Mostly out of CB SaaS RevRec core. Gap filed for honesty. |
6. Glossary of report terms
| Term | Plain meaning | Zuora / ASC pointer |
|---|---|---|
| Waterfall | Schedule view of revenue (and often deferred) across prior / current / future periods — when money is recognized over time. | Waterfall reconciliation · CAP-072 |
| Historical waterfall | Same idea over a chosen multi-period window (e.g. 13 periods of actuals). | Overview of reports · CAP-073 |
| Billing Waterfall / Billing RollForward | Invoice-grain rollforward of billed / unearned / recognized — ties billing activity to CL movement. Not the same as recognition waterfall. | Billing Waterfall report · CAP-074 · smoke billingrollforward-scenarios |
| RC Rollforward | Beginning / activity / ending for contract asset & contract liability (and recon to GL). | Overview of reports · CAP-075 |
| Trial Balance | Account balances from the revenue subledger / journals; should recon to waterfall & rollforward. Not a Chargebee stream. | Trial Balance report · CAP-076 |
| RPO | Remaining Performance Obligations — transaction price allocated to unsatisfied (or partially satisfied) POs. Disclosure under ASC 606-10-50-13. | ASC 606-10-50-13 · CAP-080 · A606-C-rpo_50_13 |
| Contract liability (CL) / deferred revenue | Obligation to transfer goods/services for which customer has paid (or payment due) before performance. | ASC 606-10-45 · CAP-011 · CAP-078 |
| Contract asset (CA) / unbilled | Right to consideration for performance completed before unconditional receivable (often before invoice). | ASC 606-10-45 · CAP-082 · A606-P02 |
| SSP | Standalone selling price — basis for allocating TP to POs (relative SSP). | ASC 606-10-32-28..34 · SSP setup · CAP-006 / CAP-024–034 |
| RSSP | Residual SSP — residual method when observable SSP missing. | Residual SSP · CAP-028 |
| Variable consideration (VC) | Discounts, rebates, usage, bonuses, etc. estimated then constrained. | ASC 606-10-32-5..14 · CAP-005 · CAP-102 |
| POB / PO | Performance obligation — distinct good or service (or series). | ASC 606-10-25-14..22 · CAP-004 |
| Prospective vs retrospective mod | Prospective: closed amounts stay; remaining reallocated forward. Retrospective: cumulative catch-up. | ASC 606-10-25-13 · Accounting treatments · CAP-014 / CAP-015 |
| Netting (CA/CL) | Present contract asset and liability net when they arise from the same contract (presentation). | CAP-056 |
| LT/ST reclass | Split long-term vs short-term CA/CL for balance sheet. | LT/ST overview · CAP-057 |
| Continuous accounting | Recognize/reconcile through the period, not only at month-end batch. | Close dashboard · CAP-053 |
| Transfer accounting / JE | Post revenue subledger journals to GL (detail or summary). | Transfer accounting · CAP-058 |
Changelog
| Date | Change |
|---|---|
| 2026-07-31 | Initial STAR master: 110 Zuora + 8 ASC-only CAP rows; JSON companion |