Skip to main content
A Veles Quote Line is one product charge priced for one phase window — the reporting workhorse of the package. Lines are master-detail children of their Quote (so every quote has one flat, reportable line list) with a lookup to their Phase, plus denormalized phase and billing attributes so filters and rollups work without joins. Dynamic user-defined line fields are exposed as child Quote Line Attribute Values, listed under Attribute Values on the line’s Related tab. Application-owned values remain first-class Quote Line fields.
The denormalization is what makes admin-built rollups point-and-click. A rollup summary field on the Quote of SUM(Net Amount Prorated) WHERE Phase Sequence = 1 AND Billing Type = Recurring gives “first-year recurring revenue” with zero code — and reconciles exactly with Phase 1’s precomputed Recurring Revenue Prorated.
List-price detail lives here (List Unit Price / List Amount Prorated) rather than on quote or proposal headers — sum line amounts to reconstruct list totals at any grain. Deeper pricing internals (system prices, promotion applications) deliberately stay in Veles.

Bundle money: two complementary columns

A bundle prices one product across several rows: the bundle line and its component lines. Only one grain of that money is real at a time — either the bundle’s own price (with component prices derived from it as spread shares), or the components’ prices (with the bundle’s price derived as their sum). If every row carried its Veles-displayed price in one amount column, summing lines would count every bundle twice. So each line’s engine price lands in exactly one of two complementary columns:
  • Net Amount — transacted money: the row’s own pricing-waterfall output. 0 on rows whose price is derived from other rows.
  • Allocated Amount — derived money: what the pricing mode allocated onto the row, spread-down or sum-up. 0 on rows that carry their own price.
At most one of the two is non-zero on any row, so Net Amount + Allocated Amount = the row’s whole-order value — and an unfiltered SUM(Net Amount) totals the quote correctly, always, with no bundle filter. It is also the price Veles shows on every row but one kind: a component of a bundle sold more than once, which Veles shows at one bundle’s worth (see below). Which rows carry which column depends on the bundle’s pricing mode: Rows whose money sits in Allocated Amount zero their whole waterfall — unit prices and the List pair follow Net Amount’s rule, and the Discount pair is blank, since no waterfall ran — so Quantity x Net Unit Price = Net Amount holds on every row. Standalone lines always carry Net Amount. Usage lines sync real unit prices but null amounts — there are no actuals at quote time. 0 means “this money is in the row’s other column, or on another row”; null means “this number does not exist yet.” Both are safe to sum. A worked example — one 12-month phase, no proration. Suite Pro is parent-priced at 30,000 with component spreads of 60% and 25% (deliberately not totaling 100); Support Bundle is priced as the sum of its parts: Unfiltered SUM(Net Amount) = 65,000 — the quote total, exactly. Had every row carried its displayed price instead, the Support Bundle’s money would appear both on its own row (15,000) and on its components’ rows (6,000 + 9,000): every sum-of-parts bundle counted exactly twice. The Suite Pro spreads illustrate honest under-attribution: 60% + 25% leaves 4,500 of the parent’s price allocated to no component, because Veles never allocated it.

A bundle sold more than once

The bundle is the pricing unit. When a bundle line has a quantity above 1, under either pricing mode, each component row in Veles shows what one bundle holds, and the bundle line multiplies by the number of bundles sold. Allocated Amount stays the component’s share of the whole bundle line, every bundle included, and Net Amount on a sum-of-parts component is its price across every bundle, so the recipes below need no change. With Suite Pro above sold at quantity 10: Quantity is the units the row’s money is priced over across the whole order: the line’s own quantity times the bundles it rides in (a usage line’s is its own quantity). So Quantity x Net Unit Price is the row’s Net Amount on every row; on a row whose money is Allocated the net prices are zero and Allocated Amount holds the whole-order value. The amount Veles shows per bundle is the row’s Net + Allocated divided by the quantities of the bundle lines above it (follow Parent Line). The report recipes that follow:
  • Quote totals: sum Net Amount (run-rate) or Net Amount Prorated (window actuals). No filter needed.
  • Revenue by product: the row formula Net Amount + Allocated Amount, filtered Bundle = false — each product counted exactly once, at any bundle depth.
  • Revenue by bundle: the same formula on Bundle = true rows.
  • Never sum Allocated Amount by itself — a bundle’s Allocated restates the value of its contents; it is a per-row complement, not a total.

Fields at a glance

Field details

Identity and structure

Text (standard name field)
Line Name — The line’s name as Veles shows it (the rep’s rename, else the product name recorded on the line), cut at 80 characters. Product Name carries it uncut.
Text(255), unique, external ID
Veles External ID — The Veles quote line ID. All sync writes upsert on this field; never edit.
Master-Detail(Veles Quote)
Quote — The Veles quote this line belongs to. All of a quote’s lines across every phase, as one flat list — filter by Phase Sequence or Billing Type to slice it.
Lookup(Veles Quote Phase)
Phase — The quote phase (time window) this line is priced in. Lookup rather than master-detail — the line’s owning parent is the quote; use the denormalized Phase Sequence field for rollup filters.
Number(3, 0)
Phase Sequence — The 1-based sequence of the phase this line is priced in, denormalized so rollup-summary filters and report filters work without joins.
Checkbox
Bundle — Whether this line is a bundle: a product whose component lines carry its detail; its components name it as their Parent Line. Set from the line’s Veles configuration, whatever the bundle’s pricing mode. Product-grain reports filter Bundle = false and total Net Amount + Allocated Amount — see Bundle money.
Lookup(Veles Quote Line)
Parent Line — The line this line sits under: for a bundle component, the bundle’s own line. Empty for standalone lines and for the top line of a bundle. How bundle money lands across the parent and component rows is covered in Bundle money.
Number(8, 2)
Position — The line’s display order within its phase, as authored in Veles. Sort by Phase Sequence, then Position to reproduce the quote’s visual order.

Product

Lookup(Product2)
Product — The Salesforce Product2 record matching this line’s Veles product, when the mapping is known. Enables native “revenue by product family” report joins. May be empty — Product Name and SKU are always populated as text so reports never break on a missing lookup.
Text(255)
Product Name — The line’s name as Veles shows it (the rep’s rename, else the product name recorded on the line), stored as text so line reports always have a label even when the Product lookup is empty. The same text as Name, which Salesforce cuts at 80 characters.
Text(255)
Product SKU — The product SKU recorded on the line in Veles, denormalized as text.

Billing

Picklist
Billing Type — How this line’s charge behaves: Recurring (repeats every billing period), One-Time (billed once), or Usage (transactional/consumption-based, billed on actuals). Set per line by Veles at publish time. Unrestricted so new Veles billing types never break the sync.
Picklist
Billing Frequency — How often this line is billed: Monthly, Quarterly, Semi-Annual, or Annual. Lines within the same quote can bill on different frequencies.

Quantity and pricing

Number(16, 2)
Quantity — The units this line’s rate is priced over across the whole order: the line’s own quantity times the bundles it rides in, so Net Unit Price x Quantity is the row’s Net Amount. On a row whose money is Allocated the net prices are zero and its value is in Allocated Amount instead. A usage line’s is its own quantity. Fractional quantities are possible.
Currency(16, 2)
List Unit Price — The per-unit list price before any adjustments or discounts. This is the annualized/full-term rate, never prorated — the window math lives in the prorated amounts. Zero on a row whose money is Allocated.
Currency(16, 2)
Net Unit Price — The per-unit price after all discounts and promotions. This is the annualized/full-term rate, never prorated. Zero on a row whose money is Allocated.
Currency(16, 2)
Net Amount — The line’s extended net amount, annualized/full-term (the run-rate lens, before proration). Recurring lines’ Net Amounts sum to the phase’s ARR. Base-name-annualized convention: the _Prorated variant carries the window actual. Carries transacted money only: 0 on bundle rows whose price is derived from other rows, where Allocated Amount holds the value — which is what makes the unfiltered sum correct.
Currency(16, 2)
List Amount — The line’s extended list amount, annualized/full-term (the run-rate lens, before proration and before any adjustments or discounts). Zero on a row whose money is Allocated.
Currency(16, 2)
Net Amount Prorated — Extended net total for this line in its actual window (prorated), after all discounts and promotions. Recurring lines sum to the phase’s Recurring Revenue Prorated; one-time lines sum to its One-Time Revenue; together they make the Phase Contract Value and the quote’s TCV. May be less than Net Unit Price x Quantity — unit prices are full-term rates. Like Net Amount, 0 on bundle rows whose price is derived from other rows.
Currency(16, 2)
List Amount Prorated — Extended list total for this line in its actual window (prorated), before any adjustments or discounts — the same prorated lens as Net Amount Prorated. Sum to reconstruct list-price totals at any grain. Zero on a row whose money is Allocated.
Currency(16, 2)
Allocated Amount — The value the pricing mode allocated onto this row, annualized/full-term: a component’s spread share of a parent-priced bundle’s whole line (every bundle sold), or the components’ total rolled up onto a sum-of-parts bundle line. The engine’s attribution, not an ASC 606 fair-value allocation. At most one of Net Amount and Allocated Amount is non-zero on any row — add them for the row’s whole-order value. Veles shows a component of a bundle sold more than once at one bundle’s worth (see A bundle sold more than once). Never sum this column: a bundle’s Allocated restates the value of its contents; to total a quote, sum Net Amount. See Bundle money.
Currency(16, 2)
Allocated Amount Prorated — The window-actual companion to Allocated Amount, on the same prorated lens as Net Amount Prorated. At most one of Net Amount Prorated and Allocated Amount Prorated is non-zero on any row — add them for the row’s whole-order prorated value. Never sum this column; to total a quote, sum Net Amount Prorated.
Percent(7, 4)
Proration Factor — How much of the line’s annualized amount applies to its actual window (day-based), computed by the Veles pricing engine and synced. 100% means no proration. Net Amount x Proration Factor = Net Amount Prorated.
Percent(5, 2)
Discount % — The rep’s discount on this line, off its system price (the list price after Veles’s automatic adjustments (rules, promotions, uplift), before the rep’s discount), computed by the Veles pricing engine and synced (matches the Veles UI and quote documents exactly). Proration-invariant: the same at both the annualized and prorated lens. 0% means the line carries no discount. Empty on rows whose money is Allocated.
Currency(16, 2)
Discount Amount — The rep’s discount on this line, annualized (the full-term lens, before proration): the line’s system amount minus its Net Amount. The system price is the list price after Veles’s automatic adjustments (rules, promotions, uplift), before the rep’s discount, so this is not List Amount minus Net Amount. Line values sum to the phase’s Discount Amount. Empty on usage lines and on rows whose money is Allocated.

Term window

Date
Start Date — The first day of the line’s own effective window, when it has one. Lines can cover a sub-window of their phase (e.g. a mid-phase add).
Date
End Date — The last day of the line’s own effective window, when it has one.
Number(4, 0)
Months — How many months this line spans within its phase. Usually equals the phase’s months; smaller for partial-window lines.

Sync health

DateTime
Synced At — When the Veles sync last wrote this record. Quotes, with their phases and lines, update each time the proposal is pushed from Veles, not on every draft edit. If this looks stale relative to activity in Veles, check the integration status in Veles admin.