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 |
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.
Communication & Consent
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. |