Advanced Features
This guide covers advanced configuration features including multi-tenant setup, capacity pools, waiver management, notification configuration, and tax setup.
Overview
Advanced features provide enterprise-level capabilities:
- Multi-Tenant Management: Managing multiple tenant organizations
- Capacity Pools: Shared capacity across resources
- Waiver Management: Digital waivers and compliance
- Notification Configuration: Email and SMS setup
- Tax Configuration: Tax rules and calculation
- Sandbox Mode: Test environment without real transactions
- Auto-Reschedule Engine: Automatic conflict resolution
Multi-Tenant Management
Understanding Multi-Tenancy
The system is designed as a multi-tenant SaaS platform where:
- Each tenant has complete data isolation
- Tenants cannot access each other's data
- Each tenant operates independently
- Shared infrastructure, separate data
Tenant Structure
Tenant Hierarchy:
Tenant
├── Sites (multiple physical locations)
│ ├── Products
│ ├── Resources
│ └── Schedules
└── Configuration
├── Policies
├── Pricing
└── Settings
Creating Tenants
Tenant Information:
- Tenant ID: Unique identifier
- Tenant Name: Organization name
- Default Locale: Language preference
- Default Currency: Base currency
- Status: Active or inactive
Tenant Configuration:
- Default timezone
- Business settings
- Policy defaults
- Notification preferences
Multi-Site Management
Managing Multiple Sites:
- Each tenant can have multiple sites
- Sites operate independently
- Shared configuration possible
- Site-specific overrides available
Site Configuration:
- Site name and address
- Timezone per site
- Site-specific policies
- Independent schedules
- Site-specific resources
Common Multi-Site Scenarios:
- Multiple venue locations
- Different timezones
- Regional pricing differences
- Independent operations
Per-Site Payment Credentials
By default every site under a tenant charges through the tenant's payment gateway credentials. When a site needs to settle into its own Stripe account or its own Paytrail merchant (for example, franchised or separately-owned venues under one tenant), you can give that site its own credentials in the Site Payment Settings card.
What you can configure per site:
- Stripe — publishable key, secret key, and webhook secret
- Paytrail — merchant ID and secret key
- An Enable custom payments toggle that must be on for the site credentials to take effect
How resolution works:
Credentials are resolved for each booking in a fixed precedence — site → tenant → environment:
- If the booking's site has Enable custom payments on and a key for the provider, that site key is used.
- Otherwise it falls through to the tenant's credentials.
- Paytrail may then fall through to the platform environment credentials; Stripe never falls back to the platform key — an unconfigured site/tenant simply reports "not configured" rather than charging into the platform account.
This same precedence applies to charges, refunds, group / mixed-tender payments, and the site-aware Paytrail stale-payment poller, so a payment and its later refund always settle against the same account.
Security:
- Secret keys and webhook secrets are encrypted at rest (same encryption path as tenant credentials) and are never returned in plaintext when the settings are read back — the form shows them masked.
- A site with no settings row, or with Enable custom payments off, contributes no site-level credentials and behaves exactly as before (tenant credentials are used). Existing single-account tenants need no changes.
Tenant Isolation
Data Isolation:
- Row-level security (RLS) enforced
- Database-level tenant filtering
- API-level tenant validation
- Complete data separation
Isolation Guarantees:
- Cannot access other tenant data
- API requests require tenant context
- Database queries filtered automatically
- Cross-tenant operations prevented
Capacity Pools
Capacity pools allow multiple resources to share a common capacity limit.
Understanding Capacity Pools
What are Capacity Pools?
- Shared capacity across resources
- Common limit for multiple resources
- Used when resources share availability
- Flexible capacity management
Use Cases:
- General admission slots
- Shared equipment pools
- Flexible room assignments
- Overflow capacity management
Creating Capacity Pools
Required Information:
- Pool Name: Descriptive name
- Pool Type: Shared, dedicated, overflow, priority, waitlist
- Total Capacity: Maximum capacity limit
- Site (optional): Site-specific pool
Pool Configuration:
- Overbooking allowed
- Overbooking percentage
- Waitlist enabled
- Auto-release timing
- Allocation strategy
Pool Types
Shared Pool
- Multiple resources share capacity
- First-come-first-served
- Common availability
- Example: General admission
Dedicated Pool
- Reserved capacity
- Specific resources only
- Guaranteed availability
- Example: VIP areas
Overflow Pool
- Additional capacity when primary full
- Used for peak times
- Flexible allocation
- Example: Extra equipment
Priority Pool
- Priority-based allocation
- Weighted access
- Different access levels
- Example: Members vs. general
Waitlist Pool
- Capacity beyond normal limit
- Waitlist management
- Auto-allocation when available
- Example: High-demand products
Pool Configuration Options
Allocation Strategies:
- First-Come-First-Served: Standard booking order
- Priority-Based: Weighted by priority
- Round-Robin: Distribute evenly
- Weighted: Custom weighting rules
Overbooking Settings:
- Allow overbooking (yes/no)
- Overbooking percentage
- Maximum overbooking limit
- Overbooking handling
Waitlist Settings:
- Enable waitlist
- Waitlist size limit
- Auto-notification
- Priority handling
Linking Resources to Pools
Assigning Resources:
- Create capacity pool
- Edit resource
- Select capacity pool
- Resource uses pool capacity
Pool Capacity:
- Resources draw from pool
- Pool capacity shared
- Total bookings limited by pool
- Individual resources can have own limits
Pool Monitoring
Pool Metrics:
- Current utilization
- Available capacity
- Reserved capacity
- Allocation history
Pool Reports:
- Utilization trends
- Peak usage periods
- Overbooking statistics
- Waitlist metrics
Waiver Management
Waivers are legal documents customers must accept for certain activities.
Understanding Waivers
What are Waivers?
- Legal consent forms
- Risk acknowledgment
- Activity-specific requirements
- Compliance documentation
When Required:
- High-risk activities
- Legal requirements
- Age restrictions
- Special conditions
Creating Waiver Templates
Step 1: Basic Information
- Template Name: Identifier
- Version: Version number (for updates)
- Content: Waiver text (HTML/markdown)
- Locale: Language version
Step 2: Configuration
- Requires Signature: Digital signature required
- Applicable For: All, specific products, specific sites
- Scope IDs: Which products/sites require this
Step 3: Content
- Legal text
- Terms and conditions
- Risk acknowledgment
- Signature section
Multi-Language Support:
- Create templates per language
- Same template, different locales
- Automatic selection by customer locale
Waiver Versions
Version Management:
- Templates have versions
- Track version history
- Old signatures preserved
- New bookings use latest version
Versioning Rules:
- Increment version for changes
- Old versions remain accessible
- Signatures linked to version
- Compliance maintained
Waiver Signing
Digital Signatures:
- Customer signs electronically
- Signature captured and stored
- Timestamp recorded
- Legal validity maintained
Signature Process:
- Customer views waiver
- Reads terms
- Provides signature
- Signature stored
- Linked to booking
Signature Storage:
- Secure storage
- Immutable records
- Audit trail
- Compliance ready
Waiver Compliance
Compliance Features:
- Required waivers enforced
- Signature validation
- Age verification
- Guardian signatures for minors
Audit Trail:
- All signatures logged
- Timestamp records
- IP address tracking
- User agent information
Managing Waivers
Template Management:
- Create new templates
- Update existing templates
- Deactivate old templates
- Version control
Waiver Analytics:
- Signing rates
- Version usage
- Compliance statistics
- Missing signatures
Notification Configuration
Notifications keep customers informed about their bookings.
Notification Types
Booking Notifications:
- Confirmation emails
- Reminder notifications
- Cancellation notices
- Reschedule confirmations
Operational Notifications:
- Hold expiration warnings
- Payment confirmations
- Refund notifications
- No-show alerts
Notification Channels
Email Notifications:
- Primary communication channel
- HTML email templates
- Branded templates
- Multi-language support
SMS Notifications:
- Text message alerts
- Short, concise messages
- Important updates only
- Opt-in required
Push Notifications:
- Mobile app notifications
- Real-time alerts
- Requires mobile app
- User preferences
Configuring Notifications
Notification Settings:
- Enable/disable per type
- Delivery preferences
- Timing settings
- Language selection
Template Configuration:
- Customize email templates
- Brand colors and logos
- Message content
- Personalization variables
Notification Preferences:
- Default language
- Business contact information
- Support email/phone
- Booking website URL
Notification Templates
Template Variables:
- Customer name
- Booking details
- Dates and times
- Pricing information
- Cancellation policies
Customization:
- HTML templates
- Brand styling
- Logo and images
- Footer information
Notification Scheduling
Automatic Notifications:
- Sent at key events
- Configurable timing
- Follow-up sequences
- Reminder schedules
Reminder Settings:
- Days before booking
- Hours before booking
- Multiple reminders
- Custom timing
Follow-Up Notifications:
- After booking completion
- Feedback requests
- Rebooking suggestions
- Loyalty information
Notification Providers
Email Provider (Brevo):
- Transactional emails
- Template management
- Delivery tracking
- Analytics
SMS Provider (Twilio):
- Text messaging
- Delivery confirmations
- International support
- Usage tracking
Tax Configuration
Tax configuration defines how taxes are calculated and applied to bookings.
Understanding Tax Configuration
Tax Modes:
- INCLUSIVE: Tax included in price (VAT-style)
- EXCLUSIVE: Tax added to price (Sales Tax style)
Tax Hierarchy:
- Tenant-level defaults
- Site-level overrides
- Product-level overrides (future)
Creating Tax Configuration
Step 1: Basic Information
- Tax Name: Display name (e.g., "VAT", "Sales Tax")
- Tax Rate: Percentage (e.g., 0.20 for 20%)
- Tax Mode: Inclusive or Exclusive
- Jurisdiction: Country/state/city code
Step 2: Scope
- Tenant-Wide: Applies to all sites
- Site-Specific: Override for specific site
Step 3: Applicability
- Base Price: Tax base booking price
- Add-ons: Tax add-on items
- Shipping: Tax shipping costs (if applicable)
Step 4: Validity Period
- Effective From: Start date
- Effective To: End date (optional)
Tax Modes Explained
INCLUSIVE Mode (VAT-style)
- Tax included in displayed price
- Common in Europe
- Example: €100 includes €20 VAT (20%)
Calculation:
Display Price: €100 (includes tax)
Tax Rate: 20%
Tax Amount: €16.67 (20% of €83.33)
Net Price: €83.33
EXCLUSIVE Mode (Sales Tax style)
- Tax added to base price
- Common in US
- Example: €100 + €8 tax = €108
Calculation:
Base Price: €100
Tax Rate: 8%
Tax Amount: €8
Total Price: €108
Jurisdiction Support
Jurisdiction Types:
- Country: Country-level tax (e.g., "GB", "US")
- State/Province: Regional tax (e.g., "US-CA", "CA-ON")
- City: Local tax (e.g., "US-CA-LA")
- Custom: Custom jurisdiction codes
Jurisdiction Hierarchy:
- Most specific applies
- Site location determines jurisdiction
- Customer location considered (future)
Tax Calculation
What Gets Taxed:
- Base booking price
- Add-ons (configurable)
- Shipping (if applicable)
- Service fees (if applicable)
Tax Exemptions:
- Certain products
- Specific customer types
- Jurisdiction exemptions
- Special circumstances
Tax Reporting
Tax Reports:
- Tax collected by period
- Breakdown by jurisdiction
- Tax-exempt transactions
- Compliance reports
Tax Compliance:
- Accurate tax calculation
- Jurisdiction tracking
- Audit trail
- Export for accounting
Advanced Configuration Workflows
Setting Up Multi-Tenant Environment
Initial Setup:
- Create tenant organization
- Configure default settings
- Set up first site
- Configure policies
- Set up pricing
- Test booking flow
Adding Sites:
- Create new site
- Configure site settings
- Set timezone
- Link products
- Configure resources
- Set up schedules
Configuring Capacity Pools
Pool Setup:
- Create capacity pool
- Set total capacity
- Configure allocation strategy
- Link resources to pool
- Test capacity allocation
- Monitor utilization
Implementing Waivers
Waiver Setup:
- Create waiver template
- Add content (legal text)
- Configure applicability
- Test waiver display
- Verify signature capture
- Review compliance
Notification Setup
Email Configuration:
- Configure Brevo/SendGrid
- Set up email templates
- Customize branding
- Test email delivery
- Configure preferences
SMS Configuration:
- Configure Twilio
- Set up SMS templates
- Configure opt-in
- Test SMS delivery
- Monitor usage
Tax Setup
Tax Configuration:
- Determine tax mode (inclusive/exclusive)
- Identify jurisdictions
- Set tax rates
- Configure applicability
- Test tax calculation
- Verify reporting
Best Practices
Multi-Tenant Management
- Clear Naming: Use descriptive tenant names
- Consistent Structure: Standardize site setup
- Policy Templates: Create reusable policy templates
- Regular Audits: Verify tenant isolation
Capacity Pool Management
- Monitor Utilization: Track pool usage regularly
- Optimize Allocation: Adjust strategies based on usage
- Plan Capacity: Forecast demand
- Document Rules: Document allocation logic
Waiver Management
- Legal Review: Have waivers reviewed by legal
- Version Control: Track all version changes
- Clear Language: Write clearly for customers
- Compliance: Ensure regulatory compliance
Notification Management
- Test Templates: Test all notification types
- Monitor Delivery: Track delivery rates
- Personalize: Use customer information
- Respect Preferences: Honor opt-outs
Tax Management
- Accurate Rates: Keep tax rates current
- Jurisdiction Updates: Update for law changes
- Regular Audits: Verify tax calculations
- Compliance: Maintain compliance records
Troubleshooting
Multi-Tenant Issues
Data Leakage:
- Verify RLS policies
- Check tenant context
- Review API guards
- Test isolation
Configuration Issues:
- Verify tenant settings
- Check site configuration
- Review policy inheritance
- Test tenant switching
Capacity Pool Issues
Capacity Not Allocating:
- Verify pool configuration
- Check resource links
- Review allocation strategy
- Test booking flow
Overbooking Issues:
- Verify overbooking settings
- Check pool limits
- Review allocation rules
- Monitor utilization
Waiver Issues
Waivers Not Showing:
- Check template active status
- Verify applicability rules
- Review product configuration
- Test waiver retrieval
Signature Issues:
- Verify signature capture
- Check storage permissions
- Review signature format
- Test signing process
Notification Issues
Emails Not Sending:
- Verify provider configuration
- Check template syntax
- Review delivery logs
- Test email delivery
SMS Not Sending:
- Verify Twilio configuration
- Check opt-in status
- Review message format
- Test SMS delivery
Tax Issues
Tax Not Calculating:
- Verify tax configuration active
- Check jurisdiction matching
- Review tax mode setting
- Test tax calculation
Wrong Tax Amount:
- Verify tax rate
- Check tax mode
- Review applicability rules
- Test with sample booking
Sandbox Mode
Sandbox mode allows testing booking flows without affecting production data or sending real notifications/payments.
Understanding Sandbox Mode
What is Sandbox Mode?
- Test environment for the tenant
- No real notifications sent
- No real payments processed
- Clear visual indicators in responses
- Complete audit logging
Use Cases:
- Testing new product configurations
- Training new staff
- Demonstrating system to stakeholders
- Integration testing
Enabling Sandbox Mode
Toggle Sandbox Mode:
- Admin with elevated permissions required
- Toggle via admin panel or API
- Takes effect immediately
- All subsequent operations in sandbox
API Endpoint:
POST /api/v1/admin/tenants/sandbox/toggle
Authorization: Bearer <admin-token>
{
"enabled": true,
"reason": "Testing new pricing configuration"
}
Sandbox Behavior
Notifications:
- Emails are logged but not sent
- SMS messages are logged but not sent
- Push notifications are simulated
- All notification attempts recorded
Payments:
- Stripe test mode automatically used
- No real charges to cards
- Payment flows work normally
- Refunds simulated
Bookings:
- Bookings created normally
- Visible in admin panel
- Marked as sandbox bookings
- Can be cleaned up easily
Sandbox Indicators
API Responses:
All responses include sandbox indicator when active:
{
"success": true,
"data": { ... },
"sandbox": true,
"sandboxMessage": "This operation was performed in sandbox mode"
}
Admin Panel:
- Clear banner indicating sandbox mode
- Visual indicators on bookings
- Sandbox badge on relevant screens
Sandbox Best Practices
- Document Testing: Log what you tested
- Clean Up: Remove test data after testing
- Limited Access: Restrict sandbox toggle permissions
- Regular Disable: Don't leave sandbox enabled long-term
Cancellation & Reschedule Policies
Each site has configurable cancellation and reschedule policies stored as JSON. These are set at the site level — different brands can have different policies.
Cancellation Policy
The cancellation policy supports sliding-scale fee tiers based on how far in advance the cancellation is made:
| Time Before Event | Fee | Customer Receives |
|---|---|---|
| More than 7 days | 0% (free) | Full refund |
| 3–7 days | 50% | Half refund |
| Less than 3 days | 100% | No refund |
Policy fields:
| Field | Description |
|---|---|
fee_calculation | SLIDING_SCALE or NO_FEE |
sliding_scale_rules | Array of {threshold_value, threshold_unit, fee_percentage} |
auto_refund_enabled | Automatically process refunds |
refund_processing_days | Business days for refund processing (default: 5) |
Reschedule Policy
| Field | Description |
|---|---|
allowed | Whether rescheduling is permitted |
minimum_notice_value | Minimum notice required (e.g., 2) |
minimum_notice_unit | HOURS or DAYS |
capacity_check_required | Verify capacity at new time |
max_reschedules_per_booking | Maximum reschedules allowed (default: 3) |
Policies are configured per site and applied automatically during booking cancellation and reschedule flows.
Auto-Reschedule Engine
The auto-reschedule engine automatically handles booking conflicts when resources become unavailable.
Understanding Auto-Reschedule
What is Auto-Reschedule?
- Automatic conflict detection
- Alternative slot suggestions
- Admin approval workflow
- Customer notification
- Complete audit trail
When Triggered:
- Resource enters maintenance
- Schedule changes affect bookings
- Capacity reductions
- Resource deactivation
Reschedule Strategies
SAME_DAY Strategy:
- Finds alternative on same date
- Minimal disruption to customers
- Preferred when available
- Default strategy
NEARBY Strategy:
- Looks within configurable window
- Usually ±3 days from original
- Good for flexible activities
- Respects customer preferences
FLEXIBLE Strategy:
- Broader search window
- Considers capacity optimization
- May suggest different times
- Best for high-demand periods
CUSTOMER_CHOICE Strategy:
- Presents multiple options
- Customer selects preferred time
- Higher engagement required
- Best for VIP bookings
Configuration
Tenant-Level Settings:
{
"autoRescheduleEnabled": true,
"defaultStrategy": "SAME_DAY",
"searchWindowDays": 7,
"requireAdminApproval": true,
"notifyCustomerAutomatically": true
}
Site-Level Overrides:
- Override strategy per site
- Different windows per location
- Custom approval workflows
Reschedule Workflow
Step 1: Conflict Detection
- Resource marked unavailable
- System identifies affected bookings
- Suggestions generated automatically
Step 2: Admin Review (if enabled)
- Admin sees pending suggestions
- Reviews each affected booking
- Approves, modifies, or rejects
Step 3: Customer Notification
- Customer notified of change
- New booking details provided
- Option to decline (if configured)
Step 4: Execution
- Booking moved to new slot
- Capacity updated
- Audit trail created
Managing Suggestions
Viewing Suggestions:
GET /api/v1/admin/reschedule/suggestions
Authorization: Bearer <admin-token>
Approving Suggestions:
POST /api/v1/admin/reschedule/suggestions/{id}/approve
Authorization: Bearer <admin-token>
Bulk Operations:
- Approve multiple suggestions
- Reject with reason
- Generate alternative suggestions
Customer Self-Service
Customer Endpoints:
- View pending reschedule
- Accept proposed time
- Decline and request alternatives
- Contact support
Customer Portal:
- Clear notification of reschedule
- Easy acceptance flow
- Alternative time selection
- Cancellation option
Auto-Reschedule Best Practices
- Set Reasonable Windows: Don't search too far ahead
- Use Approval: Review before executing
- Clear Communication: Notify customers promptly
- Track Success: Monitor acceptance rates
- Handle Declines: Have fallback procedures
Next Steps
- Review Operations for daily management
- Learn about Pricing Configuration for pricing rules
- Explore Catalog Management for product setup
- Check Reports for advanced analytics