Package Configuration — Complete Guide
The definitive guide to configuring packages in Kaptio — covering every field and setting that controls how packages behave across the entire platform.
Why This Guide Matters
Package configuration is upstream of everything. A single checkbox on a Package Component can determine whether an optional service appears in the Booking Wizard Options tab, whether it is included in cancellation fee calculations, and whether its price rolls up into the package total on travel documents. Understanding these settings prevents configuration surprises downstream.
What’s Covered
- Prerequisites — What must be in place before creating a package
- Package Record Configuration — Record types, departure types, pricing setup, visibility, and service level modes
- Service Levels — Multi-tier pricing; guest selects a tier. See Service Level Configuration.
- Package Levels — Cabin-category selection for cruise and rail. See Package Level Configuration.
- Component Configuration — Selection types, booking wizard tabs, cancellation controls, and pricing behaviour
- Component Options — Service levels, pricelists, fare classes, and meal plans
- Sort Order & Defaulting — Display order, auto-selection logic, and advanced defaulting rules
- Filtering Package Search — Categories and activity-level fields
- Group Tours & Price Models — Summary and link to the dedicated Group Tours guide
- Admin Reference — Pilot features, permissions, app settings, and field sets
- Downstream Impact Reference — How each setting flows into Package Search, Booking Wizard, and Package Modifications
- Validation Checklist & Troubleshooting — Setup checklist and common issues
Available In
Circle Sell · Voyage Train · Voyage Cruise · Quest Tailormade
This guide is structured as a field-level reference. Each setting is documented with:
- API Name — The Salesforce field API name
- Picklist Values — All available options with their API and label values
- What It Controls — The behaviour this setting drives
- Downstream Impact — Which downstream systems (Search, Wizard, Modifications) are affected
Prerequisites
Before creating any package, ensure the following are in place:
- Supplier services created for all services you plan to include (Supplier & Service Setup)
- Price Categories and pricing configured on those services (Cost & Pricing Architecture)
- Locations set up for start and end destinations (Location Setup Guide)
- Admin or Product Manager access in Kaptio
Part 1: The Package Record
Creating a Package
Navigate to Packages in Kaptio and click New. Salesforce will first ask you to choose a record type:
| Record Type | API Name | Description | When to Use |
|---|---|---|---|
| Package | Package | A top-level, sellable product (the trip your customer books) with its own components, services, and pricing | Most tour packages — group tours, FIT packages, rail journeys, cruise itineraries |
| Bundle | Bundle | A reusable building block that groups services together (e.g., “3 Nights in Rome” with a hotel + breakfast + city tour), which gets nested inside a Package as a component option. | Combo tours, multi-leg journeys, packages assembled from sub-packages, shared segments re-used across multiple packages |
After selecting the record type, fill in the required fields:
| Field | API Name | Description | Behavior |
|---|---|---|---|
| Name | Name | The display name shown in search results and documents | Free text; use a clear, customer-facing title |
| Departure Type | DepartureType__c | Anyday, Seasonal, or Fixed | Choose carefully — changing after save may affect departures, seasons, and components already configured against the package |
| Duration | Length__c | Total trip length in nights | Determines the date span for components |
| Booking Wizard Unit Number Selection | PhysicalInventorySelection__c | Controls whether cabin/room number selection appears in the Booking Wizard | Picklist — see guidance below |
Departure Type
Field: Package__c.DepartureType__c — Controls how the package handles travel dates and which Package Editor tabs are available.
| Value | Label | Package Editor Tab | Description |
|---|---|---|---|
Fixed | Fixed | Departures tab enabled | Package runs on specific departure dates. Each departure has a date, status, capacity. Most common for group tours. |
Seasonal | Seasonal | Seasons tab enabled | Package is available within date ranges (seasons). Uses PackageSchedule__c records with nested time periods. |
Anyday | Anyday | Neither tab enabled | Package is available on any date. No departure or season management needed. Common for FIT packages. |
Downstream Impact
Package Search: Fixed packages only appear for dates with published departures. Seasonal packages appear within season date ranges. Anyday packages appear for any searched date. Component Behaviour: When Departure Type is Fixed, components gain departure assignment controls (
DepartureMode__c). Components can be applicable to all departures, or selectively assigned at the component or component option level.
Booking Wizard Unit Number Selection
Field: Package__c.PhysicalInventorySelection__c — Controls whether the Booking Wizard requires physical unit (room/cabin) number selection.
| Value | When to use |
|---|---|
| Mandatory (default) | Cruise, rail, or any package where the customer must select a specific cabin or room number during booking. The Booking Wizard displays a Cabins tab that must be completed before the itinerary can be created. |
| Not Mandatory/Hidden | Land-only packages or packages where cabin/room selection is not needed. The Cabins tab is hidden in the Booking Wizard. For cruise and rail packages, the system auto-assigns a default cabin behind the scenes. |
| Component Controlled | Mixed packages (e.g., a land tour with an optional cruise segment) where cabin selection should only apply to specific components rather than the entire package. The need for cabin selection is determined by each component’s type. |
Downstream Impact
Booking Wizard: This setting directly controls whether the room/cabin selection step appears in the Booking Wizard flow. If set to Not Mandatory, travelers skip this step entirely.
Package Settings
After saving the package record, configure these additional settings:
| Field | API Name | Description | Behavior |
|---|---|---|---|
| Package Code | PackageCode__c | Brochure or internal identifier | Used as a prefix for reservation numbers via Tour Code |
| Active | IsActive__c | Controls whether the package appears in search | Leave unchecked until setup is complete |
| Visibility & Access | VisibilitySetting__c, AccessRule__c | Who can see and book the package by channel and account | Visible for All (default) or Restricted with an Access Rule. Visibility Settings & Access Rules |
| Categories | Categories__c | Multiselect picklist for filtering and grouping packages | Values are configured in metadata (e.g., Family Package, Adventure Package) |
| Start Location | PackageStartLocation__c | Lookup to Location; used in Package Search | |
| End Location | PackageEndLocation__c | Lookup to Location; used in Package Search | |
| Supplier | Supplier__c | Primary supplier account for the package | Used for single-supplier prepackaged products |
| Service Level Mode | ServiceLevelMode__c | Controls how service levels are managed across the package | Standard (single tier), Service Levels (guest selects tier), or Package Levels (cabin-category selection). See Service Level Configuration |
| Package Levels | — | Cabin-category pricing for cruise and rail products | Enabled when Service Level Mode is set to Package Levels. See Package Level Configuration |
| Unpriced | Unpriced__c | Shows “Unpriced” in search instead of a price | Use when prices are not yet configured or are available on request |
| Pricing Setup Fields | — | Sell price setup, cost setup, rounding, and profitability configuration | See Pricing Setup Fields below |
| Commission & Profitability Fields | — | Commission groups, profitability groups, and discount groups | See Commission & Profitability Fields below |
Pricing Setup Fields
Lightning Costings note: Lightning costings only supports Dynamic for both Cost Setup and Selling Price Setup. Fixed cost and fixed sell price modes are legacy (classic costings only) and are not supported in lightning costings. Some fields in the table below only apply to classic costings and are marked accordingly.
These fields control how sell prices are calculated for the package:
| Field | API Name | Description | Behavior |
|---|---|---|---|
| Selling Price Setup | SellingPriceSetupChoice__c | How sell prices are derived | Dynamic is the supported mode — sell prices are calculated from cost + markup/margin rules |
| Cost Setup | NetPriceSetupChoice__c | How cost prices are derived | Dynamic is the supported mode — cost prices are calculated from service pricing or from a 3rd party source |
| Sell Price Rounding | SellPriceRounding__c | Rounding rule for calculated sell prices | Overrides the channel-level rounding setting for required components |
| Primary Pricing Component (Classic only) | PrimaryPricingComponent__c | Which component drives the primary price split | Only relevant for fixed cost or sell price setups (classic costings). Not used in lightning costings where Dynamic is the only supported mode |
| Secondary Pricing Component (Classic only) | SecondaryPricingComponent__c | Optional second component contributing to package price | Used with SecondaryComponentAmount__c. Only relevant for classic costings. |
| Calculated as Day Rate (Classic only) | IsCalculatedAsDayRate__c | When checked, package pricing is calculated as a daily rate multiplied by the number of days | Only applies to fixed net rate packages from a single supplier. Not used in lightning costings. |
| Profitability Group | ProfitabilityGroup__c | Links to a Profitability Book for margin targets | See Cost & Pricing Architecture |
| Commission Group | CommissionGroup__c | Reseller commission grouping | Can be overridden at the component or price category level |
| Discount Group | DiscountGroup__c | Discount rule grouping | Can be overridden at the component or add-on level |
Service Level Mode
Field: Package__c.ServiceLevelMode__c — Controls how service levels (room types, cabin classes, etc.) are managed across the package.
| Mode | Behavior |
|---|---|
| Standard | Single pricing tier — no service level selection during booking |
| Service Levels | Multiple tiers (e.g., Standard, Superior, Luxury) — guest selects a tier. When a traveler selects “Premium”, all components upgrade to their Premium variant. Common for rail packages with cabin classes and cruise packages with deck categories. |
| Package Levels | Cabin-level selection — used for cruise-style products with cabin categories |
See Service Level Configuration for detailed setup, or Package Level Configuration for cabin-category pricing on cruise and rail products.
Commission & Profitability Fields
These fields control commission calculations and profitability tracking at the package level.
| Field | API Name | Description |
|---|---|---|
| Commission Group | CommissionGroup__c | Lookup to a Commission Group record. Controls which commission rates apply to this package when sold through reseller channels. |
| Profitability Group | ProfitabilityGroup__c | Lookup to a Profitability Group. Used for grouping packages in profitability analysis and reporting. |
| Discount Group | DiscountGroup__c | For Bundle record type packages only. Links to a discount group used in the Advanced Price Rules tab. |
Single Supplier Packages
Field: Package__c.PrepackagedBySingleSupplier__c (checkbox)
When checked, this indicates the entire package is provided by a single supplier. This changes component edit behaviour:
- The package-level
Supplier__cfield is used as the default supplier for all components - Component option modals pre-fill supplier information from the package record
- Simplifies setup for packages where one operator delivers everything (e.g., a single DMC providing all services)
Part 2: Components
What Components Are
Components are the building blocks of a package. Each component represents a segment of the trip — a hotel stay, an activity, a transfer, a rail segment. The package is a container; the components hold the product and pricing.
Component Types
| Type | Purpose | Example |
|---|---|---|
| Bundle | Groups multiple services into a single destination segment | ”City A — 3 Night Stay” (hotel + breakfast + city tour) |
| Component | A single service with structured pricing | ”Airport Transfer”, “Guided Walking Tour” |
| Live | Real-time pricing from an external system | ”Dynamic Rail Fare” via Kaptio Connect |
Creating Components
From the package record, navigate to the Components related list and click New.
Not all component fields are listed in this table. The fields here are those that do not have multiple values requiring full explanation; fields that do are covered in the sections after the table.
| Field | API Name | Description | Behavior |
|---|---|---|---|
| Record Type | ComponentType__c | Bundle, Component, or Live | Determines the structure and pricing behavior |
| Name | Name | Descriptive label for the component | Shown in Builder, Costings, and customer documents |
| Sort | Sort__c | Display order in the itinerary | Components are rendered in ascending sort order |
| Start Day | Start__c | Day number when this component begins | Mandatory; determines placement within the package duration |
| End Day | End__c | Day number when this component ends | For multi-day components (e.g., accommodation spanning 3 nights) |
| Is Active | IsActive__c | Whether the component is selectable | Inactive components are hidden from booking flows |
Selection Type
Field: Component__c.SelectionType__c — Controls whether the component is included in the base package or presented as an option.
| Value | Behavior |
|---|---|
| Pre-Selected Refundable | The component is included in the itinerary by default. The guest can remove it during booking, and the cost is removed from the package total — the guest is not charged for it. Use this for standard included components where the guest has the option to opt out. |
| Optional | The component is not included in the itinerary by default. The guest can add it during booking if they want it. Use this for extras, upgrades, and add-on experiences that the guest opts into. |
| Pre-Selected Non-Refundable | The component is included in the itinerary by default. If the guest removes it during booking, the cost remains on the package total — the guest still pays for it even though the service is removed. Use this for components where the operator has committed cost that cannot be waived (e.g., a group transfer or charter segment). |
Common Confusion
The API value
Requiredmaps to the label “Pre-Selected Refundable” — not “Required” in the UI. Similarly,NonRefundablemaps to “Pre-Selected Non-Refundable”. The distinction matters: both are pre-selected, but they differ in refund behaviour when removed.
Example: Transfers
- Shared Transfer (e.g., coach) — Set to Pre-Selected Non-Refundable. The guest opts out, but the charge is non-refundable since the coach still needs to operate.
- Private Transfer (or activity) — Set to Pre-Selected Refundable. The guest opts out because it is not needed. Since the operator only charges for these if they are needed, the amount due is refundable — assuming the supplier does not need to be paid.
Booking Wizard Tab
Field: Component__c.BookingWizardTab__c — Controls which tab in the Booking Wizard displays this component. Only relevant for Optional selection type components.
| API Value | Label | Booking Wizard Display |
|---|---|---|
None | None | Not shown in any Booking Wizard tab. Used for background or included components. |
Options | Options | Shown in the Options tab. Standard optional services and upgrades. |
Protection Plan | Protection Plan | Shown in the Protection Plan tab. Travel insurance and protection products. |
Pre Stay | Pre Stay | Shown in the Pre Stay tab. Hotel nights before the main package. |
Post Stay | Post Stay | Shown in the Post Stay tab. Hotel nights after the main package. |
Most Common Configuration Mistake
If your optional component is not appearing in the Booking Wizard, the most common cause is
BookingWizardTab__cset toNoneorSelectionType__cnot set toOptional. Both must be correctly configured for the option to display.
Package Totals
Field: Component__c.PackageTotals__c — Controls whether this component’s price is included in the displayed “Package Total”.
| API Value | Label | Description |
|---|---|---|
IncludedInPackageTotal | Included in Package Total | Default. Component’s price rolls up into the displayed package total. |
ExcludedFromPackageTotal | Excluded from Package Total | Component’s price is not included in the displayed package total. |
Critical: What Package Totals Does NOT Control
Despite the name suggesting broad control, this setting has a limited scope. Based on field testing and code verification:
Area Affected? Content generation (documents/PDFs) Yes Costings hover display (package icon on optional services) Yes Cancellation fee calculations No Payment schedule generation No Itinerary rollup totals No UI total displays No Source:
CancellationFeeCalculations.clsdoes not referencePackageTotalsSetting__c. Confirmed via field testing and code review. This is an older field with limited usage. See Cancellation Controls for the fields that actually control cancellation fee inclusion.
Cancellation Controls
Looking for Cancellation Configurations? The settings below control which component price lines are included in cancellation fee calculations. For the full guide on setting up Cancellation Configurations — the rule engine that automatically generates cancellation fee schedules for Booking Wizard itineraries — see Cancellation Configurations — Setup & How They Work.
Two checkboxes on the Package Component determine which components’ prices feed into cancellation fee calculations. These are the actual controllers for cancellation fee inclusion — not the Package Totals setting. They are most commonly ticked on core required components (accommodation, main tour) to ensure those prices count toward cancellation fees.
| Field | API Name | Controls | When Ticked |
|---|---|---|---|
| Is Main Component | Component__c.IsMainComponent__c | Percentage-based cancellation fees | The component’s price is included in percentage-based cancellation fee calculations (e.g., 25% of package price) |
| Is Main Tour Component | Component__c.IsMainTourComponent__c | Fixed-amount cancellation fees | The component’s price is included in fixed-amount cancellation fee calculations (e.g., a flat fee) |
Example: Multi-Day Accommodation Component
Consider a 10-night group tour package with a percentage-based cancellation schedule (25% more than 60 days out, 50% at 30–60 days, 100% under 30 days). The package has three components: a main accommodation (7 nights), a rail transfer, and a city tour. If
IsMainComponent__cis ticked on the accommodation component, the 25% fee is calculated against the total that includes the accommodation price. IfIsMainComponent__cis not ticked on the accommodation component, its price is excluded and the percentage-based fee applies to a smaller total — likely not the intended behaviour for a core component.
Technical Note
The cancellation fee engine (
CancellationFeeCalculations.cls) iterates through all price lines per passenger and applies cancellation rules uniformly. These checkboxes control behaviour upstream — determining which items generate price lines that feed into the cancellation calculation. The cancellation calculator itself does not filter by component type. Source: Confirmed via field testing and code review. Verified inCancellationFeeCalculations.cls.
Component Behaviour
Field: Component__c.ComponentBehaviourChoice__c — Controls how the component handles quantity and selection in the Booking Wizard.
| API Value | Label | Description |
|---|---|---|
Single | Single | Component is selected once. One unit per booking (e.g., a hotel stay for the trip). |
Pass | Pass | Component applies as a pass across the trip (e.g., a National Park pass valid for multiple days). |
Unlimited | Unlimited | Component can be added multiple times with no limit (e.g., extra excursions). |
DayTickets | Day Tickets | Component is managed as day-by-day tickets (e.g., daily activity passes). |
Related field: MaxTimes__c — sets an upper limit on how many times a component can be selected (only applicable for Unlimited behaviour).
Pricing Behaviour
Field: Component__c.PricingBehaviorChoice__c — Controls whether cost and sell prices from the associated supplier service are applied to the itinerary.
| Value | Effect |
|---|---|
| Standard | Both cost and selling price from the associated supplier service will be used. This is the default for most components. |
| Free Component | There is no cost or sell price added to the Itinerary, even if the supplier service has a valid cost or sell price for the booking date. Use this for complimentary inclusions where you do not want any pricing to appear. |
| No Cost Rate | The cost rate from the supplier service will not be added to the Itinerary, but the sales rate will be. Use this when you want to charge the customer but treat the component as zero-cost internally (e.g., bundled services where the cost is already accounted for elsewhere). |
| No Sales Rate | The sell rate from the supplier service will not be added to the Itinerary, but the cost rate will be. Use this when you need to track the supplier cost but do not want the component to contribute to the customer-facing price (e.g., an included transfer where the cost is absorbed into the package margin). |
Departure Mode
Field: Component__c.DepartureMode__c — For packages with Departure Type = Fixed, determines whether this component is applicable to all departures on the package or only to selected departures (matches the field description on Component__c).
| API Value | Label | Description |
|---|---|---|
Applicable to All | Applicable to All | The component applies to every departure. No per-departure assignment is needed. Default for new components. |
Selective Departures for Component | Selective Departures for Component | The component applies only to departures you assign. In the component edit modal, set this mode, save if needed, then use + Assign to Package Departure Dates — that opens the component departures selection modal (not a package-level screen). |
Selective Departures for Component Options | Selective Departures for Component Options | Departure applicability is defined per component option. In the component edit modal, use + Assign to Package Departure Dates — that opens Assign Component Options to Departure (not a package-level screen). |
Where this lives in the UI
Departure Mode and + Assign to Package Departure Dates are on the component edit modal (open the component from the package itinerary). They are not configured from the package record layout or from package-level editor views without opening the component.
Use Case
Use Selective Departures for Component when the whole component applies only on some departures (e.g., whale watching only on summer departures). Use Selective Departures for Component Options when different options under the same component apply on different departures (e.g., one room type only on selected departure dates).
Looking for Pricing Controls? Pricing Controls — managing BAR levels, bulk price adjustments, and discount configurations — is a separate revenue-management feature. See the dedicated Pricing Controls guide.
Day Range & Night Fields
These fields control the day range and night behaviour of a component within the package itinerary.
| Field | API Name | Description |
|---|---|---|
| Start Day | Start__c | The day within the package itinerary that this component begins. The field label changes depending on the service type — it displays as “Check In” for accommodation, “Pick-up” for car rental/hire, and “Day” for other service types. |
| End Day | End__c | The day within the package itinerary that this component ends. The field label changes depending on the service type — it displays as “Check Out” for accommodation and “Return” for car rental/hire. Some service types that do not span multiple days (e.g., activities, transfers) do not display an End Day field. |
| Available Any Day | IsAvailableAnyday__c | When checked, this component is not tied to specific days and can be placed on any day in the itinerary. |
| Min Number of Nights | MinNumberOfNights__c | Minimum number of nights this component can be booked for. Used for Pre/Post Stay components where the traveller can choose a flexible number of nights within an allowed range (e.g., minimum 2-night stay). |
| Max Number of Nights | MaxNumberOfNights__c | Maximum number of nights this component can be booked for. Used for Pre/Post Stay components to cap the upper limit of the flexible night range. |
| Create Item Per Night Per Room | CreateItineraryItemPerNightPerRoom__c | When checked, the system creates a separate itinerary item for each night and each room. Used for per-night pricing models (e.g., hotel stays with different nightly rates). |
| Controls Departure Dates | IsControllingDepartureDates__c | When checked, this component’s dates drive the departure date of the package. This field is not edited directly on the component — it is set from the Package Departures tab (see note below). |
Where is Controls Departure Dates set?
You won’t find this checkbox on the component page layout. To set which component controls departure dates, go to the Package Departures tab on the package record. Select one or more components from the dropdown list — the system marks those components as controlling departure dates automatically. The checkbox on the component record (
IsControllingDepartureDates__c) is updated behind the scenes based on your selection.
When to use Create Item Per Night Per Room
This is a standard platform setting available to any customer — it is not specific to any single implementation.
When this checkbox is checked, each night of a Pre/Post Stay gets its own booking line. A 3-night pre-stay in a double room creates 3 separate itinerary items (one per night, per room). This enables:
- Per-night pricing — each night can carry a different rate (e.g., weekend vs weekday, seasonal surcharges)
- Per-night confirmation tracking — Night 1 can be confirmed while Night 2 is still on request
- Incremental changes — add or remove individual nights without replacing the entire stay
When this checkbox is unchecked (the default), the entire stay is a single booking line regardless of duration. This is simpler but means any change to the stay requires replacing the whole line, and all nights share the same rate and status.
Use the per-night setting when your accommodation supplier quotes different rates per night, or when your operations team needs to track confirmation at the individual-night level.
IMPORTANT
MUST be set if you want free-night offers from Promos — for example cheapest night free or most expensive night free — to work on that accommodation. The promotion engine needs individual night line items to identify which night to discount. Without this setting, the entire stay is a single line and the engine cannot apply a per-night promotional discount.
Tip: Step-by-step setup for those promotion types in Booking Wizard is still being documented. See Promotions in Booking Wizard — Free night promotions (placeholder).
See Pre/Post Stay Configuration for the full setup of flexible accommodation nights.
Sort & Display Fields
| Field | API Name | Description |
|---|---|---|
| Sort | Sort__c | Controls display order of the component within the Package Editor and itinerary. Lower values appear first. |
| Day-by-Day Display | DayByDayDisplay__c | Controls whether this component appears in day-by-day itinerary views and documents. |
See How Sort Order Works for a detailed explanation of display order vs auto-selection logic.
Commission Fields
The commission on a component can be calculated in different ways depending on the business needs. The Reseller Commission Settings picklist on each component controls which method is used:
-
Package Level (default) — Uses the Commission Group specified on the Package. If the component sits inside a Bundle, the Bundle’s Commission Group is used instead.
Tip: For package commission to apply on the component, a Commission Group must exist on the Package or Bundle. If the component is left on Package Level (the default) and no Commission Group is set on the Package, commission is zero — the system does not fall back to the Item (service) Commission Group. Use Inherit From Selected Service when commission should come from the service instead.
-
Inherit From Selected Service — Uses the Commission Group from the Item (service) linked to the selected component option. The system checks for a commission group in this order: Add-on → Price Category → Item. If none of these records have a Commission Group set, no commission is applied for that component — it does not fall back to the Package-level Commission Group.
-
No Reseller Commission — No commission is applied for this component regardless of any Commission Group configured elsewhere.
-
Override — Enables a Reseller Commission Group lookup directly on the component, allowing the user to select a different Commission Group that applies only to this component.
Note: The Reseller Commission Group field on the component is only visible and editable when Override is selected. In all other modes the system clears the field automatically.
| Field | API Name | Description |
|---|---|---|
| Reseller Commission Settings | ResellerCommissionSettings__c | Picklist controlling which commission calculation method is used for this component. Values: PackageLevel (default), InheritFromSelectedItem, NoResellerCommission, Override. |
| Reseller Commission Group | ResellerCommissionGroup__c | Lookup to a Commission Group. Only editable when Reseller Commission Settings is set to Override — in all other modes this field is hidden and cleared automatically. |
Primary Component
Field: Component__c.PrimaryComponent__c (checkbox) — Only applies to Fixed Departure packages (DepartureType__c = 'Fixed').
When checked, this component is flagged as a core part of the package. The system uses this flag for departure variation highlighting: if a specific departure is missing a component marked as primary, that gap is surfaced in the Package Editor so users can see which departures have incomplete component coverage.
For example, if a whale-watching excursion only runs on summer departures it would not be marked as primary — but the main accommodation would be, so its absence from any departure would be flagged.
Primary Component and Departure Mode are a paired set of fields — both appear in the component editor only for Fixed Departure packages. When a new component is created, both default to on: Primary Component is checked and Departure Mode is set to “Applicable to All”.
Note: Primary Component does not affect pricing calculations, date ranges, or booking wizard flow. It is purely a departure-completeness indicator.
Other Component Behaviour Fields
| Field | API Name | Description |
|---|---|---|
| Is Mandatory Optional | IsMandatoryOptional__c | Optional component that still requires a selection in Booking Wizard |
| On Ground Payment Required | OnGroundPaymentRequired__c | Indicates payment for this component is collected on-ground rather than pre-trip |
| Time Availability | TimeAvailability__c | Controls time-based availability filtering |
| Apex Class | ApexClass__c | Custom Apex class for component-specific business logic |
Other Notable Fields
IsActive__c— Must be checked for the component to be included in the packageComponentType__c—PriceCategories(standard),Live(live service), orBundle(references another package)
Part 3: Component Options
What Component Options Are
Component Options link supplier services to components. Each option represents one possible service that can fulfil the component. A hotel component might have three options: Hotel A, Hotel B, Hotel C — the guest (or the default) selects one.
Component options are managed via the Component Option Edit Modal in the Package Editor, accessed by clicking the option icon on a component card.
Component Options vs Price Categories
A component links to a service, and each service has price categories (e.g., “King Bed”, “Two Twins”). Component options configure how those price categories are offered within the package — with which pricelist, pricing behaviour, and service level.
Creating Component Options
For each component, click New Component Option. The creation flow starts by selecting the Supplier (Account), which filters the available services based on the component record type — for example, if the component record type is Accommodation then only Accommodation services will be displayed. Select the Service from that supplier, then configure the remaining fields.
The fields available on a component option depend on the option type. The sections below group fields by Price Category options, Meal Plan options, Add-on options, and Rail options. Fields that apply to every option type are listed first; fields that apply to several types but not all are grouped next.
Fields in the modal header
These fields sit above the option tables in the Component Option Edit Modal (they are not columns in the Meal Plan / Price Category / Add-on grids).
| Field | API Name | Description |
|---|---|---|
| Service Sort | ServiceSort__c | Controls which service is auto-selected when other options are filtered out. Defaulting priority: (1) Default flag; (2) lowest Service Sort; (3) Sorting Scheme; (4) undefined. Lowest value wins. |
| Sort | Sort__c | Display order of options within the component. Options shown in ascending sort order. |
| Unpriced | Unpriced__c | Shows “Unpriced” in Booking Wizard. Shown only when the component Selection Type is Optional (hidden for Required and other selection types). |
Fields on Price Category, Add-on, and Rail options (not Meal Plan)
| Field | API Name | Description |
|---|---|---|
| Service Level | ServiceLevel__c | Which service level tier this option belongs to. When ServiceLevelMode__c is not Standard, selecting a tier at booking time shows only matching options. |
Price Category options
| Field | API Name | Description |
|---|---|---|
| Pre-Selected in Costings | IsPreSelectedInCostings__c | Auto-selects this option as the default when a Package is added to an Itinerary via Costings. Shown only when the component Selection Type is Optional (commonly Package Item components). Not used in Package Search. |
| Price Category | PriceCategory__c | Which price category to use. Links to the service’s pricing tier (e.g., “King Bed”, “Two Twins”). |
| Price List | Pricelist__c | The pricelist to use. Determines cost and sell rates. |
| Available Times | AvailableTimes__c | Default departure/arrival times for the option. Shown when the component Time Availability is not inherited from the service. On Live components the same control appears on these rows (labelled Time From). |
Meal Plan options
IMPORTANT
Meal Plan options apply only to Accommodation type services.
| Field | API Name | Description |
|---|---|---|
| Board Basis | BoardBasis__c | Meal plan assignment. Links to a board basis record (e.g., Bed & Breakfast, Half Board, Full Board). |
| Default | IsDefault__c | Marks this as the default meal plan. When a package is added to a quote, the default meal plan is pre-selected. |
Add-on options
Add-on options are not available when the component is Live (Rail) — the modal does not show an Add-on table for Live components.
| Field | API Name | Description |
|---|---|---|
| Pricing Behavior | PricingBehaviorId__c | Overrides the component-level pricing behaviour for this specific option. See Pricing Behaviour for values. |
| Price List | Pricelist__c | The pricelist to use. Determines cost and sell rates. |
| Add-on | Addon__c | Links to an add-on record. |
| Mandatory | IsMandatory__c | Whether the add-on is automatically included. When checked, the add-on is added during booking. Users cannot add mandatory add-ons manually in Package Search; the system handles them automatically. |
| Included | IsIncluded__c | Whether the add-on is included when booking the service. This field is not on the page layout — it is set automatically to true when an add-on component option is created. |
Rail options
These fields apply to Live (Rail) components on the Price Category–style rows in the modal (there is no separate Meal Plan or Add-on table for Live). Available Times for Live uses the same field documented under Price Category options above.
| Field | API Name | Description |
|---|---|---|
| Fare Class | FareClass__c | Rail fare class (e.g., Standard, Premium, Bedroom). |
| Departure Location | DepartureLocation__c | Start location for the rail service. |
| Arrival Location | ArrivalLocation__c | End location for the rail service. |
Part 4: Sort Order, Defaulting & Display
How Sort Order Works
Two concepts work together here: display order (what sequence things appear in on screen) and auto-selection (which option the system picks when you add the package to a booking). They use different fields and follow different logic.
Display Order
Display order controls the sequence in which components and options appear in the Package Editor, Booking Wizard, Builder, Costings, and customer-facing documents.
- Components are ordered by the
Sort__cfield onComponent__c— lowest number first (ascending). A component with Sort 10 appears before Sort 20. - Options within a component are ordered by
ComponentOption__c.Sort__c— again lowest first. - In some UI contexts, the option marked as Default (
IsDefault__c = true) is promoted to the top of the list regardless of its sort value.
Use increments of 10 (10, 20, 30…) so you can insert new components or options later without renumbering everything.
How the System Picks a Default
When a package is added to a quote, the system needs to auto-select one option per component. It follows this priority, top to bottom — the first rule that produces a match wins:
- Default flag — if one option has
IsDefault__cchecked, it is selected. Done. - Lowest Service Sort — if no Default flag is set, the system picks the option with the lowest
ServiceSort__cvalue (1 beats 2, 2 beats 3, etc.). - Sorting Scheme — if Service Sort values are equal or unset, and the component has a Sorting Scheme configured (via
ComponentDefault__c), the scheme’s JSON rules determine the winner. - Undefined — if none of the above apply, the selection order is undefined and you should not rely on which option gets picked.
Worked Example
Imagine a hotel component with three options:
| Option | Default? | Service Sort | Status |
|---|---|---|---|
| Hotel A | No | 1 | Available |
| Hotel B | No | 2 | Sold Out |
| Hotel C | Yes | 3 | Available |
- Auto-selection: Hotel C is picked because the Default flag (rule 1) takes priority — even though Hotel A has a lower Service Sort value.
- Display order: The options appear in Sort order (determined by each option’s
Sort__cfield), with Hotel C potentially promoted to the top of the list in some UI contexts because it is the Default. - If Hotel C were sold out: The Default flag no longer applies (the option is unavailable). The system falls to rule 2 and selects Hotel A (Service Sort 1, and it is available). Hotel B (Service Sort 2) is skipped because it is also sold out.
Best practices:
- Accommodation bundles anchor the major segments (lowest sort values per city/destination)
- Activities and transfers follow their parent bundle in sort order
- Live components slot in wherever the transport segment occurs
- Keep sort values consistent across similar packages for operational efficiency
Advanced Defaulting
Beyond the simple IsDefault__c flag on component options, Kaptio supports advanced defaulting through the ComponentDefault__c object.
Advanced defaulting is typically used when options should be filtered or sorted by external criteria before defaulting.
See the Priority Schemes guide for how to create Defaulting, Filtering, and Sorting Schemes and assign them to Package Components.
Part 5: Filtering Package Search Results
Categories and activity-level fields control how packages appear and can be filtered in Package Search. This section groups them together so you can configure search behavior in one pass.
Categories
The Categories field (Categories__c) is a multiselect picklist on the package record. It allows packages to be grouped and filtered by type.
Categories are defined in Salesforce metadata — values like “Family Package”, “Adventure Package”, “Luxury”, “Rail Journey” are configured by administrators. A single package can belong to multiple categories.
Categories are used for:
- Filtering packages in search results
- Organizing packages in the Package Editor
- Grouping packages in reports and dashboards
There is a deprecated single-select
Category__cfield. Always use the multiselectCategories__cfield for new configuration.
Activity Level and Pace
| Field | API Name | Purpose |
|---|---|---|
| Activity Level | ActivityLevel__c | Physical demand rating for travellers |
| Pace | Pace__c | Daily schedule tempo |
| Minimum Age | MinimumAge__c | Recommended minimum guest age |
These fields do not affect pricing or availability, but they differ in how they surface to users:
- Activity Level is a working filter in Package Search — users can select activity levels from a dropdown to narrow search results.
- Pace and Minimum Age are display-only — they appear in search results and on documents but are not built-in filters in Package Search.
All three values are available via the Kaptio API (KTAPI). Customers building their own websites can read Activity Level, Pace, and Minimum Age from the package data and build custom filtering on top. Activity Level can also be filtered directly via the API’s package search endpoint.
Part 6: Group Tours & Price Models
Group Tours are the operational layer that connects a Package to tour departures, price models, and service conversion. The Package remains the sellable product — the Group Tour record (GroupTravel__c) wires it into the group-tour workflow: channel, currencies, departures, pricing, and operations.
For the full guide — including how Group Tours relate to Packages, the build order, price model configuration (configuration groups, group sizes, tour table), pricing overview (margin groups, calculation states, passenger discounts, export), and service conversion — see the dedicated Group Tours — Configuration Guide.
Part 7: Downstream Impact Reference
The settings you configure on a package flow into three key areas of the platform. Understanding these areas helps you predict how a configuration change will affect the end-user experience.
-
Package Search — The customer-facing (or agent-facing) search interface where users browse and filter available packages by date, destination, price, and availability. Package Search is powered by KTAPI and can be embedded in ecommerce sites or used within Salesforce. Configuration choices like departure type, visibility, and inventory settings directly control what appears in search results and how packages are displayed.
-
Booking Wizard — The guided, step-by-step booking flow inside Salesforce that takes a user from package selection through to a confirmed booking. The wizard handles room/cabin selection, optional component add-ons, passenger details, and pricing summary. Many package and component settings control which steps appear, what options are available, and how prices are calculated within the wizard.
-
Package Modifications — Post-booking changes made through the Booking Wizard in modification mode. This includes transferring to a different departure, changing occupancy, adding or removing components, and cancelling rooms or entire packages. Modification behaviour is governed by cancellation policies, component flags (like
IsMainComponent__c), and pilot feature toggles.
The tables below show how each package and component setting affects these three areas. Use this to understand the ripple effects of configuration changes.
Package-Level Settings
| Setting | Package Search | Booking Wizard | Package Modifications |
|---|---|---|---|
DepartureType__c | Controls date-based search behaviour (Fixed = specific dates, Anyday = any date) | Determines room/cabin selection flow | Affects transfer departure matching |
SellingPriceSetupChoice__c | Affects displayed prices in search results | Controls price calculation in wizard summary | Affects price comparison on modify |
ServiceLevelMode__c | Filters search by service level availability | Shows service level selector; coordinates component options | Service level preserved on modify |
PhysicalInventorySelection__c | No direct impact | Controls room/cabin number selection step | Affects change occupancy room reassignment |
VisibilitySetting__c | Controls which users/channels can see the package | No direct impact (already in wizard) | No direct impact |
IsActive__c | Inactive packages excluded from search | No direct impact | No direct impact |
Component-Level Settings
| Setting | Package Search | Booking Wizard | Package Modifications |
|---|---|---|---|
SelectionType__c | Required components included in search price | Optional components shown in Options tab; NonRefundable greyed if removed | NonRefundable components cannot be refunded on cancellation |
BookingWizardTab__c | No direct impact | Controls which tab displays the component (Options, Pre Stay, Post Stay, Protection Plan) | Tab assignment preserved on modify |
PackageTotals__c | May affect displayed total in search | Affects content/document generation only | Does NOT affect cancellation fees or payment schedules |
IsMainComponent__c | No direct impact | No direct impact | Controls inclusion in percentage-based cancellation fees |
IsMainTourComponent__c | No direct impact | No direct impact | Controls inclusion in fixed-amount cancellation fees |
ComponentBehaviourChoice__c | No direct impact | Controls selection quantity (single pick, unlimited, day tickets) | Behaviour preserved on modify |
PricingBehaviorChoice__c | Free components show as “Included” | Controls price display (free, no cost, no sales) | Pricing behaviour preserved on modify |
InventoryRequired__c | Affects availability status in search results | Controls inventory check and status badges (FS, AL, RQ, SO) | Inventory rechecked on modify/change occupancy |
DepartureMode__c | Selectively assigned components only appear for assigned departures | Component hidden for non-assigned departures | Component availability on transfer target departure |
Part 8: Admin Reference
Pilot Features
Pilot Features gate access to specific package-related capabilities. They are defined in Kaptio Travel Settings > User Overrides > Company Settings [Edit] > Pilot Features App Wide.
| Pilot Feature | What It Enables | Area |
|---|---|---|
PackageModification | Booking Wizard in modification mode | Package Modifications |
ChangePackageOccupancy | Booking Wizard in change occupancy mode | Package Modifications |
ChangePackageOrDeparture | Booking Wizard in transfer mode | Package Modifications |
CancelRoomOrPackage | Booking Wizard in cancellation mode | Package Modifications |
CreatePassengerReservationNumbers | Auto-create reservation numbers from PackageDeparture | Departures |
BookingFlowInventoryReserve | Reserve inventory items on itinerary creation | Booking Wizard |
AllowWaitListRequests | Enable waitlist functionality in Package Search and Booking Wizard | Package Search / Booking Wizard |
Permissions
Use the tables below only for package configuration: creating and editing Package, Component, and Component Option records, plus reading Services (items) and Inventory while you build and validate a package. Permissions for searching and booking packages (Package Search, Booking Wizard, itinerary creation) are documented in Package Search — Permissions. Permissions for post-booking changes are in Package Modifications.
Object Permissions
| Object | API Name | Access Needed | Why |
|---|---|---|---|
| Package | KaptioTravel__Package__c | Create, Read, Edit | Create and configure package records |
| Component | KaptioTravel__Component__c | Create, Read, Edit | Add and configure components within a package |
| Component Option | KaptioTravel__ComponentOption__c | Create, Read, Edit | Add and configure component options linking services to components |
| Service (Item) | KaptioTravel__Item__c | Read | Browse and select supplier services when creating component options |
| Inventory | KaptioTravel__InventoryItem__c | Read | View inventory availability during package configuration |
Booking and modification workflows — Overrides to sell price, tax, commission, cancellation fees, itinerary creation, and bulk operations use different permission requirements than package configuration. See Package Search — Permissions and Package Modifications.
App Settings
AppSettings__c is a custom setting that controls org-wide package behaviour.
| Field | Description | Impact |
|---|---|---|
EnableAllotmentCategories__c | Enables allotment category controls in the Package Editor component edit modal | Shows additional allocation behaviour fields and extra days/nights picklists |
EnableLockSellPrice__c | Enables the sell price locking mechanism | Prevents sell price recalculation after initial booking |
AllowLiveServicesAsOfflineServices__c | Allows live service components to function as offline services | Affects component type behaviour |
CancellationRecordType__c | Record type set when an itinerary is fully cancelled | Package Modifications cancellation flow |
DefaultTaxProfile__c | Default tax profile for pricing calculations | Tax calculation on all price lines |
RoomTypeFilterEnabled__c | Enables room type filtering in the Booking Wizard | Booking Wizard room selection step |
Field Sets
Field sets allow admins to customise which fields appear in the Package Editor UI without code changes.
| Object | Field Set | Purpose |
|---|---|---|
Package__c | FieldsOnPackageEdit | Controls which fields appear on the Package Edit modal. Add custom fields here to make them editable in the Package Editor. |
Component__c | FieldsOnComponentEdit | Controls which fields appear on the Component Edit modal. Custom component fields added to this field set will appear in the edit form. |
ComponentOption__c | FieldsOnFilteringScheme | Controls filtering scheme fields for component options. |
Extending the Package Editor
To add a custom field to the Package Editor: create the field on
Package__corComponent__c, then add it to the corresponding field set above. The field will appear as an editable input in the Package or Component edit pop-up, and its value is saved on the record.IMPORTANT
Adding a field to the field set does not automatically surface it in Package Search results, the Booking Wizard, travel documents, or the external API (KTAPI). Those channels each have their own configuration and would require additional development to display the new field.
The custom field data lives on the Salesforce record, so it is available in Salesforce reports, list views, automation (flows and workflow rules), and page layouts. To surface it in customer-facing channels — such as ecommerce search results, booking confirmations, or API responses — additional configuration or development is required.
Validation Checklist
Kaptio includes validation rules on Package, Component, and Component Option records that enforce required field combinations at save time. The checklists below serve as a manual QC process to catch configuration issues that validation rules alone do not cover — such as sort order, default selection, and category assignments.
For automated post-build verification, use Costings or Builder to test pricing calculations, and the Package Search API to confirm the package appears correctly with the expected filters and pricing. See Package Search Troubleshooting for post-build verification steps.
Before activating any package, verify:
Package Record
- Record Type selected (Package or Bundle)
- Departure Type is correct (cannot be changed after save)
- Duration matches the total trip length in nights
- Selling Price Setup configured
- Cost Setup configured
- Service Level Mode set (if applicable)
- Booking Wizard Unit Number Selection configured (
PhysicalInventorySelection__c) - Visibility Setting and Access Rule are configured
- Categories assigned for search filtering
- Start and End Locations are set
- Package marked as Active
Components
- Each component has correct Selection Type (Required / Optional / NonRefundable)
- Optional components have Booking Wizard Tab set (Options / Pre Stay / Post Stay / Protection Plan)
- Sort order produces the correct itinerary sequence
- Start Day and End Day are set on each component
- Package Totals setting reviewed (Included vs Excluded)
-
IsMainComponent__creviewed on optional components (percentage-based cancellation fees) -
IsMainTourComponent__creviewed on optional components (fixed-amount cancellation fees) - Component Behaviour set correctly
- Pricing Behaviour set correctly
- No duplicate or orphaned components exist
- Components marked as Active
Component Options
- Every component has at least one option assigned
- Default options are marked for components with multiple choices
- Pricelists assigned to component options (if in use)
- Service levels linked (if Service Level Mode is not Standard)
- Price Categories are selected on each option
- Sort order of options matches the intended display sequence
- Departure assignments set (if Departure Mode is Selective Departures for Component or Selective Departures for Component Options)
Pricing
- Prices configured for all price categories and channels
Permissions
- Users have Create/Read/Edit on Package, Component, and Component Option objects
- Users have Read access to Services (Item) and Inventory
Activation
- Activate the package and run a test search
- Verify the package appears with correct pricing
- Confirm component ordering matches expectations
- Test with different service levels (if applicable)
Common Issues and Solutions
| Issue | Likely Cause | Solution |
|---|---|---|
| Package not appearing in search at all | Active is unchecked; Visibility is Restricted with no matching Access Rule; or no valid package seasons cover the searched dates | Check Active flag; verify Access Rule assignments match the search channel; confirm package seasons include the departure date (and day-of-week rules) |
| Components in wrong order | Sort values are incorrect or missing | Review Sort__c on each component; use increments of 10 |
| Wrong service selected by default | IsDefault__c not set, or advanced defaulting overriding | Check IsDefault__c on component options; review ComponentDefault__c records if using advanced defaulting |
| Package shows “Unpriced” | Unpriced__c is checked on the package or a component option | Uncheck the flag, or verify that pricing is configured |
| Component not appearing in Booking Wizard | Component is inactive (IsActive__c = false) or Booking Wizard Tab is not set | Activate the component and verify the tab assignment |
| Access Rule not working | The Access Rule does not include the Channel or Account the user is searching or booking under, or Visibility is not Restricted (Access Rules apply only when Visibility is Restricted) | Set Visibility to Restricted; then on the Access Rule, verify the correct Channel and Account assignments |
| Categories not filtering correctly | Using deprecated Category__c field instead of Categories__c | Switch to the multiselect Categories__c field |
| Package commission was expected but reseller commission is zero | Reseller Commission Settings is Package Level (default) but there is no Commission Group on the Package or Bundle — Package Level does not fall back to the Item | Set Commission Group on the Package (or Bundle, if the component sits in a bundle), or change the component to Inherit From Selected Service so commission resolves from the service |
| Search returns results but no price | Price seasons or component option pricing is missing or misconfigured | Check there are valid price seasons and pricing for the component option, and that pricing is expected based on Pricing Behaviour |
| Wrong price showing for a departure | Departure date falls in the wrong price season due to date boundary errors, or overlapping price seasons resolve unexpectedly | Check price season start/end dates — ensure boundaries align correctly (no off-by-one errors); reduce overlapping price season windows where possible |
| ”No availability” despite correct package seasons | Inventory seasons or allotments don’t cover the date, capacity is zero, or inventory is marked unavailable | Verify InventorySeason and AllotmentDay for the departure date; check inventory status |
| ”No availability” but seasons and base inventory look correct | Insufficient availability for the requirement — e.g. 3 rooms requested but only 1 room available on that date | Confirm remaining capacity (rooms, pax, or units as configured) meets the full requested quantity for that date |
Related Schema Objects
| Object | API Name | Purpose |
|---|---|---|
| Package | KaptioTravel__Package__c | Top-level product container |
| Component | KaptioTravel__Component__c | Segment within a package (Bundle, Component, Live) |
| Component Option | KaptioTravel__ComponentOption__c | Links a supplier service to a component |
| Component Default | KaptioTravel__ComponentDefault__c | Advanced defaulting rules with filtering and sorting schemes |
| Access Rule | KaptioTravel__AccessRule__c | Controls channel and account access to packages |
| Channel Access Rule Assignment | KaptioTravel__ChannelAccessRuleAssignment__c | Links a channel to an access rule |
| Account Access Rule Assignment | KaptioTravel__AccountAccessRuleAssignment__c | Links an account to an access rule |
| Service | KaptioTravel__Item__c | Supplier service offering |
| Service Level | KaptioTravel__ServiceLevel__c | Pricing tier (Standard, Superior, Luxury) |
See Also
Downstream Guides (affected by settings in this guide)
- Package Search Guide — How packages appear in search results
- Booking Wizard Guide — Full Booking Wizard walkthrough
- Package Modifications Guide — Cancellation, transfer, modify, and change occupancy
Departure-Type Specific Guides
- Anyday Package Setup Guide — Flexible date packages with per-component pricing
- Seasonal Package Setup Guide — Time periods, day-of-week rules, and price seasons
- Fixed Departure Management — Named departures with capacity and overrides
Related Configuration Guides
- Group Tours — Configuration Guide — How Group Tours connect to Packages, price models, and service conversion
- Service Level Configuration — Multi-tier pricing setup
- Package Level Configuration — Cabin-category pricing for cruise and rail
- Pre/Post Stay Configuration — Flexible accommodation nights
- Supplier & Service Setup — Creating services before building packages
- Cost & Pricing Architecture — How pricing flows from services to packages
- Booking Wizard Options & Extras Guide — How options and extras display in the Booking Wizard
- Waitlist Guide — Waitlist configuration (requires
AllowWaitListRequestspilot feature) - Cancellation Configurations — Setup & How They Work — Cancellation policy setup and behavior
- Location Setup Guide — Location configuration for packages and services
- Visibility Settings & Access Rules — Package visibility and channel access control
- Priority Schemes Guide — Priority scheme configuration
Related Outcomes
- Build Tour Packages That Sell — Full capability context for tour package creation
- Supplier Network, Simplified — Service catalog setup (upstream of packages)
- Manage Booking E2E — Full booking lifecycle including modifications
Support
- Kaptio Service Desk — For feature enablement, pilot features, and support requests