Ir al contenido principal
Petanque Life

Court Booking & Occupancy

F07.06 9 funcionalidades Planificado

En resumen

Court Booking & Occupancy is the consumer-facing booking experience built for daily club operations: per-court calendars, recurring series, member versus guest pricing, deadline-enforced cancellation, no-show handling, QR check-in, and per-slot real-time availability. It turns the underlying booking engine into a self-service product that members and guests can use end-to-end without staff involvement, including bookable lighting and heating amenities.

Cómo funciona

Each court has its own bookable calendar with per-court time slots that can be filtered by date and court number. The public availability endpoint exposes the same data unauthenticated so that club websites and the player app can render an occupancy grid without forcing sign-in. Recurring weekly, biweekly, and monthly series are supported with conflict-aware expansion, and cancellations on a series propagate to all future instances unless the user opts to cancel only one.

Pricing is computed per court and per hour. Each court can carry its own tariff with a venue-level default fallback, and the booking engine auto-calculates the fee from the venue's pricing configuration — including peak versus off-peak windows. A booker_type flag distinguishes member from guest, applying the correct tariff so members get the negotiated club rate while guests are charged at the public price. Lighting and heating are bookable amenities: each court declares whether it has heating, and if the booker enables lighting or heating the engine validates the court actually supports it and adds the surcharge from the venue's amenity pricing.

Cancellation enforces a venue-defined deadline policy. Bookings cancelled before the deadline incur no fee, those cancelled late incur a percentage fee, and a force-cancel option lets staff override for legitimate cases. No-show registration is a separate POST /no-show action that charges the no-show fee from the cancellation policy; it cannot be applied if the booker has already checked in, preventing accidental penalties.

Check-in runs on QR codes. Each booking is issued a unique check_in_token, retrievable via GET /check-in-token and rendered as a QR code in the app or on the booking confirmation. POST /check-in validates the token, marks attendance, and unlocks the no-show protection.

Real-time availability is served from GET /public/venues/{id}/real-time-availability, which returns a per-court, per-slot grid with configurable slot duration. This single call powers booking screens, embedded widgets, and the public app's drop-in finder.

Capacidades clave

  • Per-court booking calendar with public availability endpoint
  • Recurring series (weekly, biweekly, monthly) with cancel propagation
  • Per-court hourly pricing with venue default fallback
  • Member versus guest pricing via booker_type flag
  • Cancellation deadline enforcement with late fees and force-cancel
  • No-show registration with policy-driven fee, blocked after check-in
  • QR-code check-in with per-booking check_in_token
  • Real-time per-court, per-slot availability grid
  • Bookable lighting and heating amenities with surcharge calculation

En la práctica

A member checks the club app on her phone after work, sees on the real-time grid that court 3 is free from 19:00, and books an hour with lighting enabled. The engine applies the member tariff plus the lighting surcharge and confirms instantly. Her confirmation email contains a QR code.

At the venue she scans the QR at the court terminal, which marks her checked in. A guest in her group cannot make it and tries to cancel ten minutes before the slot — past the two-hour deadline — so the late-cancel fee applies. After the session a different guest who never showed up is registered as a no-show, triggering the no-show fee from the venue's cancellation policy.

The whole interaction happens without staff involvement and is reflected on the calendar in real time.

Funcionalidades de este subsistema

9
ID Status Funcionalidades
F07.06.01 Entregado Per-court booking with calendar (per-court time slots, calendar view, date/court filtering, public availability endpoint) ✅ PL-F0706a
F07.06.02 Entregado Recurring bookings (weekly/biweekly/monthly series with conflict-aware expansion, cancel propagation) ✅ PL-F0706a
F07.06.03 Entregado Price per court and hour (court-specific pricing with default fallback, auto-calculation from venue config) ✅ PL-F0706a
F07.06.04 Entregado Member price vs guest price (booker_type: member\ guest, differentiated rates, auto-applied pricing) | ✅ PL-F0706a
F07.06.05 Entregado Cancellation with deadline (venue cancellation policy, deadline enforcement, late fees, force cancel option) ✅ PL-F0706a
F07.06.06 Entregado No-show registration with cost (POST /no-show, fee from cancellation policy no_show_fee_percent, blocks if checked in) ✅ PL-F0706b
F07.06.07 Entregado QR code for court check-in (check_in_token per booking, GET /check-in-token, POST /check-in with token validation) ✅ PL-F0706b
F07.06.08 Entregado Real-time availability (GET /public/venues/{id}/real-time-availability — per-court, per-slot grid with configurable duration) ✅ PL-F0706b
F07.06.09 Entregado Lighting and heating per court (bookable) (court.heating field, amenity surcharges in pricing, validation against court capabilities) ✅ PL-F0706b

Partes interesadas que necesitan este subsistema

Aparece en 1 análisis de partes interesadas