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.
0on 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.
0on rows that carry their own price.
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, filteredBundle = false— each product counted exactly once, at any bundle depth. - Revenue by bundle: the same formula on
Bundle = truerows. - 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
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.
Veles External ID — The Veles quote line ID. All sync writes upsert on
this field; never edit.
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.
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.
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.
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.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.
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
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.
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.
Billing
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.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
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.
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.
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.
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.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.
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.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.
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.
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.
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.
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.
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
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).
Months — How many months this line spans within its phase. Usually
equals the phase’s months; smaller for partial-window lines.

