Pool Booking
Pool booking is the enterprise reservation mode for services where the customer cares about getting enough matching inventory, not a specific named resource. Typical examples are lanes, tables, treatment rooms, rental kits, or parking spaces.
PrimeCal keeps the configuration on the resource type, then allocates the first available concrete resources when the reservation is created.
Time to complete: 10-15 minutes
Difficulty: Intermediate
When To Use Pool Booking
Use pool booking when all of the following are true:
- the service is sold as a category, not as one named item
- several concrete resources can satisfy the same booking
- staff want one service definition, one pricing rule, and automatic allocation
- the public booking route should show aggregate availability such as
2 spots remaining
Keep the legacy resource-token route for single-resource links only. Multi-item
pool requests belong on the organisation booking route, for example
/book/acme-spa.
Choose The Right bookingMode
PrimeCal stores booking behavior on resourceType.bookingMode.
| Mode | What it means | Best for |
|---|---|---|
SINGLE_RESOURCE | Every reservation must stay on one concrete resource. | Named rooms, courts, desks, or staff appointments. |
POOL | The customer books the service, and PrimeCal allocates the first available matching resources. | Tables, lanes, rental kits, or any interchangeable inventory. |
BOTH | Staff or public clients can either pick a specific resource or request any available resources from the pool. | Mixed workflows where named resources matter sometimes, but not always. |
For a pool-style public journey, pair POOL or BOTH with the
organisation-scoped booking page and publish more than one active resource of
the same type.
Admin Setup Checklist
- Open the active organisation's reservations workspace.
- Create or edit the resource type.
- Set
bookingModetoPOOLorBOTH. - Add the concrete resources that belong to that pool.
- Publish the organisation booking page instead of sharing per-resource token links.
- If the service is paid, enable pricing on the same resource type.
Pricing Mathematics
Pool booking does not create a separate pricing table. PrimeCal still prices the reservation from the resource type.
The current quote formula is:
quotedTotalAmount = priceAmount * assignedResourceCount * durationHours
Notes:
priceAmountis stored in minor currency units.assignedResourceCountis the number of concrete resources PrimeCal actually allocates from the pool.durationHoursis derived fromendTime - startTime.- rounding uses deterministic banker-style half-even rounding in the pricing service.
Example:
priceAmount = 12500(125.00)assignedResourceCount = 2duration = 1.5 hours
Result:
quotedTotalAmount = 37500
The same quote snapshot is then stored on the reservation so later UI, Stripe, and audit flows all read the same amount.
Payment Behavior
Pool booking and paid booking work together:
- if
pricingEnabledis off, PrimeCal stores zero-value quotes - if
pricingEnabledis on, PrimeCal stores quote fields on the reservation - if
paymentRequiredis also on, the reservation stays inpending_paymentuntil Stripe confirms success through the webhook flow
For the broader payment journey, continue with Paid Bookings.
Screenshot Targets
Use these exact placeholder paths when you refresh the docs set:
| State | File | Purpose |
|---|---|---|
| Pool booking mode in admin editor | docs/assets/user-guide/enterprise-reservation-system/admin-resource-type-booking-mode-pool.png | Show bookingMode, pricing, and payment controls on one resource type. |
| Public pool availability grid | docs/assets/user-guide/enterprise-reservation-system/customer-pool-booking-availability-grid.png | Show aggregate slot availability with the quantity selector visible. |
| Public pool payment step | docs/assets/user-guide/enterprise-reservation-system/customer-pool-booking-payment-step.png | Show the server-derived total after a multi-resource pool selection. |
The local automation helper for these placeholders is
scripts/docs/capture-pool-booking-docs.cjs.