Revenue, Payments & Invoicing
Revenue can be viewed from three perspectives: accrual-based (when earned), cash-based (when received), and invoice-based (when invoiced). Each serves a different analytical purpose. Revenue is categorized into a two-level hierarchy of main groups and sub groups, covering everything from membership fees to bad debt write-offs. Payment runs handle the batch collection of recurring fees via direct debit, and invoices are the billing documents sent to customers and corporate partners.
Revenue Perspectives
| Perspective |
When Revenue Is Recorded |
Use For |
Table |
| Accrual-Based |
When earned (regardless of payment) |
P&L reporting, financial analysis |
fct_revenue |
| Cash-Based |
When payment is received |
Cash flow analysis, payment reconciliation |
fct_revenue_cash_based |
| Invoice-Based |
When invoices are emitted |
Gyms with invoice-based accounting |
fct_revenue_invoice_based |
Revenue Main Groups
| Main Group |
What It Covers |
| CHARGES_SALES |
Positive income from contracts and services |
| DEDUCTION |
Mostly negative amounts reducing income |
| FEES |
Mostly positive income from penalties |
Revenue Sub Groups — CHARGES_SALES
| Sub Group |
What It Is |
| MEMBERSHIP_FEE |
Income from main membership contracts |
| ADDITIONAL_MODULE |
Income from add-on modules (sauna, drinks, etc.) |
| FLAT_FEE |
Income from one-time fees (enrollment, card replacement) |
| STARTER_PACKAGE |
Income from initial setup/activation fees |
| SALE_OF_GOODS_AND_SERVICES |
Income from product sales or ad-hoc services |
| ADDITIONAL_CHARGE |
Additional contract-related income |
| REST_PERIOD_CONTRIBUTION |
Charges during idle/freeze periods |
| DEPOSIT |
Income from deposits (e.g. bottle deposits) |
Revenue Sub Groups — DEDUCTION
| Sub Group |
What It Is |
| CREDIT |
Credits granted to members (e.g. due to illness) |
| DEBT_CLAIM_REDUCTION |
Discounts on previous charges |
| DEBT_CLAIM_REVERSAL |
Full cancellation of previous charges |
| DERECOGNITION |
Bad debt write-offs — customer did not pay |
| REFUND_OF_DEPOSIT |
Deposit returns |
| VOUCHER_EXPIRATION |
Multi-purpose voucher expiration (recognized as income) |
Revenue Sub Groups — FEES
| Sub Group |
What It Is |
| BANKING_FEE |
Payment processing fees |
| DUNNING_PENALTY_FEE |
Late payment penalty fees |
| OTHER_FEE |
Miscellaneous fees (address requests, damage compensation) |
Table: dim_revenue_group. Join via fct_revenue.revenue_group_id.
Revenue Adjustment Types
| Adjustment Type |
What Happened |
| IDLE_PERIOD |
Adjustment due to membership freeze |
| CONTRACT_CANCELLATION |
Adjustment due to contract cancellation |
| CONTRACT_REVERSAL |
Adjustment due to contract being voided |
| CONTRACT_ADJUSTMENT |
General contract price adjustment |
| CONTRACT_REST_MATURITY |
Remaining charges locked on rest maturity |
| BOOKING_ENTRY_REVERSAL |
Reversal of a previously locked charge |
| BOOKING_ENTRY_REDUCTION |
Partial reduction of a charge |
| CHARGED_BACK |
Payment returned/reversed by the bank |
| CHECKIN_DISCOUNT |
Discount for reaching a check-in milestone |
| NULL |
Not an adjustment — regular revenue |
Payment Run Booking Types
| Booking Type |
What Happened |
| REGULAR_BOOKING |
Payment successfully collected |
| FAILED_BOOKING |
Collection attempted but failed (e.g. insufficient funds) |
| EXCLUDED_BOOKING |
Customer excluded before collection attempted |
Table: fct_payment_run. Filter archived = FALSE. amount is NULL for failed and excluded bookings.
Other Payment Terms
| Term |
Definition |
Table |
Analyst Notes |
| Payment |
Individual payment events across all channels. |
fct_payment |
Filter is_reversed = FALSE. unallocated_amount = unmatched to revenue. |
| Finion Capital (MemberCash) |
Sport Alliance's receivables-financing product. Collects fees via SEPA, pays gym immediately, handles dunning. |
— |
Finion reasons appear in dim_payment_run_property.reason. |
Invoicing
Invoices are the billing documents sent to customers or corporate partners. They can be generated automatically via scheduled invoice runs, created manually, or produced through the MySports app. Each invoice contains one or more positions (line items), and the data warehouse stores one row per position — not per invoice.
Invoice Types
| Type |
What It Is |
| INVOICE |
Standard outgoing invoice (debit document) |
| REFUND |
Credit note / refund |
| PAYMENT_RECEIPT |
Payment receipt (for MySports transactions) |
Invoice Status
| Status |
Meaning |
| DRAFT |
Not yet finalized; can be deleted |
| CREATED |
Finalized but not yet sent |
| SENT |
Sent to the recipient |
| PAID |
Fully paid |
| PARTIALLY_PAID |
Partial payment received |
| CANCELLED |
Invoice cancelled |
Invoice Discriminator (Source)
| Discriminator |
Source |
| INVOICE_RUN |
Standard automated invoice run (to customer) |
| COMPANY |
Automated invoice run (to company, B2B) |
| MANUAL_DEBT_CLAIM |
Manually created debt claim |
| MYSPORTS |
MySports online payment receipt |
| IMPORTED |
Imported from external system |
Table: fct_invoice (grain: one row per invoice position, not per invoice). Use invoice_entity_id to group by invoice.