Package Fundamentals

To be Reviewed

The shared foundation for all package types — components, component options, sort order, defaulting, categories, access rules, and package-level fields that apply regardless of departure type.

Version 18 min read | March 23, 2026 Gallery

Overview

Every package in Kaptio — whether Anyday, Seasonal, or Fixed — shares a common foundation: components, component options, sort ordering, defaulting rules, categories, and access controls. These fundamentals are consistent across all departure types.

This guide covers the shared layer. The departure-type-specific guides (Anyday, Seasonal, Fixed) build on top of what is described here. Read this guide first if you are setting up any package for the first time.

Prerequisites

Before creating any package, ensure the following are in place:


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:

  • Package — a top-level, sellable product (the trip your customer books)
  • 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

Choose Bundle when creating a shared segment that will be re-used across multiple packages.

After selecting the record type, fill in the required fields:

FieldAPI NameDescriptionBehavior
NameNameThe display name shown in search results and documentsFree text; use a clear, customer-facing title
Departure TypeDepartureType__cAnyday, Seasonal, or FixedChoose carefully — changing after save may affect departures, seasons, and components already configured against the package
DurationLength__cTotal trip length in nightsDetermines the date span for components
Booking Wizard Unit Number SelectionPhysicalInventorySelection__cControls whether cabin/room number selection appears in the Booking WizardPicklist — see guidance below

Booking Wizard Unit Number Selection values:

ValueWhen 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/HiddenLand-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 ControlledMixed 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.

Package Settings

After saving the package record, configure these additional settings:

FieldAPI NameDescriptionBehavior
Package CodePackageCode__cBrochure or internal identifierUsed as a prefix for reservation numbers via Tour Code
ActiveIsActive__cControls whether the package appears in searchLeave unchecked until setup is complete
Visibility SettingVisibilitySetting__cWho can see the package: Visible for All (default) or RestrictedWhen Restricted, an Access Rule must be assigned
Access RuleAccessRule__cControls which channels and accounts can access the packageOnly applies when Visibility is Restricted; overrides service-level access rules
CategoriesCategories__cMultiselect picklist for filtering and grouping packagesValues are configured in metadata (e.g., Family Package, Adventure Package)
Start LocationPackageStartLocation__cLookup to Location; used in Package Search
End LocationPackageEndLocation__cLookup to Location; used in Package Search
SupplierSupplier__cPrimary supplier account for the packageUsed for single-supplier prepackaged products
UnpricedUnpriced__cShows “Unpriced” in search instead of a priceUse when prices are not yet configured or are available on request

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:

FieldAPI NameDescriptionBehavior
Selling Price SetupSellingPriceSetupChoice__cHow sell prices are derivedDynamic is the supported mode — sell prices are calculated from cost + markup/margin rules
Cost SetupNetPriceSetupChoice__cHow cost prices are derivedDynamic is the supported mode — cost prices are calculated from service pricing or from a 3rd party source
Sell Price RoundingSellPriceRounding__cRounding rule for calculated sell pricesOverrides the channel-level rounding setting for required components
Primary Pricing Component (Classic only)PrimaryPricingComponent__cWhich component drives the primary price splitOnly relevant for fixed cost or sell price setups (classic costings). Not used in lightning costings where Dynamic is the only supported mode
Profitability GroupProfitabilityGroup__cLinks to a Profitability Book for margin targetsSee Cost & Pricing Architecture
Commission GroupCommissionGroup__cReseller commission groupingCan be overridden at the component or price category level
Discount GroupDiscountGroup__cDiscount rule groupingCan be overridden at the component or add-on level

Service Level Mode

The Service Level Mode (ServiceLevelMode__c) field controls whether the package supports tiered pricing:

ModeBehavior
StandardSingle pricing tier — no service level selection during booking
Service LevelsMultiple tiers (e.g., Standard, Superior, Luxury) — guest selects a tier
Package LevelsCabin-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.


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

TypePurposeExample
BundleGroups multiple services into a single destination segment”City A — 3 Night Stay” (hotel + breakfast + city tour)
ComponentA single service with structured pricing”Airport Transfer”, “Guided Walking Tour”
LiveReal-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.

FieldAPI NameDescriptionBehavior
NameNameDescriptive label for the componentShown in Builder, Costings, and customer documents
Component TypeComponentType__cBundle, Component, or LiveDetermines the structure and pricing behavior
SortSort__cDisplay order in the itineraryComponents are rendered in ascending sort order
Start DayStart__cDay number when this component beginsMandatory; determines placement within the package duration
End DayEnd__cDay number when this component endsFor multi-day components (e.g., accommodation spanning 3 nights)
Is ActiveIsActive__cWhether the component is selectableInactive components are hidden from booking flows
Is Main ComponentIsMainComponent__cCore component for summaries and cancellation rulesAffects which component drives package-level policies
Is Main Tour ComponentIsMainTourComponent__cThe single primary tour/cruise componentOnly one component should have this flag; drives tour-level summaries

Component Behavior Fields

These fields control how the component behaves during booking:

FieldAPI NameBehavior
Selection TypeSelectionType__cHow the guest interacts with this component during booking — see Selection Type values below
Component BehaviourComponentBehaviourChoice__cSingle-day vs multi-day behavior
Booking Wizard TabBookingWizardTab__cWhich tab this component appears on in the Booking Wizard
Day by Day DisplayDayByDayDisplay__cHow the component appears in day-by-day search results
Inventory RequiredInventoryRequired__cWhether this component affects package availability
Available AnydayIsAvailableAnyday__cFor single-day services: allow any day within the package dates
Package TotalsPackageTotals__cWhether this component’s price is included in the package total
Pricing BehaviourPricingBehaviorChoice__cControls whether cost and sell prices from the supplier service are applied — see Pricing Behaviour values below
Allocation BehaviorAllocationBehavior__cControls which nights of an accommodation stay consume allotment — see Allocation Behavior values below
IncludedIsIncluded__cWhether this component is included when booking — for add-on components: controls whether the component is included by default or opt-in
Is Mandatory OptionalIsMandatoryOptional__cOptional component that still requires a selection in Booking Wizard

Selection Type Values

The Selection Type determines whether a component is included in the itinerary by default and what happens if the guest removes it:

ValueBehavior
Pre-Selected RefundableThe 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.
OptionalThe 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-RefundableThe 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).

Pricing Behaviour Values

The Pricing Behaviour field controls whether cost and sell prices from the associated supplier service are applied to the itinerary. Set this according to the pricing you want for the component:

ValueEffect
StandardBoth cost and selling price from the associated supplier service will be used. This is the default for most components.
Free ComponentThere 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 RateThe 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 RateThe 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).

Allocation Behavior Values

The Allocation Behavior field controls which nights of an accommodation stay consume allotment. This is a specialist field that only appears when the Allotment Categories setting is enabled in your org — most users will not see it. When visible, it is typically set automatically based on the component’s record type.

ValueBehavior
StandardAll nights of the stay consume allotment from the standard allotment category. This is the default.
PreNightThe stay consumes allotment from the pre-night allotment category. Used for pre-tour accommodation components (e.g., an extra night before the main tour starts).
PostNightThe stay consumes allotment from the post-night allotment category. Used for post-tour accommodation components (e.g., an extra night after the main tour ends).

Note: If you do not use Allotment Categories, this field can be ignored — allotment consumption defaults to Standard behavior automatically.

Pre/Post Stay Components

For accommodation components that support flexible check-in/check-out:

FieldAPI NameBehavior
Min Number of NightsMinNumberOfNights__cMinimum nights the guest can select
Max Number of NightsMaxNumberOfNights__cMaximum nights the guest can select
Create Itinerary Item Per Night Per RoomCreateItineraryItemPerNightPerRoom__cCreates separate line items for multi-night pre/post stays

See Pre/Post Stay Configuration for the full setup.


Part 3: Component Options (Assigning Services)

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.

Creating Component Options

For each component, click New Component Option. The creation flow starts by selecting the Supplier (Account), which filters the available services — then select the Service from that supplier. After the service is linked, configure the remaining fields:

FieldAPI NameDescriptionBehavior
ServiceItem__cThe supplier serviceLookup to Item__c (Service) — selected after choosing the Supplier
Price CategoryPriceCategory__cWhich price category to useLinks to the service’s pricing tier
SortSort__cDisplay order of options within the componentOptions shown in ascending sort order
Service SortServiceSort__cControls which service is auto-selected when other options are filtered out (e.g., sold out or unavailable)The defaulting priority is: (1) the option marked as Default is chosen first; (2) otherwise, the lowest Service Sort value wins; (3) if Service Sort values are equal or unset, the Sorting Scheme is used (if configured); (4) without any of the above, the order is undefined. For example, if a hotel component has three options with Service Sort values 1, 2, and 3, and a filtering scheme removes sold-out services, the system selects the lowest available option automatically. Sorting is from lowest to highest value (1 = first).
DefaultIsDefault__cMarks this as the default optionWhen a package is added to a quote, the default option is pre-selected. See Advanced Defaulting for more complex defaulting rules.
MandatoryIsMandatory__cWhether the add-on is automatically includedOnly applicable to Add-ons — when checked, the add-on is automatically added to the service during booking. If unchecked, the add-on will not be added. Users do not have the opportunity to add mandatory add-ons manually in Package Search; the system handles them automatically.
UnpricedUnpriced__cShows “Unpriced” in Booking WizardFor options where pricing is handled separately

Additional Option Fields

FieldAPI NameBehavior
Add-onAddon__cLinks to an add-on record
Board BasisBoardBasis__cMeal plan assignment
Service LevelServiceLevel__cWhich service level tier this option belongs to
PricelistPricelist__cOption-specific pricing for dynamic packages
Pre-Selected in CostingsIsPreSelectedInCostings__cAuto-selects this optional component option as the default when a Package is added to an Itinerary via Costings (not used in Package Search)

Rail Component Fields

The following fields apply to Rail components only:

FieldAPI NameBehavior
Arrival LocationArrivalLocation__cArrival point for the rail segment
Departure LocationDepartureLocation__cDeparture point for the rail segment
Fare ClassFareClass__cRail fare class (e.g., Standard, Premium, Bedroom)
Available TimesAvailableTimes__cDefault departure/arrival times for this rail option

Part 4: Sort Order and 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__c field on Component__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:

  1. Default flag — if one option has IsDefault__c checked, it is selected. Done.
  2. Lowest Service Sort — if no Default flag is set, the system picks the option with the lowest ServiceSort__c value (1 beats 2, 2 beats 3, etc.).
  3. 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.
  4. 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:

OptionDefault?Service SortStatus
Hotel ANo1Available
Hotel BNo2Sold Out
Hotel CYes3Available
  • 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__c field), 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:

FieldPurpose
ComponentWhich component this default applies to
Default ServiceThe service to use as default (lookup to Item__c)
Service LevelScope the default to a specific service level
ContextParent option when the component is inside a bundle — defaults on the outer package override defaults on a bundle’s inner component
Filtering SchemeJSON conditions to filter which options are eligible before defaulting
Sorting SchemeJSON conditions to sort eligible options (e.g., by cost, by availability) before selecting the default

Advanced defaulting is typically used when:

  • Options should be filtered or sorted by external criteria before defaulting
  • Bundle-level defaults need to override inner component defaults

Part 5: Filtering Package Search Results

Categories, access rules, and activity-level fields all 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__c field. Always use the multiselect Categories__c field for new configuration.

Access Rules

Access rules control which channels and accounts can see and book a package. They only apply when the package’s Visibility Setting is set to Restricted. For the full standalone reference — including service-level visibility and troubleshooting — see Visibility Settings & Access Rules.

How access rules work:

  1. Create an AccessRule__c record
  2. Assign channels to the rule via ChannelAccessRuleAssignment__c
  3. Optionally assign accounts via AccountAccessRuleAssignment__c
  4. Link the rule to the package via the AccessRule__c field

When a package has a Restricted visibility and an access rule assigned:

  • Only channels and accounts linked to that access rule can see the package in search
  • Package-level access rules override any access rules set on individual services within the package

When Visibility Setting is Visible for All, the Access Rule field is ignored — all channels and accounts can see the package.

Activity Level and Pace

FieldAPI NamePurpose
Activity LevelActivityLevel__cPhysical demand rating for travellers
PacePace__cDaily schedule tempo
Minimum AgeMinimumAge__cRecommended minimum guest age

These fields are informational — they appear in search results and documents but do not affect pricing or availability.


Part 6: Other Package-Level Settings

Single Supplier Packages

FieldAPI NamePurpose
Prepackaged by Single SupplierPrepackagedBySingleSupplier__cMarks packages where all services come from one supplier

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

  • Departure Type is correct (cannot be changed after save)
  • Duration matches the total trip length in nights
  • Categories are assigned for search filtering
  • Visibility Setting and Access Rule are configured
  • Start and End Locations are set

Components

  • Sort order produces the correct itinerary sequence
  • Start Day and End Day are set on each component
  • At least one component is marked as Main Component (if using Booking Wizard and Cancellation Configurations)
  • No duplicate or orphaned components exist

Component Options

  • Every component has at least one option assigned
  • Default options are marked for components with multiple choices
  • Service Level assignments are correct (if using tiers)
  • Price Categories are selected on each option
  • Sort order of options matches the intended display sequence

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

IssueLikely CauseSolution
Package not appearing in searchActive is unchecked, or Visibility is Restricted with no matching Access RuleCheck Active flag; verify Access Rule assignments match the search channel
Components in wrong orderSort values are incorrect or missingReview Sort__c on each component; use increments of 10
Wrong service selected by defaultIsDefault__c not set, or advanced defaulting overridingCheck 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 optionUncheck the flag, or verify that pricing is configured
Component not appearing in Booking WizardComponent is inactive (IsActive__c = false) or Booking Wizard Tab is not setActivate the component and verify the tab assignment
Access Rule not workingAccess Rules are only available when Visibility is set to Restricted — the rule likely has an incorrect Channel or Account configuredCheck the Access Rule to ensure the correct Channel or Account is assigned
Categories not filtering correctlyUsing deprecated Category__c field instead of Categories__cSwitch to the multiselect Categories__c field

ObjectAPI NamePurpose
PackageKaptioTravel__Package__cTop-level product container
ComponentKaptioTravel__Component__cSegment within a package (Bundle, Component, Live)
Component OptionKaptioTravel__ComponentOption__cLinks a supplier service to a component
Component DefaultKaptioTravel__ComponentDefault__cAdvanced defaulting rules with filtering and sorting schemes
Access RuleKaptioTravel__AccessRule__cControls channel and account access to packages
Channel Access Rule AssignmentKaptioTravel__ChannelAccessRuleAssignment__cLinks a channel to an access rule
Account Access Rule AssignmentKaptioTravel__AccountAccessRuleAssignment__cLinks an account to an access rule
ServiceKaptioTravel__Item__cSupplier service offering
Service LevelKaptioTravel__ServiceLevel__cPricing tier (Standard, Superior, Luxury)

See Also

Back to Gallery