{
  "standard": "SoF Standard Definitions",
  "edition": "Customer revenue metrics",
  "version": "1.0",
  "stamp": "sof-v1.0",
  "versionDate": "2026-09-18",
  "url": "https://www.strategyoffinance.com/standards/",
  "license": "Free to adopt and cite with attribution to Strategy of Finance.",
  "groups": [
    {
      "id": "foundations",
      "label": "Foundations"
    },
    {
      "id": "movement",
      "label": "Movement and retention"
    },
    {
      "id": "structure",
      "label": "Structure and quality"
    }
  ],
  "terms": [
    {
      "slug": "the-measured-unit",
      "order": 1,
      "group": "foundations",
      "title": "Customer — the measured unit",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/the-measured-unit/",
      "standard": "Every customer metric is measured on the resolved parent entity — the commercial relationship — not on the billing identifier that happens to appear in the revenue file. Comped and 100%-free customers are excluded from revenue and logo metrics alike.",
      "plain": "A customer is the commercial relationship, resolved from its billing accounts, and only paying customers are counted.",
      "summary": "Every customer metric is measured on the resolved parent entity, not the billing identifier. Comped customers are excluded from revenue and logo metrics alike.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "customer = the resolved parent entity behind one or more billing identifiers",
        "unit": "count (logos)",
        "bounded": "n/a",
        "defaults": "comped excluded (locked) · related-party flagged, not excluded",
        "lever": "Where the parent boundary is drawn — one relationship read as four accounts inflates logo churn and new business at once",
        "readWith": [
          "concentration",
          "acv-and-arpa"
        ],
        "appearsIn": [
          "Logo counts",
          "Data-room customer list",
          "Concentration schedule"
        ]
      },
      "stateIt": {
        "template": "{N} customers (SoF Standard v1.0: resolved parent entities · comped excluded · related-party flagged)",
        "checks": [
          "Identifiers mapped to parents, and the mapping versioned?",
          "Comped and $0 customers excluded from counts and revenue?",
          "Related-party customers flagged?",
          "The same customer count used in ARPA, concentration and churn?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/the-measured-unit.csv",
      "aliases": [
        "Customer definition",
        "Entity resolution",
        "Resolved parent entity"
      ],
      "topics": [
        "ma",
        "modern-finance-function"
      ],
      "related": [
        "revenue-types",
        "monthly-recurring-revenue",
        "concentration"
      ],
      "configKeys": [
        {
          "key": "exclude_comped",
          "default": "true",
          "locked": true,
          "note": null
        }
      ],
      "configNote": null
    },
    {
      "slug": "revenue-types",
      "order": 2,
      "group": "foundations",
      "title": "Revenue types",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/revenue-types/",
      "standard": "Every revenue line carries exactly one type from a closed seven-value enumeration. Only recurringsubscription contributes to MRR. A line whose type cannot be determined is not guessed — the computation stops, or the type is resolved by a person and the resolution is logged.",
      "plain": "Only committed subscription revenue is recurring. Usage, services and one-time fees are real revenue, but never MRR.",
      "summary": "Every revenue line carries one of seven locked types. Only recurring subscription revenue becomes MRR; a type that cannot be determined is never guessed.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "MRR = Σ lines typed recurring_subscription; every other type stays out",
        "unit": "classification (7 types)",
        "bounded": "closed enumeration",
        "defaults": "7 locked types · a file with no type column stops and asks",
        "lever": "Typing usage or services as recurring — the worked example's ARR moves from 72,000 to 120,000",
        "readWith": [
          "monthly-recurring-revenue",
          "annual-recurring-revenue",
          "net-revenue-retention"
        ],
        "appearsIn": [
          "ARR build",
          "Revenue schedule",
          "Tie-out"
        ]
      },
      "stateIt": {
        "template": "Recurring revenue {x} (SoF Standard v1.0: recurring_subscription only · usage included in retention, excluded from MRR · credits typed, not netted)",
        "checks": [
          "Every line carries exactly one type?",
          "Services and one-time fees excluded from MRR?",
          "Usage typed separately, with its retention treatment stated?",
          "Credits and refunds typed, not netted into subscription?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/revenue-types.csv",
      "aliases": [
        "Revenue classification",
        "Recurring vs non-recurring revenue"
      ],
      "topics": [
        "fpa",
        "ma"
      ],
      "related": [
        "monthly-recurring-revenue",
        "annual-recurring-revenue",
        "net-revenue-retention",
        "the-register"
      ],
      "configKeys": [],
      "configNote": "Enumeration (LOCKED): recurringsubscription · usage · services · onetime · transactional · creditrefund · othernonrecurring"
    },
    {
      "slug": "monthly-recurring-revenue",
      "order": 3,
      "group": "foundations",
      "title": "Monthly recurring revenue",
      "shortName": "MRR",
      "url": "https://www.strategyoffinance.com/standards/monthly-recurring-revenue/",
      "standard": "MRR is the month-end recurring run rate of a resolved customer: subscription revenue normalized to a monthly rate, held through qualifying pauses, stated in base currency. It is a state, not a flow — and it is deliberately not the same number as recognized revenue.",
      "plain": "MRR is what a customer's subscription pays per month, taken at month end, if nothing changes.",
      "summary": "MRR is the month-end recurring run rate of a resolved customer: a state, not a flow, held through qualifying pauses and distinct from recognized revenue.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "MRR = the month-end recurring rate, normalized to monthly, held through qualifying pauses",
        "unit": "currency per month",
        "bounded": "≥ 0",
        "defaults": "3-month reactivation window · comped excluded (locked) · monthly-average FX",
        "lever": "Reading an ARR-basis export as monthly — overstates MRR twelvefold",
        "readWith": [
          "annual-recurring-revenue",
          "revenue-types",
          "revenue-tie-out"
        ],
        "appearsIn": [
          "MRR build",
          "Board deck",
          "MRR bridge"
        ]
      },
      "stateIt": {
        "template": "MRR {x} (SoF Standard v1.0: month-end run rate · subscription only · 3-month pause window)",
        "checks": [
          "Amount basis and period grain declared, not inferred?",
          "Annual invoices normalized to monthly, not spiked?",
          "Month-end rate used for mid-month changes?",
          "Pauses within the window held, and logged?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/monthly-recurring-revenue.csv",
      "aliases": [
        "MRR",
        "Recurring run rate"
      ],
      "topics": [
        "fpa",
        "modern-finance-function"
      ],
      "related": [
        "revenue-types",
        "annual-recurring-revenue",
        "pause-vs-churn",
        "revenue-tie-out"
      ],
      "configKeys": [
        {
          "key": "reactivation_window_months",
          "default": "3",
          "locked": false,
          "note": null
        },
        {
          "key": "exclude_comped",
          "default": "true",
          "locked": true,
          "note": null
        }
      ],
      "configNote": null
    },
    {
      "slug": "annual-recurring-revenue",
      "order": 4,
      "group": "foundations",
      "title": "Annual recurring revenue",
      "shortName": "ARR",
      "url": "https://www.strategyoffinance.com/standards/annual-recurring-revenue/",
      "standard": "ARR is in-month MRR × 12. It is a restatement of the current run rate, not a forecast, not a sum of the trailing twelve months, and not the value of the contract book.",
      "plain": "ARR is this month's MRR times twelve: a run rate, not a forecast and not last year's revenue.",
      "summary": "ARR is in-month MRR multiplied by twelve: a restatement of the current run rate, not a forecast, not trailing revenue, and not the value of the contract book.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "ARR = MRR × 12",
        "unit": "currency per year",
        "bounded": "≥ 0",
        "defaults": "run_rate basis · committed ARR and contracted-not-yet-live reported separately",
        "lever": "Adding signed-but-unreached ramp steps or not-yet-live contracts — 120,000 becomes 204,000 in the worked example",
        "readWith": [
          "monthly-recurring-revenue",
          "revenue-tie-out",
          "concentration"
        ],
        "appearsIn": [
          "Headline metric",
          "Valuation multiple",
          "Covenant"
        ]
      },
      "stateIt": {
        "template": "ARR {x} (SoF Standard v1.0: run-rate · MRR × 12 · usage excluded · net of discounts)",
        "checks": [
          "Run-rate, not committed or contracted-not-yet-live?",
          "Usage excluded, or the figure labelled usage-inclusive?",
          "The month chosen sits on the trend, not a peak?",
          "Net of discounts?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/annual-recurring-revenue.csv",
      "aliases": [
        "ARR",
        "Run-rate ARR",
        "Committed ARR",
        "Contracted not yet live"
      ],
      "topics": [
        "fpa",
        "ipo-readiness"
      ],
      "related": [
        "monthly-recurring-revenue",
        "revenue-types",
        "revenue-tie-out",
        "concentration"
      ],
      "configKeys": [
        {
          "key": "arr_basis",
          "default": "run_rate",
          "locked": false,
          "note": "alternative contractacv"
        }
      ],
      "configNote": null
    },
    {
      "slug": "movement-taxonomy",
      "order": 5,
      "group": "movement",
      "title": "The movement taxonomy",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/movement-taxonomy/",
      "standard": "Every month-over-month change in a customer's MRR is classified as exactly one of five movements — new, expansion, contraction, churn, reactivation — signed so that opening MRR plus all movements equals closing MRR, by construction.",
      "plain": "Every change in a customer's MRR is exactly one of five movements, and they add up to the closing balance without a plug.",
      "summary": "Every month-over-month change in a customer’s MRR is exactly one of five movements, signed so that opening plus movements equals closing by construction.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "closing = opening + new + expansion + reactivation + contraction + churn",
        "unit": "currency per month",
        "bounded": "identity holds exactly",
        "defaults": "5 locked types · net per customer-month · sub-tags cross_sell, ramp_step, fx_driven",
        "lever": "The reactivation window — decides whether a gap is a pause or a churn-and-reactivation pair",
        "readWith": [
          "pause-vs-churn",
          "growth-accounting",
          "foreign-exchange"
        ],
        "appearsIn": [
          "MRR bridge",
          "Board deck",
          "Growth accounting"
        ]
      },
      "stateIt": {
        "template": "Bridge {opening} → {closing} (SoF Standard v1.0: five movements · net per customer · reactivation separate from new)",
        "checks": [
          "Opening + movements = closing exactly, with no reconciling line?",
          "Reactivation shown separately from new?",
          "Contraction shown separately from churn?",
          "FX-driven movements sub-totalled?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/movement-taxonomy.csv",
      "aliases": [
        "MRR bridge",
        "Revenue bridge",
        "MRR movements",
        "New, expansion, contraction, churn, reactivation"
      ],
      "topics": [
        "fpa"
      ],
      "related": [
        "pause-vs-churn",
        "growth-accounting",
        "foreign-exchange"
      ],
      "configKeys": [],
      "configNote": "Movement types (LOCKED): new · expansion · contraction · churn · reactivation"
    },
    {
      "slug": "pause-vs-churn",
      "order": 6,
      "group": "movement",
      "title": "Pause, churn, and the reactivation window",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/pause-vs-churn/",
      "standard": "A completed billing gap no longer than the reactivation window is a pause: MRR is held at the pre-gap level and no movements are recorded. A completed gap longer than the window is churn at the gap start, reactivation on return. A gap still open at the data cutoff is right-censored and governed separately.",
      "plain": "A short billing gap that closes is a pause. A long one is churn and a win-back. A gap still open at the cutoff is judged separately.",
      "summary": "A billing gap within the reactivation window is a pause with MRR held; a longer gap is churn then reactivation; an open gap at the cutoff is right-censored.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "gap within the window → pause, MRR held · gap beyond the window → churn at the gap start, reactivation on return · gap open at the cutoff → trailing-gap policy",
        "unit": "months",
        "bounded": "n/a",
        "defaults": "reactivation_window_months = 3 · trailing_gap_policy = churn_at_gap_start",
        "lever": "The window — lengthening it converts churn-and-return pairs into pauses and lifts retention by construction",
        "readWith": [
          "monthly-recurring-revenue",
          "churn-analytics",
          "the-register"
        ],
        "appearsIn": [
          "Churn schedule",
          "Retention basis",
          "Register"
        ]
      },
      "stateIt": {
        "template": "Churn recognized under a 3-month reactivation window; gaps open at the cutoff treated as churn (SoF Standard v1.0)",
        "checks": [
          "Window stated, and no longer than the billing cycle it absorbs?",
          "Right-censored customers listed by name?",
          "Pauses logged as assumptions with the held amount?",
          "The same window used in MRR, churn and NRR?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/pause-vs-churn.csv",
      "aliases": [
        "Reactivation window",
        "Win-back",
        "Billing gap treatment",
        "Right-censored churn"
      ],
      "topics": [
        "fpa",
        "ma"
      ],
      "related": [
        "monthly-recurring-revenue",
        "movement-taxonomy",
        "churn-analytics",
        "the-register"
      ],
      "configKeys": [
        {
          "key": "reactivation_window_months",
          "default": "3",
          "locked": false,
          "note": null
        },
        {
          "key": "trailing_gap_policy",
          "default": "churn_at_gap_start",
          "locked": false,
          "note": "alternative holdaspaused"
        }
      ],
      "configNote": null
    },
    {
      "slug": "net-revenue-retention",
      "order": 7,
      "group": "movement",
      "title": "Net revenue retention",
      "shortName": "NRR",
      "url": "https://www.strategyoffinance.com/standards/net-revenue-retention/",
      "standard": "NRR measures what a fixed set of customers is worth now versus what it was worth then, expansion included and new customers excluded. The SoF default is the monthly-cohort compounded trailing twelve months, usage-inclusive and reactivation-inclusive. Two alternative variants are defined, and all three are reported.",
      "plain": "NRR asks what last year's customers are worth this year, expansion included and new customers excluded.",
      "summary": "NRR measures what a fixed set of customers is worth now versus then, expansion included and new customers excluded. Three variants defined, all three computed.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "TTM compounded = product of twelve monthly ratios, each = Σ revenue this month of customers active last month ÷ Σ their revenue last month",
        "unit": "%",
        "bounded": "no ceiling · 100% = base flat",
        "defaults": "ttm_compounded · usage-inclusive (locked) · reactivation-inclusive · no smoothing",
        "lever": "Usage inclusion — 14 points in the sensitivity example",
        "readWith": [
          "gross-revenue-retention",
          "cohort-retention",
          "definitional-sensitivity"
        ],
        "appearsIn": [
          "Board deck",
          "S-1 and 10-K",
          "Data room",
          "Valuation"
        ]
      },
      "stateIt": {
        "template": "NRR {x}% (SoF Standard v1.0: TTM compounded · usage-inclusive · reactivation-inclusive · 3-month window)",
        "checks": [
          "Base fixed at the start, new customers excluded?",
          "Variant named?",
          "Usage treatment stated?",
          "Reactivation treatment stated?",
          "Read with GRR and logo retention?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/net-revenue-retention.csv",
      "aliases": [
        "NRR",
        "Net dollar retention",
        "NDR",
        "Net revenue retention rate"
      ],
      "topics": [
        "fpa",
        "ipo-readiness",
        "capital-allocation"
      ],
      "related": [
        "gross-revenue-retention",
        "cohort-retention",
        "definitional-sensitivity",
        "revenue-types"
      ],
      "configKeys": [
        {
          "key": "nrr.default_variant",
          "default": "ttm_compounded",
          "locked": false,
          "note": "alternatives yoysnapshot, quarterlyannualized"
        },
        {
          "key": "nrr.usage_inclusive",
          "default": "true",
          "locked": true,
          "note": null
        },
        {
          "key": "nrr.reactivation_inclusive",
          "default": "true",
          "locked": false,
          "note": null
        },
        {
          "key": "nrr.usage_smoothing",
          "default": "none",
          "locked": false,
          "note": "trailing-three-month smoothing available, never default"
        }
      ],
      "configNote": null
    },
    {
      "slug": "gross-revenue-retention",
      "order": 8,
      "group": "movement",
      "title": "Gross revenue retention",
      "shortName": "GRR",
      "url": "https://www.strategyoffinance.com/standards/gross-revenue-retention/",
      "standard": "GRR measures the same fixed customer base as NRR, with each customer capped at its own starting revenue. Expansion cannot offset loss. GRR is therefore bounded above by 100% and is computed under the same three variants as NRR.",
      "plain": "GRR is NRR with every customer capped at what it paid at the start, so growth cannot hide leakage.",
      "summary": "GRR measures the same fixed base as NRR with each customer capped at its starting revenue, so expansion cannot offset loss and the figure cannot exceed 100%.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "GRR = Σ min(revenue now, revenue at base) ÷ Σ revenue at base — the cap applied per customer",
        "unit": "%",
        "bounded": "≤ 100% by construction",
        "defaults": "same as NRR · cap applied per customer",
        "lever": "Capping the aggregate instead of each customer — lets one account's expansion mask another's contraction",
        "readWith": [
          "net-revenue-retention",
          "cohort-retention",
          "churn-analytics"
        ],
        "appearsIn": [
          "Board deck",
          "Diligence",
          "Lender reporting"
        ]
      },
      "stateIt": {
        "template": "GRR {x}% (SoF Standard v1.0: per-customer cap · TTM compounded · usage-inclusive)",
        "checks": [
          "Never above 100%?",
          "Cap applied per customer, not to the total?",
          "Same base, window and basis as the NRR beside it?",
          "Gap to NRR read as the base's expansion rate?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/gross-revenue-retention.csv",
      "aliases": [
        "GRR",
        "Gross dollar retention",
        "GDR"
      ],
      "topics": [
        "fpa",
        "ipo-readiness"
      ],
      "related": [
        "net-revenue-retention",
        "cohort-retention",
        "churn-analytics"
      ],
      "configKeys": [],
      "configNote": "Identical to net revenue retention — the only difference is the per-customer cap."
    },
    {
      "slug": "cohort-retention",
      "order": 9,
      "group": "movement",
      "title": "Cohort retention",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/cohort-retention/",
      "standard": "A cohort is the set of customers whose first month with MRR above zero falls in a given period. Each member's base is its MRR in its own joining month; each cell measures the cohort at the last month of the period being reported, clamped to the data cutoff. Cohort triangles use an MRR-only basis: usage is excluded by design.",
      "plain": "Cohort retention follows each vintage of customers on its own curve, measured at the end of each period against what they paid when they joined.",
      "summary": "A cohort is the set of customers whose first MRR month falls in a period. Each member’s base is its own joining month; each cell is measured at period end.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "cell = Σ cohort MRR at the period end ÷ Σ cohort MRR in the joining month — net, gross-capped, and by logo",
        "unit": "%",
        "bounded": "gross ≤ 100% · net has no ceiling",
        "defaults": "cohort = first MRR month · MRR-only basis (usage excluded) · period-end anchoring · comped excluded (locked)",
        "lever": "Anchoring at the period start — an 80-point artifact in the worked example",
        "readWith": [
          "net-revenue-retention",
          "gross-revenue-retention",
          "churn-analytics"
        ],
        "appearsIn": [
          "Data-room cohort file",
          "Board deck",
          "Product-market-fit narrative"
        ]
      },
      "stateIt": {
        "template": "Cohort retention, {granularity} (SoF Standard v1.0: cohorts by first MRR month · period-end cells · MRR-only basis)",
        "checks": [
          "Read down columns, same age?",
          "Immature cohorts flagged?",
          "Base sizes shown beside the percentages?",
          "Usage exclusion stated?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/cohort-retention.csv",
      "aliases": [
        "Cohort analysis",
        "Retention triangle",
        "Vintage retention",
        "Logo retention"
      ],
      "topics": [
        "fpa",
        "capital-allocation"
      ],
      "related": [
        "net-revenue-retention",
        "gross-revenue-retention",
        "churn-analytics"
      ],
      "configKeys": [
        {
          "key": "exclude_comped",
          "default": "true",
          "locked": true,
          "note": null
        }
      ],
      "configNote": "Granularity (monthly, quarterly, yearly) is a view chosen at read time, not a stored definition."
    },
    {
      "slug": "churn-analytics",
      "order": 10,
      "group": "movement",
      "title": "Churn analytics",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/churn-analytics/",
      "standard": "Churn is recognized in the first month with zero MRR after a qualifying gap — MRR is held through the last active month, not truncated at the last invoice date. Churn is reported in four views: monthly logo and dollar rates, tenure at churn, calendar seasonality, and survival by tenure.",
      "plain": "Churn is counted in the first month a customer pays nothing, and reported four ways: by logo, by dollar, by tenure, and by survival.",
      "summary": "Churn is recognized in the first zero-MRR month after a qualifying gap, reported four ways: logo and dollar rates, tenure at churn, seasonality, survival.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "logo churn = churned logos ÷ last month’s active logos · dollar churn = churned MRR ÷ last month’s MRR · survival = surviving ÷ observable, at each tenure",
        "unit": "% per month",
        "bounded": "≥ 0",
        "defaults": "first-zero-month timing · 3-month window · churn_at_gap_start · seasonality flag at 2σ",
        "lever": "The reactivation window — the largest single lever on every churn figure",
        "readWith": [
          "pause-vs-churn",
          "cohort-retention",
          "gross-revenue-retention"
        ],
        "appearsIn": [
          "Board deck",
          "Renewal calendar",
          "Diligence"
        ]
      },
      "stateIt": {
        "template": "Logo churn {x}% · dollar churn {y}% per month (SoF Standard v1.0: first-zero-month · 3-month window · numerator and denominator shown)",
        "checks": [
          "Logo and dollar reported separately?",
          "Annualized by compounding, not by twelve?",
          "Numerator and denominator shown with the rate?",
          "Final months read with the trailing-gap policy in mind?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/churn-analytics.csv",
      "aliases": [
        "Churn rate",
        "Logo churn",
        "Dollar churn",
        "Survival curve",
        "Tenure at churn"
      ],
      "topics": [
        "fpa"
      ],
      "related": [
        "pause-vs-churn",
        "cohort-retention",
        "gross-revenue-retention",
        "concentration"
      ],
      "configKeys": [
        {
          "key": "reactivation_window_months",
          "default": "3",
          "locked": false,
          "note": null
        },
        {
          "key": "trailing_gap_policy",
          "default": "churn_at_gap_start",
          "locked": false,
          "note": null
        },
        {
          "key": "thresholds.churn_seasonality_sigma",
          "default": "2",
          "locked": false,
          "note": null
        }
      ],
      "configNote": null
    },
    {
      "slug": "concentration",
      "order": 11,
      "group": "structure",
      "title": "Concentration",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/concentration/",
      "standard": "Concentration is measured on MRR at month end, over resolved parent entities, comped excluded. Reported as top-10 share, top-20 share, a Herfindahl–Hirschman Index over revenue shares, and the trend of all three.",
      "plain": "Concentration measures how much of the business depends on how few customers, on resolved parents, by top-N share and HHI.",
      "summary": "Concentration is measured on month-end MRR over resolved parent entities: top-10 and top-20 share, a Herfindahl–Hirschman Index, and the trend of all three.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "top-N share = Σ MRR of the largest N customers ÷ total MRR · HHI = Σ share² · effective customers = 1 ÷ HHI",
        "unit": "% · index from 0 to 1",
        "bounded": "HHI between 1/n and 1",
        "defaults": "MRR basis · resolved parents · comped excluded · warn at top-10 > 40%, top-20 > 60%, HHI > 0.15",
        "lever": "Entity resolution — billing accounts understate risk, always",
        "readWith": [
          "the-measured-unit",
          "acv-and-arpa",
          "annual-recurring-revenue"
        ],
        "appearsIn": [
          "Diligence",
          "Lender covenants",
          "Risk-factor disclosure"
        ]
      },
      "stateIt": {
        "template": "Top-10 share {x}% · HHI {y} · effective customers {z} (SoF Standard v1.0: month-end MRR · resolved parents)",
        "checks": [
          "Computed on parents, not billing accounts?",
          "HHI beside top-N share?",
          "Trend shown, not just level?",
          "Tenure and contract terms alongside?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/concentration.csv",
      "aliases": [
        "Customer concentration",
        "Top-10 share",
        "Herfindahl–Hirschman Index",
        "HHI"
      ],
      "topics": [
        "ma",
        "capital-allocation"
      ],
      "related": [
        "annual-recurring-revenue",
        "the-measured-unit",
        "acv-and-arpa"
      ],
      "configKeys": [
        {
          "key": "thresholds.top10_share_warn",
          "default": "0.40",
          "locked": false,
          "note": null
        },
        {
          "key": "thresholds.top20_share_warn",
          "default": "0.60",
          "locked": false,
          "note": null
        },
        {
          "key": "thresholds.concentration_hhi_warn",
          "default": "0.15",
          "locked": false,
          "note": null
        }
      ],
      "configNote": null
    },
    {
      "slug": "growth-accounting",
      "order": 12,
      "group": "structure",
      "title": "Growth accounting",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/growth-accounting/",
      "standard": "Growth accounting decomposes each period's MRR change into its five movements and reports the quick ratio — gross additions divided by gross losses — together with the mix of additions by source.",
      "plain": "Growth accounting shows how a business grew, not just how fast: the quick ratio and the mix of new, expansion and reactivation.",
      "summary": "Growth accounting splits each period’s MRR change into five movements and reports the quick ratio, gross additions over gross losses, with the mix by source.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "quick ratio = (new + expansion + reactivation) ÷ (contraction + churn) · mix = each addition type ÷ gross additions",
        "unit": "ratio · %",
        "bounded": "undefined when losses are zero · 1.0 = replacing exactly what is lost",
        "defaults": "quarterly · reactivation counted as an addition · constant-currency comparison alongside",
        "lever": "Period length — monthly is volatile, annual nets away the turning points",
        "readWith": [
          "movement-taxonomy",
          "net-revenue-retention",
          "foreign-exchange"
        ],
        "appearsIn": [
          "Board deck",
          "Investor update"
        ]
      },
      "stateIt": {
        "template": "Quick ratio {x} · mix new {a}% / expansion {b}% / reactivation {c}% (SoF Standard v1.0: quarterly · reactivation in additions)",
        "checks": [
          "Mix shown with the ratio?",
          "Period length stated?",
          "Undefined reported as undefined, not as infinity?",
          "FX-driven movements removed in the constant-currency view?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/growth-accounting.csv",
      "aliases": [
        "Quick ratio",
        "SaaS quick ratio",
        "Growth mix"
      ],
      "topics": [
        "fpa",
        "capital-allocation"
      ],
      "related": [
        "movement-taxonomy",
        "foreign-exchange",
        "net-revenue-retention"
      ],
      "configKeys": [],
      "configNote": "None of its own; inherits the movement taxonomy and its upstream choices."
    },
    {
      "slug": "acv-and-arpa",
      "order": 13,
      "group": "structure",
      "title": "ACV and ARPA",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/acv-and-arpa/",
      "standard": "ARPA is total MRR divided by active customers in the month. Because the average alone is nearly always misleading, the standard reports the distribution: per-customer annualized revenue at every decile, and customer counts and revenue by ACV band.",
      "plain": "ARPA is average revenue per account. The standard reports the whole distribution, because the average describes almost no customer.",
      "summary": "ARPA is total MRR over active customers. Because the average alone misleads, the standard reports the distribution: revenue by decile and counts by ACV band.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "ARPA = total MRR ÷ active customers · new-business ARR per logo = new MRR × 12 ÷ new logos · plus the deciles of MRR × 12",
        "unit": "currency per account",
        "bounded": "≥ 0",
        "defaults": "MRR basis · comped excluded · ACV bands 5K / 25K / 100K / 500K (locked)",
        "lever": "Band boundaries — redraw the picture without changing a single customer",
        "readWith": [
          "concentration",
          "annual-recurring-revenue",
          "growth-accounting"
        ],
        "appearsIn": [
          "Segmentation",
          "Pricing review",
          "Board deck"
        ]
      },
      "stateIt": {
        "template": "ARPA {x} · median {y} · p90/p50 {z} (SoF Standard v1.0: MRR basis · comped excluded · bands 5K/25K/100K/500K)",
        "checks": [
          "Median and deciles beside the mean?",
          "New-business ARR per logo shown separately?",
          "ARPA movement decomposed with the bridge?",
          "Bands held constant across periods?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/acv-and-arpa.csv",
      "aliases": [
        "Average revenue per account",
        "ARPA",
        "Annual contract value",
        "ACV bands"
      ],
      "topics": [
        "pricing",
        "fpa"
      ],
      "related": [
        "concentration",
        "annual-recurring-revenue",
        "growth-accounting"
      ],
      "configKeys": [
        {
          "key": "segments.acv_bands",
          "default": "5K / 25K / 100K / 500K",
          "locked": true,
          "note": "upper bounds in base currency, annualized"
        }
      ],
      "configNote": null
    },
    {
      "slug": "foreign-exchange",
      "order": 14,
      "group": "structure",
      "title": "Foreign exchange",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/foreign-exchange/",
      "standard": "Flows are converted at monthly-average rates for the month in which they occur. A missing rate falls back to the nearest prior month's rate and is logged as an assumption. Movements arising purely from rate changes are tagged fxdriven, sub-totalled in the bridge, and removed entirely in the constant-currency view.",
      "plain": "Revenue converts at the month's average rate, and currency-driven movements are tagged so the constant-currency view can remove them.",
      "summary": "Flows convert at monthly-average rates for the month they occur. Rate-driven movements are tagged, sub-totalled in the bridge, and removed in constant currency.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "base-currency amount = native amount × the month’s average rate · constant currency = native amount × the base period’s rate",
        "unit": "currency",
        "bounded": "n/a",
        "defaults": "fx.flow_rate = monthly_average (locked) · fx.fallback = nearest_prior · base period = 12 months before the cutoff",
        "lever": "The base period — any other choice is a different \"constant\" currency",
        "readWith": [
          "movement-taxonomy",
          "growth-accounting",
          "revenue-tie-out"
        ],
        "appearsIn": [
          "Board deck",
          "Constant-currency growth",
          "Register"
        ]
      },
      "stateIt": {
        "template": "Growth {x}% reported · {y}% in constant currency at {base period} rates (SoF Standard v1.0: monthly-average flow rates)",
        "checks": [
          "Base period stated?",
          "FX-driven movements sub-totalled in the bridge?",
          "Missing rates logged as assumptions?",
          "Native amounts preserved on every row?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/foreign-exchange.csv",
      "aliases": [
        "Constant currency",
        "FX translation",
        "Multi-currency revenue"
      ],
      "topics": [
        "fpa",
        "modern-finance-function"
      ],
      "related": [
        "monthly-recurring-revenue",
        "movement-taxonomy",
        "growth-accounting",
        "the-register"
      ],
      "configKeys": [
        {
          "key": "fx.flow_rate",
          "default": "monthly_average",
          "locked": true,
          "note": null
        },
        {
          "key": "fx.fallback",
          "default": "nearest_prior",
          "locked": false,
          "note": "alternative block"
        }
      ],
      "configNote": null
    },
    {
      "slug": "revenue-tie-out",
      "order": 15,
      "group": "structure",
      "title": "Revenue tie-out",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/revenue-tie-out/",
      "standard": "Every report reconciles recognized revenue to reported revenue, month by month, and separately bridges billed to recognized so that timing differences are visible rather than netted. A report built from a file that does not tie to the financial statements is not complete under this standard.",
      "plain": "The customer file counts only once its recognized revenue agrees with the P&L, month by month, with billing timing shown separately.",
      "summary": "Every report reconciles recognized revenue to reported revenue month by month, and bridges billed to recognized so timing differences stay visible.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "gap = reported − recognized · billing timing = billed − recognized",
        "unit": "currency · % of reported",
        "bounded": "n/a",
        "defaults": "warn when the gap exceeds 2% of reported · pause-held MRR isolated",
        "lever": "Comparing all-types recognized against a recurring-only reported figure — manufactures a gap the size of the non-recurring business",
        "readWith": [
          "monthly-recurring-revenue",
          "annual-recurring-revenue",
          "the-register"
        ],
        "appearsIn": [
          "Data room",
          "Quality of earnings",
          "Monthly close"
        ]
      },
      "stateIt": {
        "template": "Tie-out: recognized {x} vs reported {y}, gap {z}% (SoF Standard v1.0: monthly · billed-to-recognized bridged)",
        "checks": [
          "Every month reconciled, gaps explained rather than plugged?",
          "Reported figure is total revenue, matching the file's scope?",
          "Billing timing large and positive in prepaid months?",
          "Cutoffs aligned?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/revenue-tie-out.csv",
      "aliases": [
        "Tie-out",
        "Revenue reconciliation",
        "Billed vs recognized vs reported"
      ],
      "topics": [
        "ma",
        "modern-finance-function"
      ],
      "related": [
        "monthly-recurring-revenue",
        "annual-recurring-revenue",
        "the-register",
        "revenue-types"
      ],
      "configKeys": [
        {
          "key": "thresholds.tieout_gap_warn",
          "default": "0.02",
          "locked": false,
          "note": "2% relative"
        }
      ],
      "configNote": null
    },
    {
      "slug": "definitional-sensitivity",
      "order": 16,
      "group": "structure",
      "title": "Definitional sensitivity",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/definitional-sensitivity/",
      "standard": "A report under this standard computes its headline retention under all defined variants and toggles — same data, same period, only the definition changes — and reports the spread between them in percentage points. A wide spread is not an error to be resolved. It is a property of the business, and it is a finding.",
      "plain": "The same data yields a family of NRRs. The spread between them is a finding about the business, not an error.",
      "summary": "A report under this standard computes headline retention under every defined variant and reports the spread in points. A wide spread is a finding, not an error.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "spread = the highest NRR variant − the lowest, in percentage points",
        "unit": "percentage points",
        "bounded": "≥ 0",
        "defaults": "six NRR variants computed · warn when the spread exceeds 5 points",
        "lever": "Usage inclusion — 14 of the 27 points in the worked example",
        "readWith": [
          "net-revenue-retention",
          "gross-revenue-retention",
          "the-register"
        ],
        "appearsIn": [
          "Diligence preparation",
          "Board deck",
          "Methodology note"
        ]
      },
      "stateIt": {
        "template": "NRR {x}% (default) · range {min}–{max}% across six variants · spread {s} points (SoF Standard v1.0)",
        "checks": [
          "All variants computed, none curated away?",
          "Default variant marked?",
          "Spread reported in points?",
          "The usage pair explained?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/definitional-sensitivity.csv",
      "aliases": [
        "NRR sensitivity",
        "Definition spread",
        "Retention variants side by side"
      ],
      "topics": [
        "ma",
        "ipo-readiness"
      ],
      "related": [
        "net-revenue-retention",
        "gross-revenue-retention",
        "the-register"
      ],
      "configKeys": [
        {
          "key": "thresholds.nrr_spread_warn_points",
          "default": "5",
          "locked": false,
          "note": null
        }
      ],
      "configNote": null
    },
    {
      "slug": "the-register",
      "order": 17,
      "group": "structure",
      "title": "The register",
      "shortName": null,
      "url": "https://www.strategyoffinance.com/standards/the-register/",
      "standard": "Every gap in the data produces a logged, visible, reviewable entry. Assumptions record where a default was applied; exceptions record where the data was anomalous. The register accompanies every report. A report without its register is not complete under this standard.",
      "plain": "Every assumption applied and every anomaly found is logged, so a reader can argue with a premise instead of discovering it later.",
      "summary": "Every gap in the data produces a logged, reviewable entry: assumptions record applied defaults, exceptions record anomalies. No register, no complete report.",
      "reviewed": "2026-09-18",
      "glance": {
        "formula": "entries = assumptions (a default was applied) + exceptions (the data was anomalous), each keyed, with a severity of info, warn or blocking",
        "unit": "entries by severity",
        "bounded": "n/a",
        "defaults": "every threshold feeds a finding · blocking stops the computation · reviews append-only",
        "lever": "Completeness — a register that omits inconvenient entries is worse than none",
        "readWith": [
          "revenue-tie-out",
          "definitional-sensitivity",
          "pause-vs-churn"
        ],
        "appearsIn": [
          "Data room",
          "Quality-of-earnings working papers",
          "Restatements"
        ]
      },
      "stateIt": {
        "template": "Register: {n} assumptions · {m} exceptions ({b} blocking) (SoF Standard v1.0: complete, unfiltered, reviews append-only)",
        "checks": [
          "Every assumption named with customer, amount and alternative?",
          "Severity counts shown?",
          "Blocking conditions resolved before numbers are quoted?",
          "Register delivered with the report?"
        ]
      },
      "exampleCsv": "https://www.strategyoffinance.com/standards/examples/the-register.csv",
      "aliases": [
        "Assumptions register",
        "Exceptions register",
        "Assumptions and exceptions log"
      ],
      "topics": [
        "ma",
        "modern-finance-function"
      ],
      "related": [
        "revenue-tie-out",
        "definitional-sensitivity",
        "pause-vs-churn",
        "revenue-types"
      ],
      "configKeys": [],
      "configNote": "Every threshold in the definition config feeds a register finding."
    }
  ],
  "changelog": [
    {
      "version": "1.0",
      "date": "2026-09-18",
      "kind": "major",
      "notes": [
        "Initial public release: seventeen terms covering customer-level revenue metrics — the measured unit through the register.",
        "Locked defaults: comped customers excluded; usage included in NRR; monthly-average FX flow rates; the five-movement taxonomy; the seven-value revenue-type enumeration; ACV bands at 5K / 25K / 100K / 500K.",
        "Default NRR variant is the monthly-cohort compounded trailing twelve months; the year-over-year snapshot and quarterly annualized variants are defined and computed alongside.",
        "Reactivation window default of three months; right-censored gaps governed by a separate trailing-gap policy."
      ]
    }
  ],
  "generatedAt": "2026-09-18T18:05:34.096Z"
}