Quote Templates

Build reusable quote templates with predefined sections, default line items, markup rules, and dynamic formulas. Generate complex quotes in seconds, not hours.

Note

For a high-level comparison of how templates and data schemas differ, see the Templates vs. Data Dictionaries overview.

Quickstart

Navigate to Settings > Quote Templates to build a library of standardized pricing models. Click the Add (plus) icon to quickly create a new template. You can also save any active quote as a template directly from the quote editor.

In-Depth

Quote Templates encode your organization’s pricing logic, ensuring complex quotes are generated in seconds.

Anatomy of a template

A quote template captures:

  • Name: The title used to identify the pricing model.
  • Description: A brief summary of the template’s intended use case.
  • Sections: Logical groupings of work (e.g., “Phase 1: Discovery”). Must either contain items directly or have at least two subgroups.
  • Line Items: Default roles or materials. Includes a mandatory Type (Resource or Material). Mark specific items as Optional to exclude them from overall totals.
  • Repeat Contexts: Sections and items can include a “Repeat” value pointing to a list variable. Generated instances inherit properties, allowing child items to reference sub-field variables directly.
  • Pricing Logic: Default costs, markup percentages, and discounts.
  • Dynamic Formulas: Expressions that evaluate against engagement data to automatically calculate pricing.

AI Template Generation

Automatically build or modify your quote templates using AI.

  1. Open the Quote Template editor and expand the Template Details.
  2. Upload an Example Document Link (PDF, DOCX, XLSX).
  3. Click the AI generate button (sparkle icon).
  4. Enter instructions and optionally select Start Fresh.
  5. Click Continue. A progress dialog shows real-time steps as the AI generates the template.

Dynamic Formulas

Servantium includes a robust evaluation engine for item formulas. Beyond standard math (+, -, *, /), you can use specialized functions:

  • Standard Operations: Use len(), max(), min(), int(), float(), str(), bool(), sum(), sum_ints(), round(), abs(), divmod(), and pow().
  • Data Structures: Use any(), all(), list(), dict(), set(), sorted(), and range(). Use aliases true, false, null, True, False, None.
  • Tiered Pricing: Use tier(value, thresholds, results). Business field names like tier are now safely recognized as variables without conflicting with the built-in function.
  • Product Lookups: Use product(external_id).
  • Bitmasks: Use get_bitmask(product_id).
  • Label Resolution: Use label(field) to translate a chip/tag key to its display label (e.g., label(service_tier)). The formula engine is schema-aware and automatically pulls options from your linked engagement template. Or use auto-generated <field>_label variables (e.g., service_tier_label).
  • String Literals: Text wrapped in single or double quotes (e.g., status == 'Active') is evaluated strictly as a string constant and will not trigger false variable dependency errors.
  • Repeat Context Variables: Use _item (current list value), _item_label (display label), and _index (position). Child items inherit sub-field variables automatically.
  • Dynamic Text & Financials: Calculate name, cost, markup, or discount with formulas prefixed by =. String methods (.title(), .upper()) and concatenation are supported. Failures safely fall back to 0.0 or raw strings.
Tip

The system validates formulas for proper Python syntax before execution.

The Hydration Process

When applied to a quote:

  1. The system pulls the latest rates from your Service Catalog.
  2. It evaluates all dynamic formulas against the engagement’s data.
  3. It populates the quote with the resulting structure.

Need more help?

Our support team is available to assist you.

Contact Support