Rule Transparency & “Why this price”

Pinion’s rules don’t act invisibly. When a rule blocks a save, locks a price, auto-selects a product, hides a SKU, or adjusts a number, the Configurator tells the rep what happened and which rule did it. This page catalogues every one of those feedback surfaces and where it appears. (How the rules themselves are authored lives in Rules; this is purely what the rep sees.)

Validation errors and alerts

Rules raise two severities of message, and they behave differently:

  • Validation — an error. It blocks Save & sync until you resolve it.
  • Alert — a warning. It’s informational; the save still goes through.

When everything’s clean, the footer Validation card shows the all-clear:

The Validation card showing two green checkmarks: no active violations, and save flow ready
The clean state — the footer Validation card: 'No active product or pricing rule violations' and 'Save flow ready'. This is what a rep sees when nothing is blocking the save.

When a Validation rule is in error, the card lists the rule (by its number and message) with a blocking count, and the offending row carries a red badge with the same message on hover:

The Price grid with a validation error — a row badge and the Validation card showing rule PR-0019 with a 1 blocking count
A Validation error — the footer card names the rule (PR-0019, 'Acme Premium Support is required with an Acme Enterprise License') and flags it as blocking; the affected row shows a red badge with the message. Save & sync stays disabled until it's resolved.

An Alert surfaces the same way but in amber, and does not block the save — it’s a nudge:

The Price grid with an amber alert warning on the Acme Data Connector row
An Alert warning — an amber triangle on the Acme Data Connector row with 'Acme Data Connector is best paired with an Acme Enterprise License'. The rep is informed, but the save isn't blocked.

Locks

A lock badge means a rule has taken control of something so the rep can’t change it:

  • Row locks (Selection rules) — a Selection rule can lock a product added, removed, or disabled. The row shows a lock icon and a tooltip naming the rule and the reason (“Added by rule: …”, “Removed by rule: …”, “Disabled by rule: …”); the row’s checkbox is disabled accordingly.
  • Field locks (Pricing rules) — a Pricing rule can lock a line’s price or additional discount. The field renders read-only with a lock badge, and the tooltip names the rule. (You can see a locked discount on the Analytics Module row in Building a Quote → Bundle options — the 10% additional discount is rule-locked.)

A manual edit you make to an unlocked price or discount sticks — a default won’t silently overwrite it. A lock is the only thing that takes the field away from you.

Suggestions and default-selected

Not every rule cue is a hard lock. Two are soft — the rule nudges, but you stay in control:

  • Suggestion sparkle — on an unlocked price or discount field, a sparkle means a Pricing rule is suggesting a value. Accept it by leaving it, or type your own — overriding clears the sparkle.
  • Default-selected sparkle — in the Configure catalog, a sparkle on a product means a Selection rule auto-added it as a default. It’s a soft add: you can still uncheck it. (The Analytics Module carries this sparkle in Building a Quote → the Configure tab.)

Both sparkles reveal the firing rule’s name on hover, so a rep always knows where a suggested number or a pre-checked product came from.

Hidden products — the “hidden by rules” chip

When a rule hides products from the catalog, the Configure tab shows a “N hidden by rules” chip at the bottom of the product list. Expand it to see each hidden product and the rule that hid it — so a rep is never left wondering why a SKU they expected isn’t there.

The Configure catalog with a 'hidden by rules' chip expanded to show a hidden product and its firing rule
The hidden-by-rule chip on the Configure catalog — expanded to name each hidden product (e.g. Acme Legacy Connector) and the rule that hid it.

”Why this price?”

Every priced line has an info icon (ⓘ) next to its line total. Open it for the Price Waterfall — a step-by-step trace of how the price was built: from the list price down through every adjustment to the unit price, then quantity and term, ending in the line total:

The Price Waterfall modal for Acme Seat License — list price, configuration-attribute blended rate, a per-value breakdown, and the line total
The 'Why this price?' Price Waterfall — here, Acme Seat License: List $100 → Configuration Attributes blended rate (+$45, with the per-tier Standard/Professional/Executive breakdown) → unit $145 → Quantity × Term → Line Total $43,500. Each step shows its contribution so the number is never a black box.

The waterfall reflects whatever drove the price — contract/contracted pricing, a discount schedule or block tier, a configuration-attribute blend, or a Pricing-rule adjustment — and reconciles to the cent with the line total. Where a Pricing rule adjusted the line, the discount field also carries an “Added by rule” affordance inline on the grid.

Every number on the panel can be checked against the other numbers on it. Each step states the movement it caused, the running price after it, and enough of its own workings to be verified without knowing anything the panel doesn’t show. The footer closes the loop: final unit price × quantity × term = line total, with quantity being the effective (billable) quantity the line actually prices on.

Bundles

A bundle’s price is not its parent product’s list price. It is built from the options you selected, so the trace opens on a Bundle Composition step instead, showing each option’s quantity, unit price and subtotal, and then the division that turns those into a per-unit figure:

Σ of 2 selected options = $4,200.00 ÷ 6 (Qty 2 × Term 3) = $700.00 per unit

The option rows are line totals (already scaled by bundle quantity and term) while the step itself is a per-unit price, so the step always spells out the divisor between them. This holds for Roll-Up and Itemized bundles alike — including Itemized, where the parent line legitimately carries $0 and the child lines carry the money.

Multi-dimensional (MDQ) lines

A line with per-year segments opens on a Segment Breakdown — one row per segment, plus a setup fee row where the product has one — and each row carries that segment’s own quantity, unit price and subtotal. The footer’s unit price is the blended rate across those rows, so it still multiplies out to the line total.

Each segment also has its own ⓘ. Opening it gives that segment’s full chain: its basis, any dimensionally-variable attribute value that changes its price (shown as its own Dimensional Attribute step), its annual uplift, any concession you applied to that segment, and its final unit price. For a segmented bundle the segment’s chain starts from the same Bundle Composition basis described above, uplifted for that year.

Every step moves the number by exactly what its label says: the Annual Uplift step lands on the running price ramped by the dimension’s uplift for that year, no more. If a saved segment price differs from what the labelled steps produce, the difference is shown as a separate Unexplained adjustment step rather than being folded into another label — so a “+10%” step never quietly carries a larger move.

Where a segment is prorated — it covers only part of its period, because a co-term truncated it or an amendment split it — the quantity step spells the scaling out as raw quantity × proration factor rather than showing only the scaled result, so you can see where the number came from. The factor is shown at its real precision: a one-day slice of a year reads × 0.0027, not a rounded-away × 0.00. A factor that displayed as zero next to a line charging real money would explain nothing, so it isn’t rounded. See MDQ — Segment Pricing.

Save gating

The two severities decide whether you can save:

  • Validation errors disable Save & sync. The button is greyed and its tooltip names the first blocking rule. Bundle-configuration violations (unmet required options, option constraints, feature min/max) gate the save the same way.
  • Alerts never block. You’ll see the warning, and the save proceeds.

This is the contract: if the Configurator let you save it, the rules are satisfied — and if it won’t, it tells you exactly which rule to address.

  • Building a Quote — where these badges appear in the flow (sparkles in the catalog, locks on the grid, the waterfall on each line).
  • Overview & Launch — the workspace these surfaces live in.
  • Rules · Pricing Rules — how the rules driving this feedback are authored.
  • Rule Simulator — test which rules fire, and why, without saving.