Skip to content

Ticketing / Density Party / High Frequency sessions #301

Description

@nickevansuk

Proposer

imin, MCRactive, GLL, OpenPlay (also ref Legend, Gladstone, Everyone Active and Westminster)

Use Case

There is an opportunity type that is often expressed within different systems in different ways:

  • "Density party bookings"
  • "Online ticketing"
  • "Fast ticketing"
  • "High frequency sessions"

It is characterised by very frequent slots, as would be expected for a FacilityUse, however it is a "Session".

As well as data model implications, there's also UX implications for this use case: as there are often a very high number of sessions on a particular day.

An example can be found here: https://bookings.better.org.uk/location/cambridge-ice-arena/public-skating/2021-12-14/by-time

Illustrative examples include:

  • Golf Tee times
  • Gym
  • Casual swimming
  • Ice skating
Comprehensive list of examples from GLL
  • Air Venture
  • Air-Max Inflatable
  • Aqua Play
  • Aqua Splash
  • Aqua Splash Slide
  • Casual Cycling Session
  • Cave
  • Climbing Wall
  • Clip n Climb
  • Coffee Skate
  • Disability Jump Session
  • Drop In Basketball
  • Family Fun Swim
  • Footgolf
  • General Jump Session
  • Golf - 18 holes
  • Inclusive Bounce
  • Inclusive Skate
  • Inclusive Swim
  • Junior Basketball
  • Junior Turbo
  • Laserquest
  • Leap of Faith
  • Multi Sports Drop In
  • Netball Drop In
  • Pay & Play Football
  • Pitch and Putt
  • Play Park
  • Public Skating
  • Rollerskating
  • Sensory Swim
  • Skate Park
  • Skate Park 3 Hour
  • Skate Park Beginners
  • Skate Park Under 16s
  • Soft Play
  • Soft Play Under 3's
  • Surf Belfast
  • Swim For All
  • Swim for All Outdoor
  • Swim for Free
  • Swim for Men & Boys
  • Swim for Women & Child
  • Swim for Women & Girls
  • Table Tennis Drop In
  • Toddler Bounce Session
  • Toddler Splash
  • Toddlers World
  • Turkish Baths - Female Only
  • Turkish Baths - Male Only
  • Turkish Baths Mixed
  • Ultimate Aqua Splash
  • Waterslides

Why is this not covered the existing data model?

The current OpenActive data model has two close matches:

  • SessionSeries - These are thematic event series, allowing a participant to build an exercise habit. Low frequency - "Yoga every Wednesday at 7pm"
  • FacilityUse - These are Slots that are available to book a facility (e.g. a Squash Court). They are high frequency, but designed to book a facility - "Slots available hourly from 8am to 10pm".

The properties of these classes have some overlap. Properties that would be useful in this use case are highlighted in bold:

SessionSeries FacilityUse
accessibilityInformation accessibilityInformation
accessibilitySupport accessibilitySupport
activity facilityType
additionalAdmissionRestriction additionalAdmissionRestriction
ageRange  
ageRestriction  
attendeeInstructions attendeeInstructions
category category
contributor  
description description
duration  
endDate  
  event
eventAttendanceMode  
eventSchedule  
eventStatus  
genderRestriction  
  hoursAvailable
id id
identifier identifier
image image
  individualFacilityUse
isAccessibleForFree  
isCoached  
leader  
level  
location location
maximumAttendeeCapacity  
meetingPoint  
name name
offers offers
organizer provider
programme  
remainingAttendeeCapacity  
schedulingNote  
startDate  
subEvent  
superEvent  
type type
url url

Modelling options

Option 1: Use SessionSeries with some kind of highFrequencySession flag

  • Advantages: Most of the useful properties are available on SessionSeries, and this is the easiest for booking systems to implement. In some booking systems the only difference between a SessionSeries and a High Frequency Session is how frequently the Seller schedules the ScheduledSessions - hence making it easy to flag such a SessionSeries as high frequency will increase the uptake recognising such SessionSeries within open data. This also allows a Schedule to be used for high frequency sessions.
  • Disadvantages: Overloads the semantics of the existing SessionSeries.

Option 2: Use FacilityUse with some kind of highFrequencySession flag

  • Advantages: FacilityUse already follows a Slot model.
  • Disadvantages: Overloads the semantics of the existing FacilityUse - which is designed more for a facility ("hire the whole swimming pool") than a session ("one ticket to the swimming pool"). This is also reflected in the facility type list. Additional properties would need to be added to FacilityUse for this purpose only. Also makes processing of feeds more complex, as two different types of FacilityUse and Slot would exist. Additionally the structure of FacilityUse and IndividualFacilityUse are not suitable for this context, and having a Slot associated with an IndividualFacilityUse that has remainingUses greater than 1 would break the constraints in the existing version of the specification.

Option 3: Create a new subclass of Event

  • Advantages: A specific class with its own clear semantics.
  • Disadvantages: Requires new class to be defined, and additional feeds to be created. More implementation effort for all parties, and an additional overhead for those booking systems that support high frequency sessions for a very small percentage of their overall user base.

Proposal

To simplify the modelling and reasoning about high frequency sessions, as well as ease implementation, a simple flag could be defined (Option 1 above), either:

a) beta:isScheduledAsSlots could live alongside schedulingNote in the Event
b) beta:isHighFrequencySchedule could live within the Schedule or PartialSchedule

(a) is likely more robust, as eventSchedule is an array. Additionally for (a) eventSchedule could be optional when isScheduledAsSlots is set to true, which reduces the need to render a likely complex PartialSchedule of limited value.

For ease of implementation for booking systems that have relatively few high frequency schedules (i.e. so as not to create complexity by adding more feeds), it is important to still allow the use of Schedule / schedule expansion, even though it will likely not be presented to the user due to its complexity.

Additionally, hoursAvailable could be added to SessionSeries, only for use with isScheduledAsSlots.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions