Corporate & Social Events
At a glance
Corporate & Social Events makes petanque a turnkey hospitality product for offices, weddings, birthdays, anniversaries, and brand activations. Clients book packaged experiences combining venue, equipment, catering, and a professional animator in a few clicks, while clubs and partner venues unlock a steady non-tournament revenue stream from their terrains, clubhouses, and shaded courtyards on weekday and weekend slots alike.
How it works
Clubs, hotels, and dedicated venues publish event packages with capacity, duration, included terrains, and price tiers (silver, gold, platinum) covering increasing levels of service such as catering, branded scoreboards, prize ceremonies, and photographer add-ons. The package builder lets organisers set rules — minimum group size, lead time, weekday versus weekend pricing, seasonal surcharges, and refund policy — and exposes live availability through the same calendar layer used by tournaments and tour bookings, so double-bookings are impossible. Equipment rental adds boules sets, mats, measuring tools, scoreboards, lighting, and tents to any package, with pricing per item and per day; a check-in/check-out flow tracks condition and lost-equipment fees.
The instructor and animator marketplace lets certified coaches and entertainers list profiles with languages, formats (initiation, tournament, show match, kids), and rates; clients can attach an animator to any package or request a custom quote. Corporate event booking adds invoice billing, purchase-order references, VAT handling per country, and group attendee uploads that produce printable name tags with team assignments. Private event organisation supports custom run-of-show templates for weddings (welcome drink, mixed teams, prize for the bride and groom) and parties (children's tournament, doublette finale, dinner).
All bookings issue digital contracts, deposits, and final-balance invoices, and feed reviews back to the host venue.
Key capabilities
- Tiered event packages (silver, gold, platinum) with rules and seasonal pricing
- Equipment rental with item tracking, condition checks, and damage fees
- Instructor and animator marketplace with profiles, languages, and rates
- Corporate billing with invoices, purchase orders, and country VAT handling
- Custom run-of-show templates for weddings, birthdays, and brand activations
- Live shared availability calendar across tournaments, tours, and private events
- Digital contracts with deposit, final balance, and post-event reviews
In practice
An office manager planning a 60-person team-building afternoon searches the city, picks a club with a gold package, adds a French-speaking animator, three boules sets, and catering, then pays a deposit by company card. The club confirms the booking and assigns three terrains for the chosen Friday; the animator receives the brief with team list and run-of-show. On the day, attendees check in with QR badges produced from the uploaded list, equipment is signed out, and the animator runs an initiation followed by a doublette tournament.
After the event, the company receives a VAT invoice for the balance, photos, a leaderboard PDF, and a review prompt that the manager fills in with five stars.
Features in this subsystem
11| ID | Status | Features |
|---|---|---|
| F13.04.01 | Shipped | Corporate event booking (team building, company tournaments) — private_event_package_template (kind='corporate') + private_event_booking med prislås (pricing_model/unit_price_minor/currency/deposit_pct/gästspannet snapshotas ur mallen, D-3) och statusmaskinen enquiry → deposit_pending → confirmed, cancelled terminal. Ingen approval_request: en företagsdag är ett avtal, inte ett ärende ✅ 767f53a2.m-10 (t-1 backend + fixtur; adminkonsolen /event-bokningar i t-2) |
| F13.04.02 | Shipped | Private event organization (weddings, parties) — samma kedja med kind ∈ {wedding, party, conference}; bröllopets tomma banscope (court_ids = '{}') betyder hela anläggningen, upplöst i debiteringsögonblicket (D-6), så en bana som läggs till efteråt också blockeras ✅ 767f53a2.m-10 (t-1) |
| F13.04.03 | Planned | Equipment rental for events ⊘ ingen ägare — m-10 bygger den inte (uttryckligt icke-mål i milestones/767f53a2.m-10/spec.md): mallens *ingår*-text är arrangörens egna ord, inte en artikelkatalog. D-EQUIP äger PL:s EGEN uthyrning av poängtavlekit, inte en anläggnings festutrustning |
| F13.04.04 | Planned | Event instructor/animator booking ⊘ ingen ägare — m-10 bygger den inte (uttryckligt icke-mål): huset har inget instruktörsregister med tillgänglighet att boka mot (m-3:s camp-instruktörer är arrangörens uppgift, user_ref alltid null). En bokningsknapp mot en tom katalog vore en yta som ljuger |
| F13.04.05 | Shipped | Event package pricing and booking — pricing_model (per_person|flat) + price_minor/currency på mallen; totalen härleds av events.PrivateEventTotal och depositionen av den återanvända events.SplitDeposit (BR29.01, default 30 %, 0 = ingen deposition ⇒ bokningen bekräftas utan betalrad i samma rutt). Ingen handler räknar en procent, ingen klient sätter ett pris (ett belopp i kroppen ⇒ 422) ✅ 767f53a2.m-10 (t-1) |
| F13.04.06 | Shipped | VIP hospitality tiers (Bronze/Silver/Gold/Platinum) per event — vip_package per major-event med tier ur den slutna mängden, i18n-namn, inclusions[] som DDL-check (en okänd förmån går inte att lagra — ytan skriver ut den i klartext för en betalande gäst), pris + deposit_pct + final_payment_due_at som paketets egna fält, och is_published som flippas ENBART via POST …/publish|unpublish. Depositionen (BR28.01) och slutbetalningen (BR28.02) körs som fall 2-betalningar mot arrangörens EGET payee-konto (PAY-2-resolvat), och F1-7-svepet vip_final_payment_sweep initierar residualen vid förfallodagen — det debiterar aldrig tyst (D-9; ett off-session-mandat ägs av PAY-3) ✅ 767f53a2.m-9 (t-1) |
| F13.04.07 | Shipped | Suite-allokering med oversubscription-skydd — event_suite (kapacitet, view_type, amenities[] som DDL-check) och POST /v1/vip-packages/{id}/allocate-suite: select … for update på suiteraden FÖRE mätningen sum(seats) över suitens levande paket, i SAMMA transaktion som skrivningen ⇒ två samtidiga allokeringar mot samma sista platser ger exakt en 200 och en 422 vip_suite_oversubscribed (BR28.03, kod oförändrad). Samma disciplin på bokningen: paketets rest mäts under for update på paketraden ⇒ 422 vip_capacity_exceeded (BR28.04). Flera paket får dela en suite så länge summan ryms; ett if i handlern hade sett grönt ut sekventiellt och fallit under samtidighet ✅ 767f53a2.m-9 (t-1) |
| F13.04.08 | Shipped | VIP concierge content pack — vip_package.concierge_content (jsonb, app-validerad form) är arrangörens REDIGERADE innehåll: synligt för arrangören och i bokningens läsvy, aldrig i den publika projektionen (det tillhör den betalande gästen). Bokförd avvikelse (D-11): *intro-video, talking points och player storylines* som GENERERAT innehåll byggs inte — ingen domän i huset producerar dem, och en knapp som fabricerar text är en yta som ljuger; mockupens *"Generate today's package"* finns därför inte ✅ 767f53a2.m-9 (t-1) för det redigerade paketet · ⊘ ingen ägare för genererat innehåll |
| F13.04.09 | Shipped | Wedding/corporate package templates per venue (photogenic profile, availability, deposit-flow) — mallen bär photogenic_profile_i18n (publiceringsgrindens andra krav, visas publikt), availability_note_i18n (en TEXT, ingen regelmotor) och deposit_pct; tillgängligheten är en rådgivande fråga (POST /v1/private-events/availability) över båda källorna (icke-cancelled court_bookings + planned|confirmed court_allocations, BR29.02) medan det bindande skyddet är GiST-EXCLUDE-constrainten ⇒ 409 venue_already_booked under samtidighet (D-5) ✅ 767f53a2.m-10 (t-1) |
| F13.04.10 | Shipped | Private-event QR-checkin-kit (A4 4-up A6 cards, signed JWT per gäst) — GET …/qr-kit.pdf renderar ceil(guest_count/4) A4-sidor on-demand i Go (bokförd avvikelse D-8: ingen blob, ingen signed URL — inget artefaktläckage och ingen inaktuell fil), korten bär m-8:s tokenform med EGET domänprefix och bokningens eventfönster, POST …/rotate-qr dödar varje utskrivet kort och POST /v1/private-events/scan fäller verdiktet mot RADEN + skriver en private_event_checkin_scan-rad (incheckade MÄTS som distinkta guest_idx med allowed, D-9). Saknad master ⇒ 503, aldrig ett osignerat kort ✅ 767f53a2.m-10 (t-1); adminflikens incheckningsläge i t-2 (⊘ ingen app-skanner — D-9) |
| F13.04.11 | Shipped | Photogenic venue profile + discover-grid (heritage, garden, capacity-filter) — GET /v1/public/private-event-packages (ingen auth, ingen tenant-header) med serverns filter kind/country/guests och en STÄNGD projektion (code, kind, name, photogenic_profile, includes, price, gästspannet, venue {name, city, country}) — aldrig tenant_id, court_ids, is_published, deposit_pct eller kontaktdata. Förfrågan (POST /v1/public/private-event-enquiries) går bakom klubb-inquiryns tre mjuka abuse-grindar. Ingen publik kassa (D-10): ett privat event prissätts i dialog ✅ 767f53a2.m-10 (t-1 backend + kontrakt; den publika ytan i t-2) |
Stakeholders who need this subsystem
Surfaces in 1 stakeholder analyses