> ## 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.

# Row Validation Rules

> Enforce line-item-level guardrails that evaluate individual products on a quote: discount caps, price floors, quantity minimums, and product-specific approvals.

Row Validation Rules evaluate individual [Quote Lines](/get-started/calculator/quote-line) -- single products on a Pricing Option. Unlike [Quote Validation Rules](/get-started/rules-and-approval/quote-validation-rules), which look at the deal as a whole, Row Validation targets specific products or line items and surfaces feedback directly on the affected row.

The primary advantage is **granularity**. When a Row Validation rule fires, the alert appears on the exact line item that triggered it. The rep doesn't have to search through a long quote to figure out which product has a problem -- the issue is flagged right where it occurs.

Use Row Validation Rules when the condition is about a specific product's pricing, discount, quantity, or category -- not the overall deal structure.

***

## When to use Row Validation

Row Validation is the right kind when:

* The condition applies to a **specific product or SKU** (not the deal total)
* You need to enforce a **per-line discount cap** or **price floor**
* The rule should fire for a **specific product category** regardless of what else is on the deal
* You want the alert to appear **on the line item itself** for immediate clarity
* The constraint involves **quantity minimums** or **unit-level pricing** for a particular product

For deal-level constraints (total discount, TCV thresholds, required product combinations), use [Quote Validation Rules](/get-started/rules-and-approval/quote-validation-rules) instead.

***

## Creating a Row Validation Rule

1. Navigate to **Admin Console > Price Books > Rules**.
2. Click **Create New Rule**.
3. Set the **Kind** to **Row 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 Row Validation rules, the scope is **Row** -- the rule evaluates each line item individually. If a quote has 5 line items, the rule is checked against each of the 5 independently.

### Available facts

These are the data points you can build conditions against for each line item:

| Fact                | What it evaluates                                                                               | Example condition                       |
| ------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------- |
| **Product SKU**     | The SKU of the product on this line.                                                            | Product SKU equals `PLATFORM-001`       |
| **Product ID**      | The internal product identifier.                                                                | Product ID equals `prod_abc123`         |
| **Product Name**    | The display name of the product.                                                                | Product Name contains "Integration"     |
| **Row Discount**    | The discount percentage applied to this specific line.                                          | Row Discount ≥ 15                       |
| **Category**        | The [Product Category](/get-started/pricing-and-packaging/product-categories) of the line item. | Category equals "Professional Services" |
| **Row Total**       | The total value of this line after adjustments.                                                 | Row Total \< 500                        |
| **Final Rate**      | The final per-unit rate on this line.                                                           | Final Rate \< 25                        |
| **Total**           | The line's total value.                                                                         | Total ≥ 100000                          |
| **Recurring Total** | The recurring portion of this line's value.                                                     | Recurring Total \< 1000                 |
| **One-time Total**  | The one-time portion of this line's value.                                                      | One-time Total ≥ 50000                  |
| **Unit of Measure** | The [UOM](/get-started/pricing-and-packaging/units-of-measure) assigned to this product.        | Unit of Measure equals "Per User"       |

### Operators

| Operator                        | Usage                                                          |
| ------------------------------- | -------------------------------------------------------------- |
| **Equals** / **Not Equals**     | Exact match. "Product SKU equals PLATFORM-001."                |
| **Is Greater Than or Equal To** | Numeric threshold. "Row Discount ≥ 15."                        |
| **Is Less Than**                | Numeric upper bound. "Final Rate \< 25."                       |
| **Is In** / **Is None Of**      | Match against a list. "Category is in \[Hardware, Equipment]." |
| **Contains**                    | Partial text match. "Product Name contains Integration."       |

### Combining conditions

Add multiple conditions to target a specific product with a specific constraint. All conditions must be true for the action to fire.

**Example:** A rule that triggers only on the Platform product when its discount exceeds 15%:

* Condition 1: Product SKU equals `PLATFORM-001`
* Condition 2: Row Discount ≥ 15

Without the SKU condition, the discount rule would fire on every line item. Adding the SKU condition scopes it to one product.

***

## Actions

### Message

The message appears directly on the affected line item. Write messages that are specific to the product and the problem, since the rep is looking at the exact row.

**Good examples:**

* "Platform discount exceeds 15%. Requires Sales VP approval."
* "This custom integration requires an engineering scoping call before the quote is sent."
* "Minimum order quantity for this product is 10 units."
* "This product cannot be sold below \$500/unit."

### Severity

| Severity  | What it does                                                                                                                                                        |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Warn**  | Displays a warning icon on the line item. The rep can continue editing but cannot publish until the warning is resolved (through approval or by changing the line). |
| **Error** | Blocks the rep from saving. The line item must be corrected before the quote can be saved.                                                                          |

### Approval routing

Toggle **Requires Approver** and select an [Approval Tier](/get-started/calculator/approvals). When the row rule fires, the deal is routed for approval at the specified tier. The alert on the line item shows which tier needs to sign off.

***

## Examples

### Per-product discount cap

Limit the discount on a high-margin product that reps tend to over-discount.

| Setting        | Value                                                       |
| -------------- | ----------------------------------------------------------- |
| **Name**       | Platform Discount Cap                                       |
| **Kind**       | Row Validation                                              |
| **Scope**      | Row                                                         |
| **Conditions** | Product SKU equals `PLATFORM-001` **AND** Row Discount ≥ 15 |
| **Severity**   | Warn                                                        |
| **Message**    | "Platform discount exceeds 15%. Requires VP approval."      |
| **Approval**   | Tier 2: VP of Sales                                         |

### Price floor

Prevent a product from being sold below cost.

| Setting        | Value                                                                     |
| -------------- | ------------------------------------------------------------------------- |
| **Name**       | Analytics Price Floor                                                     |
| **Kind**       | Row Validation                                                            |
| **Scope**      | Row                                                                       |
| **Conditions** | Product SKU equals `ANALYTICS-001` **AND** Final Rate \< 25               |
| **Severity**   | Error                                                                     |
| **Message**    | "Analytics cannot be sold below \$25/user. This is below the cost floor." |
| **Approval**   | None (Error blocks the deal)                                              |

### Quantity minimum

Enforce a minimum order quantity for a specific product.

| Setting        | Value                                                              |
| -------------- | ------------------------------------------------------------------ |
| **Name**       | Hardware Minimum Order                                             |
| **Kind**       | Row Validation                                                     |
| **Scope**      | Row                                                                |
| **Conditions** | Category equals "Hardware" **AND** Quantity \< 10                  |
| **Severity**   | Error                                                              |
| **Message**    | "Hardware products must be purchased in quantities of 10 or more." |
| **Approval**   | None                                                               |

### Engineering review flag

Flag products that need technical review before the deal is sent to the buyer.

| Setting        | Value                                                                                                                  |
| -------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Name**       | Integration Engineering Review                                                                                         |
| **Kind**       | Row Validation                                                                                                         |
| **Scope**      | Row                                                                                                                    |
| **Conditions** | Product Name contains "Integration"                                                                                    |
| **Severity**   | Warn                                                                                                                   |
| **Message**    | "This integration requires an engineering scoping call. Attach the vetting form to the opportunity before publishing." |
| **Approval**   | Tier 2: Deal Desk                                                                                                      |

### Category-wide discount limit

Apply a discount cap to an entire product category rather than individual SKUs.

| Setting        | Value                                                                    |
| -------------- | ------------------------------------------------------------------------ |
| **Name**       | Services Discount Limit                                                  |
| **Kind**       | Row Validation                                                           |
| **Scope**      | Row                                                                      |
| **Conditions** | Category equals "Professional Services" **AND** Row Discount ≥ 10        |
| **Severity**   | Warn                                                                     |
| **Message**    | "Professional Services discount exceeds 10%. Requires manager approval." |
| **Approval**   | Tier 1: Sales Manager                                                    |

***

## The rep experience

When a Row Validation rule fires on a line item:

1. A **warning or error icon** appears directly on the affected row in the Calculator.
2. Clicking or hovering on the icon displays the custom message.
3. If severity is **Warn**, the rep can continue building the quote but cannot publish until the issue is resolved (either by fixing the line or getting approval).
4. If severity is **Error**, the rep must fix the line item (adjust price, discount, or quantity) before the quote can be saved.
5. If an approval is required, the line-level alert shows which tier needs to sign off.

Because the alert is on the specific row, the rep knows exactly which product needs attention. For quotes with many line items, this is significantly clearer than a deal-level alert that says "something on this quote needs review."

***

## Row Validation vs. Quote Validation

|                    | Row Validation                                             | Quote Validation                                                |
| ------------------ | ---------------------------------------------------------- | --------------------------------------------------------------- |
| **Evaluates**      | Individual line items                                      | The entire Pricing Option                                       |
| **Alert location** | On the specific row                                        | On the option header                                            |
| **Best for**       | Per-product constraints (discount caps, price floors, MOQ) | Deal-level constraints (total discount, TCV, required products) |
| **Scoping**        | Can target specific SKUs, categories, or product names     | Evaluates aggregate metrics across all lines                    |
| **When to use**    | "This product can't be discounted more than 15%"           | "The total deal discount can't exceed 25%"                      |

You can (and should) use both kinds together. Row Validation handles product-specific guardrails. Quote Validation handles deal-level guardrails. They complement each other.

***

## What's next

<CardGroup cols={2}>
  <Card title="Quote Validation Rules" icon="file-circle-check" href="/get-started/rules-and-approval/quote-validation-rules">
    Deal-level rules that evaluate the entire Pricing Option.
  </Card>

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

  <Card title="Formula Rules" icon="function" href="/get-started/rules-and-approval/formula-rules">
    Complex multi-variable logic using the formula engine.
  </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>
