PROTOTYPE Clickable mockup · simulates the finished app ◃ Product overview
Petanque Life Brasserie · admin
AB

Table booking

The same booking model regardless of channel — online · phone · email · drop-in · walk-in all land in the same truth with overlap protection. The court/table + core booking is inherited from the venue domain; party and pre-ordered food/drink are added here.

14
Bookings today
82%
Table occupancy tonight
46%
With pre-order
2
Walk-ins in queue
Today's bookings & pre-orders — all channels
All channels ▾ All tables/courts ▾
Table / courtTimePartyPers.ChannelStatusPayment
Court 1 · Centre
Lunch menu ×2, beer ×2, non-alcoholic ×2
12:00–13:30 Nordvik family 4 online Served Paid ✎ · +order · ✕
Court 1 · Centre
Prawn sandwich ×2, coffee ×2
13:30–15:00 Ida Sjöström 2 phone Table ready Not paid ✎ · +order · ✕
Court 2
Sharing platter ×2, wine ×1 btl, beer ×3
12:30–14:00 Team Sjöstad (afterwork) 6 mail In the kitchen Invoice ✎ · +order · ✕
Court 3
Fries ×1, soft drink ×3
13:00–14:00 Walk-in · Kjell 3 walk-in Awaiting food Not paid ✎ · +order · ✕
Bar table 1
— (no pre-order)
14:00–15:30 Drop-in · Astrid 2 drop-in Booked Not required ✎ · +order · ✕
Overlap protection: a phone or manual booking that clashes with an existing booking is rejected immediately (optimistic lock, ETag) — double booking is impossible regardless of channel. The waitlist promotes automatically on cancellation.
New table booking — all fields
1 Table / court & time the core booking is inherited from the venue domain (overlap protection)
2 Party & contact
3 Pre-order — food & drink tied to the booking · generates a kitchen ticket · rolls into the total Open the menu →
ProductQuantityUnit priceStationAllergens
Lunch menu (today's) 145 kr Kitchen Gluten
Prawn sandwich 135 kr Kitchen Shellfish, gluten
Beer 40 cl (draught) 79 kr Bar Alcohol
Non-alcoholic 39 kr Bar
Pre-order: 740 kr
4 Policy, payment & total
Court rental (13:30–15:00 · member)180 kr Pre-order (food & drink)740 kr Total to pay920 kr
Payment recipient is resolved via payment-config → the payment is created centrally (subject_type='brasserie_booking'). The revenue is emitted as a RevenueEvent to bookkeeping — no direct write.