Skip to content

Operations & Engagement

The day-to-day of running a gym: the services and classes members book, the products sold at the counter, the check-ins that record visits, and the codes, referrals, consent settings, and opening hours that support it all.

Classes, Appointments & Services

Services represent everything a gym offers beyond basic access — group classes, personal training, sauna, and more. They are booked through appointments, consumed via contingents (usage credits), and can be restricted by location or booking method. This section covers the full lifecycle from service definition through booking, attendance tracking, and contingent management.

Service Access Types

Access Type Who Can Use It
MAIN_STUDIO Only at the customer's home gym
ALL_STUDIOS At any accessible gym
RESTRICTED_STUDIOS Only at specific gyms

Service Booking Options

Booking Option How It's Booked
USAGE_REQUIRES_CONTINGENT Must use a contingent credit
FREE_USAGE No cost or credit needed
DISPLAY_ONLY Visible in app but cannot be booked online

Service Types

Service Type How the Service Is Consumed
CLASS_BASED Group class booking
APPOINTMENT_BASED One-to-one appointment
USAGE_BASED Consumed one unit at a time
CHECK_IN_BASED Triggered by facility check-in (e.g. day ticket)
BUNDLE_BASED Part of a bundled offering

Table: dim_service. Filter archived = FALSE. Use bridge_service_to_organization_unit for gym availability.

Appointment Types

Type What It Is
COURSE_APPOINTMENT A scheduled class session
SINGLE_APPOINTMENT A one-on-one session (e.g. personal training)
TRIAL_SESSION A try-before-you-buy session for prospects

Appointment Status

Status Meaning
PLANNED Scheduled (past or future)
DELETED Removed from the calendar
CANCELED Cancelled

Table: dim_appointment. Filter archived = FALSE. Class appointments: fct_class_appointment. Customer participation: fct_customer_appointment. Trainer assignments: fct_trainer_appointment.

Booking Status

Status Meaning
BOOKED Successfully booked
CANCELED Customer cancelled booking
WAITING_LIST Appointment full; customer on waiting list

Participant Status

Status Meaning
PARTICIPATING Physically present
NOT_PARTICIPATING Reported as absent
UNSET No attendance recorded

Contingent Types

Term Definition Table
Inclusive Contingent Included in the contract at no extra cost (e.g. 10 classes/month with Premium membership). dim_inclusive_contingent
Purchased Contingent A package bought separately (e.g. 10-class pass, day pass). dim_purchased_contingent

Inclusive Contingent Varieties

Variety Where It Comes From
RATE Linked to a standard contract tariff
MODULE_RATE Linked to a module tariff (add-on)
TAG Linked to a customer tag
RATE_CODE Linked to a rate code
AGGREGATOR Linked to an external aggregator

unit: FLAT = unlimited, LIMITED = limited number of uses.

Purchased Contingent Types

Contingent Type How Usage Is Measured
APPOINTMENT_BASED Counted by bookings
TIME_BASED Measured in minutes
CHECKIN_BASED Entry-based access (includes day passes)
USAGE_BASED General usage counting
BUNDLE_BASED Package of services
BUDDY_BASED Allows bringing guests

Day passes: contingent_type = 'CHECKIN_BASED' AND num_of_usage = 1 AND validity_type = 'DAY'. usage_rate (0.0–1.0) = consumption progress.

Products & Point of Sale

Beyond memberships, gyms sell physical and virtual products through point-of-sale terminals — drinks, merchandise, gift vouchers, and consumption credits. Sales can happen at a physical register, through the MySports app, online, or via connected vending machines. Each sale consists of one or more line items (positions).

Product Types

Type What It Is Examples
MATERIAL Physical merchandise Drinks, protein bars, equipment, apparel
VIRTUAL Virtual products linked to services Class fees, PT sessions, facility access
VOUCHER Gift cards / gift vouchers Redeemable for contracts or products
CONTRACT_VOUCHER Special voucher enabling a specific contract Time-limited contract access
CONSUMPTION_CREDIT Pre-paid credit balance Can be used to purchase products
UNKNOWN Type not specified Only for dynamic products

Table: dim_product (use v2). Filter archived = FALSE. Use bridge_product_to_organization_unit for gym availability.

Cash Register Status

Status Meaning
CREATED Just set up, not yet validated
VALIDATION Being validated/tested
OPEN Active and accepting transactions
DEACTIVATED Manually deactivated by staff
DEACTIVATED_BY_SYSTEM Automatically deactivated by the system

POS Sale Types

Sale Type Channel
CASH_REGISTER Standard POS at a physical register
DEVICE Connected vending machine or device
MYSPORTS_SALE MySports app
ONLINE_SALE Online shop / customer portal
APPLICATION Third-party application

POS Position Types

Position Type What Was Sold
STOCK_PRODUCT Physical product from inventory
DYNAMIC Ad-hoc product created during the sale
VOUCHER Voucher sale
CONSUMPTION_CREDIT Consumption credit purchase
BOTTLE_DEPOSIT Bottle deposit charge

Table: fct_pos_saleposition. Join to dim_product via product_id and fct_payment via internal_payment_id.

Check-ins & Visits

Check-ins record physical gym visits — each swipe at a turnstile, tap on a card reader, or manual entry by staff creates one row. This data powers visit frequency analysis, cross-club usage tracking, and occupancy insights. Privacy regulations mean some check-ins are anonymized, so customer-level analysis requires filtering.

Term Definition Table Analyst Notes
Check-in A physical gym visit recorded by a turnstile, access device, or staff. One row per entry. Not the same as class attendance. fct_checkin Exclude privacy-masked: WHERE has_privacy_config = FALSE OR has_privacy_config IS NULL.
Cross-club Visit A customer visiting a gym that is not their home gym. fct_checkin Identified when organization_unit_id ≠ customer_organization_unit_id.
Privacy Masking When has_privacy_config = TRUE, customer_id is NULL to protect privacy. Check-in is counted but not linked to a person. fct_checkin Both customer_id and customer_organization_unit_id may be NULL.
Device A physical access control device (turnstile, card reader, kiosk). dim_device device_id on fct_checkin is NULL when checked in via back-office.

Device Connection Types

Connection Type How It Connects
USB Direct USB
NETWORK Network/LAN
COM Serial port
API Cloud/API
USB_VIRTUAL_COM USB emulating serial port

Common Codes & Tags

Codes are flexible labels used to categorize and filter entities across the system. Gym operators use them to tag customers (e.g. "VIP", "Student"), group gyms by region, classify corporate partners, or mark specific rates. All code relationships are many-to-many. Custom fields extend this further by allowing free-form data to be attached to customer records.

Code Type Applied To Dimension Table Bridge Table
Customer Code Customers dim_customer_code bridge_customer_to_customer_code
Organization Unit Code Gyms dim_organization_unit_code bridge_organization_unit_to_organization_unit_code
Company Code Corporate partners dim_company_code bridge_company_to_company_code
Rate Code Rates/tariffs dim_rate_code bridge_rate_to_rate_code

All are many-to-many relationships.

Custom Fields

Term Definition Table Analyst Notes
Custom Field Free-form fields attached to customers at LEAD or MEMBER level. MEMBER-level fields are called "DataPlus" in the UI. dim_customer_custom_field field_type: BOOLEAN, DATE, LIST, NUMERIC, TEXT. All values stored as strings in field_value.

Referral Program

The referral program lets existing members invite friends, family, or colleagues to join the gym. Each customer gets a unique referral code they can share. When the referred person signs up and meets a waiting period requirement, rewards may be unlocked for the referrer. Referrals can be auto-accepted or require staff approval.

Term Definition
Referring Customer The existing member who made the referral
Referred Customer The new person who was referred
Referral Code A unique, permanent code each customer can share
Waiting Period Days the referred customer must stay active before rewards unlock

Referral Status

Status Meaning
AUTO_ACCEPTED Automatically accepted (no manual review)
PENDING Awaiting staff review
ACCEPTED Manually approved
REJECTED Manually rejected
WITHDRAWN Withdrawn

Referral Relationship

Relationship How They Know Each Other
FAMILY Family members
FRIENDS Friends
COWORKERS Colleagues
OTHER Other relationship

Referral Source Event

Source Event What Triggered the Referral
NEW_CONTRACT Referred person signed a contract
TRIAL_SESSION Referred person attended a trial session
MANUALLY_CREATED Staff created the referral manually

Table: fct_customer_referral. Referral code: dim_customer.referral_code. Exclusion: dim_customer.excluded_from_referral.

Tracks customer opt-in/opt-out preferences for different communication channels (email, SMS, push notifications, phone, postal mail). Consent is managed per message category and can be set at the individual customer level or inherited from the gym's default settings. Customer-level preferences always take priority.

Term Definition Table Analyst Notes
Communication Consent Tracks which channels a customer opted into/out of, per message category. Channels: MySports notifications, Email, SMS, Phone, Letter. dim_customer_communication_consent One row per customer per category. configuration_origin: CUSTOMER (takes priority) or ORGANIZATION_UNIT (gym default).

Operating Hours

Defines when each gym is open and closed. Regular weekly schedules set the baseline, while closing hours handle exceptions like holidays, maintenance days, and special events. Closing hours can be one-time or annually recurring. All times are stored in the gym's local timezone.

Term Definition Table Analyst Notes
Opening Hours Regular weekly operating hours per gym. Defined as day-of-week ranges with start/end times. dim_opening_hours Each row covers a weekday range (e.g. Mon–Fri, 06:00–22:00).
Closing Hours Exceptions to regular hours — planned closures for holidays, maintenance, or events. dim_closing_hours Filter archived = FALSE. Types: ONE_TIME (specific dates) or YEARLY (recurring). All times in gym's local timezone.