Package Design

Create multi-service packages that bundle accommodation, activities, spa, and other services into a single bookable product with flexible pricing and cross-business-unit revenue allocation.

Common Tasks

How to Create a Package (New Package, Build Package)

Create a new reservation package that bundles multiple services from one or more business units into a single product guests can book.

  1. Go to Packages in the left sidebar (under Reservations)
  2. Click New Package
  3. Fill in the package details:
    • Name — e.g. "7-Night Dive Safari"
    • Description — what the package includes
    • Package Type — category label (e.g. Standard, Luxury)
    • Currency — primary currency for pricing
  4. Set the Pricing Mode (see Key Concepts below for details):
    • Fixed — flat price per guest regardless of component costs
    • Dynamic — sum of component costs minus an optional discount
    • Duration-Scaled — per-night rate that decreases for longer stays
  5. Enter the Package Price (used by Fixed mode; Dynamic calculates from components)
  6. Set guest and night constraints: Min Guests, Max Guests, Min Nights, Max Nights
  7. Optionally set Valid From and Valid To dates for seasonal packages
  8. Click Save to create the package in Draft status

Result: The package is created in Draft status. You can now add components and configure pricing before activating it.

How to Add Components to a Package (Add Service, Add Activity)

Components are the individual services that make up a package — rooms, dive trips, meals, spa treatments, etc. Each component belongs to a specific business unit.

  1. Open the package in the Package Builder
  2. In the Components section, click Add Component
  3. A Service Picker opens — select a business unit, then pick a service
  4. The component is added with default values from the service (price, pricing model)
  5. Configure the component:
    • Display Name — override the service name for this package context
    • Component Price — the unit price for this component
    • Quantity — default quantity (e.g. 2 rooms, 1 activity)
    • Day Offset — which day of the stay this component starts (Day 0 = arrival)
    • Duration — how many days this component spans (leave empty to span the full stay)
    • Required — whether this component is mandatory
    • Customizable — whether the guest can modify dates, quantity, or resources at booking
  6. Drag components to reorder them using the drag handle on the left

Result: The component appears in the package builder with a pricing hint showing the calculated cost (e.g. "$100/night x 2 rooms x 3 nights = $600").

How to Set Up a Repeats-Daily Component (Daily Breakfast, Daily Cleaning)

Some services repeat every day of the stay — breakfast, room cleaning, daily activity passes. Use the Repeats Daily toggle to create one booking per day automatically.

  1. Add the service as a component (see above)
  2. Enable the Repeats Daily toggle on the component row
  3. Optionally set Day Offset to start the repetition from a specific day (e.g. offset 1 to skip the arrival day)
  4. Optionally set Duration to limit how many days it repeats (leave empty to repeat for the entire stay from the offset)

Result: When the package is booked, the system creates one reservation item per day for this component. For a 5-night stay with offset 0 and no duration limit, it creates 5 separate bookings. Revenue is split evenly across the days.

Note: The repeat day count is calculated as: if Duration is set, min(duration, nightCount - offset); otherwise nightCount - offset. A component at offset 2 in a 5-night stay repeats for 3 days.

How to Add Modifiers to a Component (Meal Plan, Equipment Upgrade)

Components can have modifiers that adjust pricing — meal plans for accommodation, equipment upgrades for activities, etc. Modifiers can be pre-selected (locked into the package) or marked as guest-choice (selected by the guest at booking time).

  1. In the component row, click the modifier picker (tags icon)
  2. Available modifier groups for that service are listed (e.g. "Meal Plan", "Equipment")
  3. Select an option from each group you want to include
  4. For each selected modifier, choose:
    • Pre-selected — this option is locked into the package; the guest gets it automatically and it affects the package price calculation
    • Guest Choice — the guest picks from available options during the reservation wizard; the price adjusts based on their choice

Result: Pre-selected modifiers are included in the package price calculation. Guest-choice modifiers appear in the Package Customization step of the reservation wizard.

How to Configure Revenue Allocation (Cross-BU Packages)

When a package contains services from multiple business units (e.g. hotel rooms from BU-A and dive trips from BU-B), configure how the package revenue is split.

  1. In the package builder, find the Revenue Allocation section
  2. Select the allocation method:
    • Proportional — revenue is split based on each component's base price (or custom allocation weight). If a room is 60% of the cost and activities are 40%, revenue splits 60/40
    • Transfer Price — non-primary BUs receive a fixed transfer price; the primary BU absorbs the difference. Useful when subsidiary costs are known
  3. For Transfer Price mode, set the Primary BU (the BU that receives the remainder) and a Transfer Price on each non-primary component
  4. For Proportional mode, optionally set a custom Allocation Weight on components to override the default (base price weighting)

Result: When the package is booked, journal entries automatically split revenue across business units using the configured method. Inter-BU settlements are created for the appropriate amounts.

How to Activate a Package (Publish Package, Go Live)

Packages start in Draft status and must be activated before they appear in the reservation wizard.

  1. Open the package in the Package Builder
  2. Ensure at least one component is added
  3. For Duration-Scaled packages, ensure Min Nights is set (validation will block activation otherwise)
  4. Click Activate

Result: The package status changes to Active and it becomes available for booking in the reservation wizard.

How to Duplicate a Package (Clone Package, Copy Package)

Create a copy of an existing package to use as a starting point for a variation (e.g. seasonal pricing, different guest tier).

  1. Go to Packages and find the package to duplicate
  2. Click Duplicate (or the duplicate icon in the actions menu)
  3. Optionally enter a New Name
  4. The duplicate is created in Draft status with all components copied

Result: A new Draft package is created with the same components and pricing configuration. Edit and activate when ready.

How to Archive a Package (Retire Package, Deactivate)

Remove a package from the booking catalog without deleting it. Archived packages are preserved for historical reporting.

  1. Open the package
  2. Click Archive

Result: The package status changes to Archived. It no longer appears in the reservation wizard but existing reservations using it are unaffected.

Note: A package with existing reservation applications cannot be deleted, only archived.

Key Concepts

Package Lifecycle (Draft, Active, Archived)

Packages have three statuses:

  • Draft — initial state; editable, not bookable. Add and configure components here
  • Active — published and available in the reservation wizard. Can be edited and re-saved
  • Archived — removed from booking, preserved for reporting. Existing bookings are unaffected

Pricing Modes

The pricing mode determines how the final package price is calculated from the components:

  • Fixed — the package has a flat price per guest, regardless of individual component costs. Set the Package Price field; this is multiplied by the guest count. Revenue is allocated back to components proportionally. Best for all-inclusive packages where you want a clean advertised price.
  • Dynamic — the price is the sum of all component base prices, minus an optional discount. Configure the discount as Percentage (e.g. 10% off the total) or Fixed Amount (e.g. $200 off). The final price adjusts automatically as components change. Best for flexible packages where pricing reflects actual service costs.
  • Duration-Scaled — the per-night component rate decreases for longer stays. Each component has a Duration Discount per Day field (e.g. $10/day). The effective unit rate formula is: max(0, unitPrice - discountPerDay x extraDays) where extraDays = nightCount - 1. For example, a $100/night room with $10/day discount: Night 1 = $100, Night 2 = $90, Night 3 = $80. Min Nights is required for this mode.

Components and Component Types

Each component links to a service from a specific business unit. Components have these key properties:

  • Component Price — the unit price (per night, per person, per session, etc. depending on the service's pricing model)
  • Quantity — default quantity (rooms, sessions, equipment units)
  • Day Offset — which day the component starts (0 = arrival day)
  • Duration — how many days the component spans; empty means it spans to the end of the reservation
  • Repeats Daily — creates one booking per day (see task above)
  • Required vs Optional — required components are always included; optional ones can be toggled by the guest
  • Customizable — allows guest to modify dates, quantity, or resource selection during booking
  • Display Order — drag-and-drop ordering in the package builder

Components inherit the pricing model from their service (PerNight, PerPerson, PerDay, PerUnit, Fixed, etc.). The pricing hint in the component row shows a contextual calculation, e.g. "$100/night x 2 rooms x 3 nights = $600" or "$50/person x 4 guests = $200".

Component Date Logic (Offsets and Durations)

Components use relative dates (offsets from reservation start) rather than absolute dates. This makes packages flexible across any booking date range:

  • No duration set — the component spans from its offset day to the reservation end date
  • Duration set — the component spans from offset day for the specified number of days
  • Repeats daily — repeat count = min(duration, nightCount - offset) if duration is set, otherwise nightCount - offset

Example: A 5-night package with: Room (offset 0, no duration = 5 nights), Dive Trip (offset 1, duration 1 = Day 2 only), Breakfast (offset 0, repeats daily, no duration = 5 days).

Revenue Allocation Methods

When a package spans multiple business units, the package price must be split into revenue for each BU. Two methods are available:

  • Proportional — each component's share = allocationWeight / totalWeight. By default, allocationWeight equals the component's base price, but can be overridden. The last component receives the rounding remainder to ensure the allocations sum exactly to the package price.
  • Transfer Price — non-primary BUs receive a fixed Transfer Price (or fall back to base price if not set). The Primary BU receives the remainder: packagePrice - sum(otherBU allocations). This is useful when you know the exact cost to "buy" services from subsidiary BUs.

Revenue allocations flow into the accounting system as journal entries: each BU receives a revenue credit proportional to its allocated share. Inter-BU receivables and payables are created for cross-BU settlements.

Itinerary Timeline

The package builder includes an Itinerary Timeline that visually shows each component mapped to days of the stay. This helps verify that offsets, durations, and repeating components line up correctly. The timeline updates in real time as you add or adjust components.

Package Modifiers (Pre-Selected vs Guest Choice)

Components can include service modifiers in two modes:

  • Pre-selected — baked into the package. The modifier's price adjustment is included when calculating the component's base price. The guest cannot change it
  • Guest Choice — presented to the guest in the reservation wizard's Package Customization step. The guest picks from available options and the price adjusts accordingly

Modifier adjustments can be Fixed ($) (add a dollar amount to the unit price) or Percentage (%) (add a percentage of the unit price).

Package Availability Checking

Before a package can be booked, the system checks:

  • Guest count is within Min Guests / Max Guests
  • Night count is within Min Nights / Max Nights
  • Current date is within Valid From / Valid To (if set)
  • Package status is Active
  • Each component has available resources for the requested dates

Component-level availability details are returned with error messages if any component cannot be fulfilled (e.g. "No rooms available for Oct 15-20").

Booking a Package (Reservation Wizard)

How Packages Work in the Reservation Wizard

When creating a reservation, the guest (or staff) can select a package instead of booking individual services:

  1. In the reservation wizard, on the Services step, select a package from the Packages tab
  2. The system initializes component bookings from the package definition, calculating dates from the reservation start date and component offsets
  3. If the package has customizable components or guest-choice modifiers, a Package Customization step appears
  4. In the customization step, the guest:
    • Selects resources for accommodation components (e.g. pick a room)
    • Selects time slots for activity or spa components
    • Chooses modifier options for guest-choice modifiers (e.g. selects a meal plan)
  5. The Summary Sidebar shows the package price (from the pricing calculation), savings compared to booking individually, and per-BU allocation breakdown
  6. On the Review step, all component bookings are shown with their dates, resources, and modifiers
  7. On confirmation, the system creates reservation items, resource allocations, and journal entries for all components in a single transaction

What Happens When a Package Is Applied

When the reservation is confirmed, the package application service:

  • Creates a Package Application record linking the package to the reservation with the final price, discount, and allocation method
  • For each component: creates one or more Reservation Items (one per day for repeatsDaily, one otherwise)
  • Allocates resources to each item (user-selected or auto-suggested)
  • Stores component allocations with the exact revenue split per business unit
  • For repeatsDaily components, divides the allocated price evenly across the daily items
  • Creates tax calculations and journal entries following the same accounting flow as individual service bookings

Pricing Examples

Fixed Mode Example

Package: "All-Inclusive Week" at $500/guest

Components: Room ($200/night x 7 = $1,400), Breakfast daily ($30 x 7 = $210), 2 Dive Trips ($150 x 2 = $300)

Total base cost: $1,910

Package price: $500 x 2 guests = $1,000

Savings: $910 (47.6%)

Revenue split (Proportional): Hotel BU gets $733 (73.3%), Dive BU gets $267 (26.7%)

Dynamic Mode Example

Package: "Dive & Stay" with 10% discount

Components: Room ($150/night x 5 = $750), 3 Dive Trips ($120 x 3 = $360)

Total base cost: $1,110

Discount: 10% = $111

Package price: $999

Duration-Scaled Mode Example

Package: "Extended Stay" with $15/day discount on room

Room component: $200/night, discount $15/day, minNights = 3

5-night stay (extraDays = 4):

  • Effective rate: max(0, $200 - $15 x 4) = $140/night
  • Room total: $140 x 5 nights = $700 (vs $1,000 at full price)

Savings: $300 (30%) on the room component alone

Troubleshooting

Cannot Activate Package — "Min Nights Required"

Cause: The package pricing mode is set to Duration-Scaled but Min Nights is not configured.

Fix: Open the package in the Package Builder and set the Min Nights field. Duration-Scaled pricing requires a minimum stay to calculate the discount correctly.

Package Not Showing in Reservation Wizard

Cause: The package is in Draft or Archived status, or the guest/night count does not meet the package constraints, or the booking dates fall outside the validity period.

Fix: Verify the package status is Active. Check that the reservation's guest count and night count fall within the package's min/max constraints. If the package has validity dates, ensure the booking dates are within range.

Component Shows "No Resources Available"

Cause: The service linked to this component has no available resources (rooms, boats, etc.) for the requested dates.

Fix: Go to Service Management and check that the service has resources with Available status. For time-slotted services, verify schedules cover the requested days. Check Room Allocations or the relevant allocation view to ensure the resources are not already booked for those dates.

Revenue Allocation Does Not Sum to Package Price

Cause: Rounding in proportional allocation or misconfigured transfer prices.

Fix: The system assigns rounding remainders to the last component in proportional mode. If using Transfer Price mode, ensure the sum of all transfer prices is less than or equal to the package price; the primary BU absorbs the remainder. If allocations appear incorrect, check the Allocation Weight or Transfer Price values on each component.

Cannot Delete a Package

Cause: The package has existing reservation applications (it has been booked at least once).

Fix: Use Archive instead. Archiving removes the package from the booking catalog while preserving it for historical records and reporting.