> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getveles.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quote Validation Rules

> Enforce deal-level guardrails that evaluate the entire Pricing Option: discount limits, required products, billing constraints, and approval triggers.

Quote Validation Rules evaluate the entire [Pricing Option](/get-started/calculator/options) as a whole. They're designed for "big picture" guardrails -- constraints that apply to the overall deal structure rather than individual line items.

Use Quote Validation Rules when the condition depends on aggregated deal metrics (total discount, TCV, product count, recurring vs. one-time split) or when the constraint is about the deal composition (required products, billing frequency restrictions, minimum deal sizes).

For rules that evaluate individual line items, use [Row Validation Rules](/get-started/rules-and-approval/untitled-page) instead.

***

## When to use Quote Validation

Quote Validation is the right kind when:

* The condition involves **deal-level totals** (total discount %, TCV, recurring total, product count)
* You need to enforce a constraint about **what's on the deal** (e.g., certain products must always appear together)
* The rule applies regardless of which specific line item triggered it
* The approval or block should apply to the **entire option**, not a single line

***

## Creating a Quote Validation Rule

1. Navigate to **Admin Console > Price Books > Rules**.
2. Click **Create New Rule**.
3. Set the **Kind** to **Quote Validation**.
4. Enter a **Name** and **Description**.
5. Set the **Status** to Active.
6. Click **Save**, then click **New Rule Set** to build the logic.

***

## Building the rule set

### Scope

For Quote Validation rules, the scope is always **Option** -- the rule evaluates the Pricing Option as a whole.

### Available facts

These are the data points you can build conditions against:

| Fact                     | What it evaluates                                              | Example condition                                |
| ------------------------ | -------------------------------------------------------------- | ------------------------------------------------ |
| **Discount %**           | The overall discount percentage across all line items.         | Discount % is greater than or equal to 25        |
| **Recurring Discount %** | The discount on recurring items only (excludes one-time fees). | Recurring Discount % is greater than 20          |
| **Total**                | The total deal value after all adjustments.                    | Total is less than 5000                          |
| **Recurring Total**      | The total recurring value (ARR).                               | Recurring Total is less than 10000               |
| **One-time Total**       | The total one-time value (services, setup fees).               | One-time Total is greater than or equal to 50000 |
| **List Price**           | The total list price before any adjustments or discounts.      | List Price is greater than or equal to 100000    |
| **Final Rate**           | The final blended rate across the option.                      | Final Rate is less than 30                       |
| **Product Count**        | The number of distinct products on the option.                 | Product Count equals 1                           |
| **Promotion Count**      | The number of promotions applied.                              | Promotion Count is greater than or equal to 2    |
| **Billing Frequency**    | The billing cadence selected.                                  | Billing Frequency equals Monthly                 |
| **Currency Code**        | The currency of the option.                                    | Currency Code equals EUR                         |
| **Year**                 | The year of the commitment (for multi-year deals).             | Year equals 1                                    |

### Operators

| Operator                        | Usage                                                    |
| ------------------------------- | -------------------------------------------------------- |
| **Equals** / **Not Equals**     | Exact match. "Billing Frequency equals Annual."          |
| **Is Greater Than or Equal To** | Numeric threshold. "Discount % ≥ 20."                    |
| **Is Less Than**                | Numeric upper bound. "Total \< 5000."                    |
| **Is In** / **Is None Of**      | Match against a list. "Currency Code is in \[USD, CAD]." |

### Combining conditions

Add multiple conditions to a single Rule Set. All conditions must be true for the action to fire.

**Example:** A rule that triggers only when the discount exceeds 20% **and** the billing frequency is monthly **and** the deal is in EUR:

* Condition 1: Discount % ≥ 20
* Condition 2: Billing Frequency equals Monthly
* Condition 3: Currency Code equals EUR

***

## Actions

When the conditions are met, configure what happens:

### Message

Write the text the rep sees on the quote. Be specific about what's wrong and what needs to happen.

**Good examples:**

* "Deal discount exceeds 25%. Requires VP of Sales approval before publishing."
* "Monthly billing is not available for deals under \$10,000 ARR. Switch to annual billing or increase the deal size."
* "A Support product is required when the recurring total exceeds \$50,000."

### Severity

| Severity  | What it does                                                                                                                                                    |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Warn**  | Displays an alert on the Pricing Option. The rep can continue building the quote but cannot publish until the warning is resolved (typically through approval). |
| **Error** | Blocks the rep from saving. The deal configuration must be changed to resolve the error. No approval path -- the condition itself must be fixed.                |

### Approval routing

Toggle **Requires Approver** and select an [Approval Tier](/get-started/calculator/approvals) to route the deal for formal review. When triggered, the Publish button changes to Request Approval and the deal is routed to the appropriate tier.

***

## Examples

### Maximum discount limit

Prevent reps from offering more than 25% off without deal desk review.

| Setting       | Value                                                     |
| ------------- | --------------------------------------------------------- |
| **Name**      | Maximum Discount Limit                                    |
| **Kind**      | Quote Validation                                          |
| **Scope**     | Option                                                    |
| **Condition** | Discount % ≥ 25                                           |
| **Severity**  | Warn                                                      |
| **Message**   | "Deal discount exceeds 25%. Requires Deal Desk approval." |
| **Approval**  | Tier 2: Deal Desk                                         |

### Minimum deal size

Block deals below a minimum ARR threshold.

| Setting       | Value                                                                               |
| ------------- | ----------------------------------------------------------------------------------- |
| **Name**      | Minimum Deal Size                                                                   |
| **Kind**      | Quote Validation                                                                    |
| **Scope**     | Option                                                                              |
| **Condition** | Recurring Total \< 10000                                                            |
| **Severity**  | Error                                                                               |
| **Message**   | "Recurring total is below the \$10,000 minimum. Add products or adjust quantities." |
| **Approval**  | None (Error blocks the deal)                                                        |

### Billing frequency restriction

Require annual billing for deals under a certain size.

| Setting        | Value                                                                                       |
| -------------- | ------------------------------------------------------------------------------------------- |
| **Name**       | Monthly Billing Restriction                                                                 |
| **Kind**       | Quote Validation                                                                            |
| **Scope**      | Option                                                                                      |
| **Conditions** | Billing Frequency equals Monthly **AND** Recurring Total \< 25000                           |
| **Severity**   | Error                                                                                       |
| **Message**    | "Monthly billing is only available for deals with \$25,000+ ARR. Switch to annual billing." |
| **Approval**   | None                                                                                        |

### Required product bundling

Ensure that certain products always appear together.

| Setting        | Value                                                                                 |
| -------------- | ------------------------------------------------------------------------------------- |
| **Name**       | Require Support on Large Deals                                                        |
| **Kind**       | Quote Validation                                                                      |
| **Scope**      | Option                                                                                |
| **Conditions** | Recurring Total ≥ 50000 **AND** Product Count for Category "Support" equals 0         |
| **Severity**   | Warn                                                                                  |
| **Message**    | "Deals over \$50,000 ARR require a Support product. Add Premium or Standard Support." |
| **Approval**   | Tier 1: Sales Manager (if rep wants to override)                                      |

### Tiered discount approvals

Route deals to different approvers based on how deep the discount goes.

This requires **two separate rules**, each targeting a different threshold:

**Rule 1: Moderate discount**

| Setting       | Value                                |
| ------------- | ------------------------------------ |
| **Condition** | Discount % ≥ 15 AND Discount % \< 25 |
| **Severity**  | Warn                                 |
| **Approval**  | Tier 1: Sales Manager                |

**Rule 2: Large discount**

| Setting       | Value               |
| ------------- | ------------------- |
| **Condition** | Discount % ≥ 25     |
| **Severity**  | Warn                |
| **Approval**  | Tier 2: VP of Sales |

Both rules can be active simultaneously. A 20% discount triggers Rule 1 (manager approval). A 30% discount triggers both, requiring sign-off from both tiers.

***

## Tips for effective Quote Validation Rules

**Start with discount limits.** This is the highest-impact rule for most organizations and the easiest to configure. Set a reasonable threshold, wire it to an approval tier, and iterate from there.

**Use Error severity sparingly.** Errors block the rep entirely. Reserve them for hard constraints (minimum deal size, incompatible billing configurations) where the deal fundamentally can't proceed. For everything else, Warn + Approval gives the rep a path forward.

**Write actionable messages.** The message should tell the rep what's wrong and what to do about it. "Rule violated" is useless. "Deal discount exceeds 25%. Requires Deal Desk approval before publishing" tells them exactly where they stand.

**Test before activating.** Build a test quote that deliberately triggers the rule. Verify the alert appears on the Pricing Option, the message is clear, and the approval routes to the right tier.

***

## What's next

<CardGroup cols={2}>
  <Card title="Pricing Rules" icon="tag" href="/get-started/rules-and-approval/pricing-rules">
    Automatically adjust pricing based on deal conditions.
  </Card>

  <Card title="Row Validation Rules" icon="table-rows" href="/get-started/rules-and-approval/untitled-page">
    Enforce guardrails at the individual line item level.
  </Card>

  <Card title="Approvals" icon="check-double" href="/get-started/calculator/approvals">
    Configure the approval tiers that validation rules route to.
  </Card>

  <Card title="Getting Started with Rules" icon="shield-check" href="/get-started/rules-and-approval/learn-the-basics">
    Overview of the rules engine: kinds, scopes, facts, and operators.
  </Card>
</CardGroup>
