BDS0.1

Price List

A named set of offers for one channel, customer group or period; it groups prices, it holds none.

Reviewed 2026-11-04Markdown

A Price List is a named set of offers for one channel, customer group or period. The prices live on each offer. Its seller and currency are derived from those offers, never stored. A price change is a new list with new dates, not an edit of an old one. BDS type: schema:OfferCatalog.

Fields

Field Storage Meaning
Name* Text Audience and year, as a seller says it
Sales Channel° Single choice Direct, Wholesale, Online, Marketplace; blank means every channel
Valid From° Date First day the list applies
Valid Through° Date Last day; blank means still current
Is Default° Checkbox Sellers start from this list when the client has none
Lifecycle Status* Single choice Draft, Active, Archived
Offers Linked records Offers that link this list; set from the offer
Seller (from Offers) Rollup Distinct sellers of the linked offers
Currency (from Offers) Rollup Distinct currencies of the linked offers
List Check Formula ⚠ fragments for mixed sellers, mixed currencies or no offers
Currency - OLD Single choice Retired 2026-09-23; nothing reads it
Owner - OLD Linked records Retired 2026-09-23; nothing reads it
Created At Created time When the row was created
Created by Created by Who created it
Intake Step Formula Routes Draft or blank-status rows to their next creation step; blank for Active and Archived
Tags° Linked records Tags (mirror); optional

Reference grid captured on 2026-10-28, before the intake views and label updates. Use the current view names in this guide.

Price List grid: seller and currency are derived from the linked offers.

Calculated rules

List Check

IF(FIND(" | ", {Seller (from Offers)} & "") > 0, "⚠ Offers from more than one seller. ", "") &
IF(FIND(" | ", {Currency (from Offers)} & "") > 0, "⚠ Offers in more than one currency. ", "") &
IF(LEN({Offers} & "") = 0, "⚠ No offers on the list. ", "")

The two rollups read Seller* and Price Currency* of every linked offer. Their descriptions say they return distinct values joined with a bar; confirm the aggregation formula in each rollup’s field settings.

One list has many offers. An offer should belong to at most one list, but Price List° on the offer accepts several. Is Default° should be checked on exactly one active list per channel and currency; nothing checks it.

Intake routing

The creation intake uses these local formulas. Active and Archived records leave the routed steps; lifecycle changes remain manual.

Intake Step

IF(OR({Lifecycle Status*} = "Draft", {Lifecycle Status*} = BLANK()), IF(LEN(TRIM({Name*} & "")) = 0, "Create - 1", "Create - 2"), "")

Lifecycle

Create this record through the intake.

Draft while it is being assembled, Active while sellers quote from it, Archived when a newer list replaced it. Set Valid Through° before archiving.

Example

Name* = Direct - 2026; Sales Channel° = Direct; Is Default° checked; Lifecycle Status* = Active; three offers; Seller (from Offers) shows one company; Currency (from Offers) = USD; List Check blank.

Next steps

Manage price lists · All entities