---
id: CON-ACC-PRD-002
name: Price
feature: FEAT-ACC-PRD-02
product_area: accounting
module: products
revision: 3
status: draft
product_intent: proposed
implementation_evidence: observed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
definition: >-
  A price is a product-grid choice for an audience, currency and period, expressed as money, a percentage,
  conversion or prohibition.
owned_by: MOD-ACC-PRD
synonyms:
  - Pricing grid
  - Audience offer
not_to_be_confused_with:
  - A frozen transaction amount
  - An audience qualification definition
  - A quantity reduction
facets:
  - name: Audience
    meaning: >-
      A grid row targets standard, member or a recognized Commerce audience, including migrated product-local
      audiences.
    used_for: Offering differentiated prices without embedding qualification rules.
  - name: Pricing period
    meaning: A named Commerce period or the always period distinguishes the offer’s pricing context.
    used_for: Configuring period-specific offers and their backing rows.
  - name: Currency and mode
    meaning: 'Eligible currencies combine with amount, percentage, conversion or prohibition choices.'
    used_for: Expressing supported monetary offers consistently.
  - name: Effective window
    meaning: Optional instant boundaries limit row applicability with an inclusive opening and exclusive closing.
    used_for: Scheduling changes without overlapping a cell’s validity.
  - name: Special-price hand-over
    meaning: A migration record retains audience realization information for a former special price.
    used_for: Preserving criteria and pricing while Commerce completes audience setup.
relationships:
  - to: CON-ACC-PRD-001
    statement: The product owns the grid and supplies its unit and currencies.
    provenance: observed
    source: 'services-accounting:modules/products/db/product-prices.table.ts'
  - to: CON-ACC-PRD-001
    statement: Bundle allocation validation uses a set base-currency list price outside named periods.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/unit/rules/product-rules.spec.js#weighs bundles and splits
      against the always set price of the audience, never a period or a percentage cell
  - to: CON-ACC-PRD-004
    statement: The setup uses a standard base price to limit fixed revenue allocations.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/product-accounting-setups.integration.spec.js#refuses
      fixed amounts adding up to more than the standard base price
acted_on_by:
  - CAP-ACC-PRD-008
  - CAP-ACC-PRD-009
visible_to:
  - ACT-ACC-006
  - ACT-ACC-007
  - ACT-ACC-011
evidence:
  - 'react-console:components/accounting-config/products/product-prices-section.tsx'
  - 'react-console:lib/accounting-config/product-form.ts'
  - 'services-accounting:docs/accounting/products.md'
  - 'services-accounting:docs/migrations/accounting-modernization/products-a12-a13/README.md'
  - 'services-accounting:docs/milestones/plans/ACCT-M1-plan.md'
  - 'services-accounting:modules/products/db/pricing-audience-handovers.table.ts'
  - 'services-accounting:modules/products/db/product-prices.table.ts'
  - 'services-accounting:modules/products/services/persistence/pricing-audiences.ts'
  - 'services-accounting:modules/products/services/rules/product-rules.ts'
  - >-
    services-accounting:modules/products/tests/integration/services/persistence/product-accounting-setups.integration.spec.js
  - 'services-accounting:modules/products/tests/unit/rules/product-rules.spec.js'
supersedes:
  - react-console acceptance inventory CAP-ACC-PRD-007
  - react-console acceptance inventory CAP-ACC-PRD-008
---

# Price

## What It Is

A price is a configured choice within a product’s pricing grid. It describes what an audience pays in a currency for a pricing period, optionally limited by opening and closing instants. Staff can enter an amount directly, express a share of the standard price, select conversion from a base-currency price or prohibit purchase in a foreign currency. These choices let finance describe how the same product is offered in several contexts.

The grid belongs to the product. It retains ordered rows rather than just one standard amount and one member amount. Standard and member are built-in audiences, and Commerce can provide additional active audiences. Named periods distinguish offers such as early and regular pricing; the always period supplies a choice outside a named period.

Configured prices use whole minor units for amounts. Staff see familiar currency amounts in the editor, while the stored value keeps the currency’s precision. A donation has a different model: the giver supplies the amount and its product carries no price rows.

## What It Is Not

A configured price is not the amount already charged on a transaction. The grid is also separate from the audience definition that decides whether a purchaser qualifies. Commerce owns that qualification and the selection of applicable pricing at purchase.

Quantity discounts are product settings that reduce a chosen price according to quantity. Revenue splits allocate financial value after sale. Neither replaces the grid’s audience and currency coordinates, and a stored conversion choice does not perform conversion inside the Products module.

## How It Is Used

Finance begins a fixed-priced product with its standard base-currency amount. It can then add member or other audience prices, period choices and supported foreign currencies. A percentage needs a suitable standard amount; a conversion needs its own audience’s base-currency backing. Invalid or overlapping choices reject the save before the grid replaces stored rows.

Readers inspect prices alongside the product. Staff should distinguish an omitted cell from a prohibition: omitted foreign-currency pricing can defer to the unit default. A console correction also needs care around dated rows, because the editor’s current-date handling differs from backend instant boundaries.

## Its Facets

**Audience.** Standard supplies the common offer, member supplies a member offer, and active Commerce audiences extend the vocabulary. Existing migrated audiences have an admission edge when Commerce’s table appears.

**Period.** A row can name a period or use always. Validation accepts backing from the matching period or always, but never another named period. Accounting checks the period’s form without checking its existence in a Commerce schedule.

**Currency and mode.** The unit determines eligible currencies and whether multicurrency is enabled. Each mode has its own value requirements. Base currency cannot use conversion or prohibition.

**Effective window.** Opening instants are included and closing instants excluded in backend overlap checks. Rows sharing an audience, currency and period must not compete at the same instant.

**Migration handover.** Former special prices retain a product-local audience row and information Commerce needs to realize it. Criteria, amount, formula and rank remain available for that transfer, without establishing that a purchaser qualifies yet.

## How It Relates

The product supplies the owning identity and business unit. Books supplies currencies and conversion defaults. Commerce supplies audiences, periods and purchase-time evaluation. Component allocations and fixed revenue shares use particular set base-currency rows as their limit; that validation lookup is distinct from purchase-time selection.

## What It Could Become

The product should make the console and service agree on time boundaries and required standard-price backing. Product also needs a transition contract for unrealized migrated audiences so routine corrections do not become stranded. Period validation and retirement of the old audience alias are further choices to settle before integrations assume a single enduring grid contract.
