---
id: ADR-COM-CAT-006
title: Shared Price Calculation and Placement Recalculation
product_area: commerce
module: catalog
revision: 1
status: proposed
design_intent: confirmed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Quote, preview and placement share deterministic pricing, and placement always recalculates the amount it
  binds.
constrains:
  - DOM-COM-CAT-004
  - SVC-COM-CAT-pricing
  - WF-COM-CAT-009
  - WF-COM-CAT-010
origin: 'COMM-M1 D5 (price calculation order) and plan A13 (order domain D13: always recompute)'
alternatives:
  - option: Guarantee the previous preview within a tolerance
    why_not: The recorded product direction binds the recalculated placement amount rather than a retained preview.
  - option: Maintain separate display and sale engines
    why_not: Independent calculation paths would require ongoing parity work.
consequences:
  - Placement can return a changed amount with an explanation of the new calculation.
  - Callers load inputs; the pure engine does not fetch data itself.
supersedes: []
evidence:
  - >-
    services-commerce at c8b66a98: modules/pricing/services/engine/engine.ts; services/quotes/price-quotes.ts;
    services/checkout-pricing/price-checkout-with-engine.ts.
  - >-
    services-commerce at c8b66a98: docs/milestones/COMM-M1-set-up-what-you-sell.md (Decisions);
    docs/milestones/plans/COMM-M1-plan.md.
---

# Shared Price Calculation and Placement Recalculation

## Context

Amounts appear on several surfaces before a sale is placed. Shared calculation avoids maintaining a separate display interpretation.

## Decision

Quote, preview and placement share deterministic pricing, and placement always recalculates the amount it binds.

## Alternatives Considered

Guarantee the previous preview within a tolerance. The recorded product direction binds the recalculated placement amount rather than a retained preview.

Maintain separate display and sale engines. Independent calculation paths would require ongoing parity work.

## Consequences

Placement can return a changed amount with an explanation of the new calculation. Callers load inputs; the pure engine does not fetch data itself.
