Skip to main content

Read the Policy rule cascade: see why a slot shows €X on Channel Y

This guide walks you through the Policy rule cascade and Applied policy rules panels in Captainbook — the two surfaces that show you how Policy Rules transform a specific availability's prices and capacity, per channel.

Written by Jerome Bajou

Prerequisites

  • At least one Policy Rule that's enabled and whose scope matches the availability you want to inspect. (No matching rules = no panel renders.)

  • The user viewing the cascade must have permission to open the availability detail page.

  • For the cleanest read, the rule should already be saved — the cascade reflects the live database, not in-progress edits in the form. To preview an unsaved rule, use Preview / Simulate on the policy form instead.

What the cascade shows

The cascade answers two questions an operator constantly hits:

  • "Why does this slot show €85 on GetYourGuide but €100 on my widget?"

  • "Which of my rules actually fired on this availability, and in what order?"

It's a per-availability, per-channel trace. Pick a slot, pick a channel, and you see initial values → each rule's effect → final values. The trace is generated on demand from the current state of your rules, so disabling a rule or editing its scope is reflected immediately on the next page load.

Important caveat: the trace is availability-level, not booking-level. If a customer booked yesterday and you've since changed a rule, the cascade panel shows what the rules currently do to that slot — not what they did at the time of the original booking.

Step 1 — Open an availability

  1. In Captainbook, navigate to the product that owns the slot you want to inspect.

  2. Open the availability for the specific date / time. (Same page you'd use to check the slot's capacity or open bookings.)

  3. Scroll to the Policy rule cascade section.

If you don't see the section, no rules currently match this availability across any channel. Either no rules exist in this business unit, all matching rules are disabled, or their scope excludes this slot. Open Channel Policies (Products → Quick Actions → Channel Policies), check which rules are enabled, and confirm at least one targets the right product/channel/weekday/date range.

Step 2 — Expand the cascade and pick a channel

The panel header reads Policy rule cascade — Step-by-step view of how the active rules transform this slot's capacity and prices for each channel.

The detailed breakdown is collapsed by default to keep the page short for operators who only need to confirm rules are present. To dig in:

  1. Click Show step-by-step details (the chevron at the top of the panel).

  2. Use the View as dropdown to pick the channel context you want to inspect. Options include:

    • Widget: <widget name> — one entry per direct booking widget that any rule could touch.

    • Channel: <channel name> — one entry per OTA channel (GetYourGuide, Viator, Project Expedition, etc.) that any rule could touch.

    • Channel: <channel name> + Reseller: <reseller name> — one entry per marketplace reseller pairing, when reseller-scoped rules exist.

    • Back office (operator-created bookings) — appears only when at least one rule reaches operator-created bookings, i.e. has Apply Globally on (or has neither Channels nor Widgets selected).

    Entries are sorted by the number of rule steps each channel attracts, descending — the channel touched by the most rules lands at the top, and ties break alphabetically by label.

Step 3 — Read the trace

Once a channel is selected, the panel renders three groups of information:

Initial values

A grey card at the top showing the slot's untouched state:

  • Per-channel capacity — how many seats this channel could sell before any rule applies.

  • Global capacity — how many seats exist on the slot total, shared across all channels.

  • Per-category prices — fare for each pricing category (e.g. "Adults", "Children") in your tenant currency, before any rule's adjustment.

These are the numbers the rules start from. If you suspect a rule isn't matching, compare these against the Final values below — if they're identical, no rule touched this channel.

Step 1, Step 2, … (one card per applied rule)

Each rule that matched is rendered as a numbered step, in priority order (lower priority number first). The card header shows the rule name and its priority.

Inside each step:

  • Per-channel capacity: X → Y — only shown if the rule changed it. Reads "before → after".

  • Global capacity: X → Y — only shown if the rule changed it.

  • <Category name>: €X → €Y — one line per pricing category whose fare the rule changed. Categories left untouched aren't listed.

If a step card shows just the rule's name with no lines underneath, that rule matched but its actions didn't move the needle for this channel + slot — for example a price-percent rule scoped to a pricing category this slot doesn't use, or a Capacity % cap that's already higher than the per-channel value an earlier rule (or the slot's own cumulative capacity) had set.

Final values

A turquoise-bordered card at the bottom, mirroring the Initial values layout but showing the after state once every step has been applied. These are the numbers a customer booking through this channel will actually see.

Step 4 — Cross-check with Applied policy rules

Above the cascade panel on the availability page, the Applied policy rules — this slot panel lists every rule whose scope matches this availability — including disabled ones (greyed out with a "disabled" label) and globally-flagged ones (tagged "global"). The same panel (titled simply Applied policy rules) also appears on product edit pages, on channel detail pages, and on the Marketplace page (titled Applied policy rules — Marketplace), scoped to whatever entity you're viewing.

Each row shows:

  • Rule name + priority.

  • The rule's actions, summarised: −15% price, cap 30% capacity, cap 50 pax, etc.

  • A condition summary if the rule has one (e.g. ≤24 hrs to event).

  • A campaign summary (campaign: <start> → <end>), availability date range, and weekdays — when set.

  • An Edit link that takes you straight to the rule's form.

Use Applied policy rules to scan "what's applicable here at all?" and the cascade to drill into "what do they do, in what order, for which channel?".

Managing what you see

  • Collapse / expand the cascade — the panel remembers nothing across page loads; it always opens collapsed. That's intentional — most visits are just "did my rule land here?" checks, and the Applied policy rules summary answers that without expanding.

  • Reorder the steps — the steps follow rule priority. To change the order, open Channel Policies and either edit the Priority number on the rule or drag rows on the index. The cascade reflects the new order on the next page load.

  • Make a step disappear — disable the rule on the Channel Policies index, or tighten its scope so it no longer matches the availability. The next page load will skip it.

  • Make the whole panel disappear — disable or delete every rule whose scope matches this availability. The panel is omitted entirely when there are zero applied rules across all channels.

Troubleshooting

  • "The cascade panel isn't on the page" — No enabled rule currently matches this availability across any channel. Open Channel Policies, confirm at least one rule is enabled, and that its weekdays / date range / product scope cover this slot. Then reload the availability.

  • "My rule appears in Applied policy rules but not as a step" — The rule matched scope, but its actions produced no change for the channel you're viewing. Switch the View as dropdown to a different channel — the rule might be active there. Or open the rule and check whether its actions target a different pricing category than this slot has.

  • "The dropdown only shows 'Back office'" — Your business unit has no widgets and no channels configured, but you do have an Apply Globally rule (or a rule with no widget/channel scope). The Back office row is the only context that exists to render. Configure at least one widget or channel in the business unit to get per-channel rows.

  • "The cascade contradicts what the customer paid" — Existing bookings keep the fare they were created with. The cascade shows current rule behaviour against the current slot — not historical pricing. If pricing has drifted from a past booking, that's a rule edit that happened after the booking was placed.

  • "A reseller pairing I expected isn't listed" — Only resellers explicitly named in a rule's Resellers scope generate Channel + Reseller pairings. A rule with the Marketplace channel selected but no specific reseller IDs will surface as plain Channel: Marketplace, not as per-reseller rows.

  • "Per-channel capacity didn't change but I added a Capacity % rule" — Capacity % caps the channel'sallocation. If the per-channel value before your rule was already below the cap (e.g. 10 seats vs a cap of 30% of 100 = 30 seats), the cap doesn't tighten anything and the step shows no change. The rule still applied — it just couldn't move the number down further.

  • "Steps appear in the wrong order" — Steps follow the rule's Priority field, lower-priority-number first. Reorder by editing the Priority on the rule, or by drag-and-drop on the Channel Policies index.

What the cascade can do

  • Show, per channel and per reseller pairing, exactly how your active rules transform a specific availability's capacity and prices.

  • Render one numbered step per applied rule, in priority order, with before / after values for every metric the rule actually changed.

  • Surface the Back office context when an Apply Globally rule exists — so you can see how operator-created bookings on that slot are priced.

  • Pair with the Applied policy rules panel to answer "is my rule even matching this slot?" before drilling into the per-channel effect.

  • Update live — disabling a rule, editing its scope, or changing its priority is reflected on the next page load.

What the cascade cannot do

  • Show the cascade for a specific past booking. The trace is per-availability and reflects current rule state — not the historical state at the time a customer booked.

  • Render on the booking detail page. Open the availability instead.

  • Explain why a rule didn't match. If you expected a rule to appear but it doesn't, use Preview / Simulate on the policy form — that surface tells you when a channel "does not match" a rule's scope.

  • Compare two channels side by side. Switch the View as dropdown one at a time; there's no diff view today.

  • Replay the cascade as of a date in the past. To dry-run a future or past datetime, use Preview / Simulate with the As-of field set.

For the full guide to creating and managing Policy Rules, see Set up Policy Rules.

Did this answer your question?