---
id: CAP-COM-ORD-005
title: Create one order at the reviewed price
feature: FEAT-COM-ORD-02
product_area: commerce
module: orders
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - CAP-COM-CHK-012
  - CAP-COM-PRC-008
  - CAP-COM-PRC-009
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#A4'
  - 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#A17'
  - 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#9. Acceptance scenarios'
  - 'services-commerce:docs/milestones/plans/COMM-M1-plan.md#A3'
  - >-
    services-commerce:docs/milestones/COMM-M2-take-a-staff-order.md#Product purchase eligibility enforced
    (Platform PLAT-M11 D6; Andrew approved 2026-10-21)
purpose: The buyer’s reviewed purchase becomes an identifiable sale that can be billed and fulfilled.
outcomes:
  - Repeated placement requests create a single order.
  - A changed reviewed price requires renewed confirmation before placement.
concepts:
  - CON-COM-ORD-001
  - CON-COM-ORD-002
  - CON-COM-ORD-003
actors:
  - ACT-COM-014
  - ACT-COM-017
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: commerce.orders.create
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-COM-ORD-005-01
    proved_by: [ATS-COM-ORD-001-20, ATS-COM-ORD-005-01, ATS-COM-ORD-005-18, ATS-COM-ORD-005-19, ATS-COM-ORD-006-16, ATS-COM-ORD-015-15, TST-COM-ORD-030, TST-COM-ORD-035]
    statement: >-
      A placement needs a request key, returns the existing order on a same-key retry and refuses a different
      key for an already placed cart.
    kind: invariant
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers the same order to a retry
      under the same key, replayed from the idempotency ledger, writing nothing (08 row 9; D11)
    origin: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#9. Acceptance scenarios'
  - id: BR-CAP-COM-ORD-005-02
    proved_by: [ATS-COM-ORD-005-02, ATS-COM-ORD-005-14, TST-COM-ORD-030, TST-COM-ORD-035, TST-COM-ORD-103]
    statement: >-
      Concurrent placement requests for one cart create one order, with competing calls receiving that order
      or an in-progress response.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#one places the order; the other is
      told the request is in progress (409) or answered the one order; exactly one order row exists
    origin: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#9. Acceptance scenarios'
  - id: BR-CAP-COM-ORD-005-03
    proved_by: [ATS-COM-ORD-003-13, ATS-COM-ORD-005-03, TST-COM-ORD-035, TST-COM-ORD-139]
    statement: >-
      Placement recalculates the price and refuses differences from the saved preview in item price, quantity,
      total or audiences and order discount or fee; an unpreviewed cart uses the current price.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#refuses PRICE_CHANGED with both
      prices when the price rose since a preview of a moment ago, the checkout left open
    origin: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#A4'
    examples:
      positive: A price change from twenty-five to twenty-seven dollars requires a new preview before placement.
      negative: An unchanged reviewed price proceeds without another confirmation.
  - id: BR-CAP-COM-ORD-005-04
    proved_by: [ATS-COM-ORD-005-04, TST-COM-ORD-031]
    statement: >-
      Losing membership qualification after preview prevents silent placement at a changed audience price and
      leaves previously placed orders intact.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/member-pricing-placement.e2e.spec.js#refuses the placement
      409 placement_refused with audience_lapsed and the decision’s sentence, never repricing silently
    origin: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#A4'
  - id: BR-CAP-COM-ORD-005-05
    proved_by: [ATS-COM-ORD-001-17, ATS-COM-ORD-005-05, TST-COM-ORD-035]
    statement: >-
      An application preparation refusal or unavailable item stops placement before any order is created,
      preserving an open cart with unfrozen items and a recorded explanation.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers 409 placement_refused with
      the participant’s problem naming the item
    origin: none
  - id: BR-CAP-COM-ORD-005-06
    proved_by: [ATS-COM-ORD-005-06, ATS-COM-ORD-012-14, TST-COM-ORD-029]
    statement: >-
      Placement commits resource claims together, converts holds and rolls back competing claims on conflict,
      so only one buyer obtains the final available unit.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#lets exactly one placement win
      and refuses the other 409 claim_conflict naming the item and the resource
    origin: none
  - id: BR-CAP-COM-ORD-005-07
    proved_by: [ATS-COM-ORD-005-07, TST-COM-ORD-036, TST-COM-ORD-052]
    statement: >-
      Within placement, products with purchasing rules are evaluated again and any result other than eligible
      prevents the order, identifying the products and reasons.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#refuses the
      placement 409 product_not_eligible naming the product (id and name) and the reason
    origin: >-
      services-commerce:docs/milestones/COMM-M2-take-a-staff-order.md#Product purchase eligibility enforced
      (Platform PLAT-M11 D6; Andrew approved 2026-10-21)
  - id: BR-CAP-COM-ORD-005-08
    proved_by: [ATS-COM-ORD-004-12, ATS-COM-ORD-005-08, ATS-COM-ORD-005-16, TST-COM-ORD-037]
    statement: >-
      Placement rechecks applied promotions before redemption and rolls back the sale on refusal, returning
      the recalculated figures without the refused promotion.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/promotion-eligibility.e2e.spec.js#refuses the placement 409
      promotion_refused, purchaser_not_eligible
    origin: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#D10'
  - id: BR-CAP-COM-ORD-005-09
    proved_by: [ATS-COM-ORD-002-11, ATS-COM-ORD-005-09, ATS-COM-ORD-005-15, ATS-COM-ORD-005-17, TST-COM-ORD-035]
    statement: >-
      The new order receives a workspace number, starts placed with billing pending and a default
      thirty-minute pay-now window, uses one pricing instant and preserves the bill-to address available at
      sale.
    kind: lifecycle
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers 200 with the order: numbered
      10000, placed, pending billing, pay now with a thirty-minute tender window, created
    origin: 'services-commerce:docs/milestones/plans/COMM-M1-plan.md#A3'
  - id: BR-CAP-COM-ORD-005-10
    proved_by: [ATS-COM-ORD-005-10, TST-COM-ORD-035]
    statement: >-
      Cart items become order lines with attested purchase details, plans and claims; bundle relationships
      carry across and delivery units receive pending obligations with frozen conditions.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#writes one line per item with its
      frozen purchase: the canonical payload, the stub’s attestation, the plan, no claim
    origin: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#A3'
  - id: BR-CAP-COM-ORD-005-11
    proved_by: [ATS-COM-ORD-005-11, TST-COM-ORD-163]
    statement: >-
      A shipping charge without a configured shipping product prevents placement, although the preview
      currently omits that configuration problem.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/shipping/tests/e2e/shipping.e2e.spec.js#refuses the placement 409
      placement_refused with the problem shipping_product_required, naming the profile
    origin: none
    note: >-
      Fulfilment owns shipping. Placement rejects the missing shipping product, while preview lacks the
      blocker described in finding 016.
  - id: BR-CAP-COM-ORD-005-12
    proved_by: [ATS-COM-ORD-005-12, ATS-COM-ORD-011-08, TST-COM-ORD-025]
    statement: >-
      Authority to edit a cart does not grant authority to place it; placement separately requires the
      order-placing permission.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-security.e2e.spec.js#a clerk without
      commerce.orders.create changes a checkout but is refused the placement
    origin: none
  - id: BR-CAP-COM-ORD-005-13
    proved_by: [ATS-COM-ORD-005-13, TST-COM-ORD-029]
    statement: >-
      The minute sweep retries a lease confirmation left unfinished at placement and records the completed
      confirmation on the order.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#confirms it on the sweep: the
      ledger committed, the participant’s claim committed, claim_confirmed on the order
    origin: none
scenarios:
  - id: SC-CAP-COM-ORD-005-01
    given: The shirt price increases after the clerk reads a preview.
    when: The clerk attempts placement and reviews the replacement summary.
    then: 'Placement first requests confirmation of the changed price, then succeeds after review.'
    provenance: unknown
    source: FND-COM-ORD-032
edge_cases:
  - id: SC-CAP-COM-ORD-005-02
    given: The placement tax quote is refused by Accounting.
    when: Submit the cart for placement.
    then: 'No order is created and the response uses a 400 placement refusal, unlike the other 409 placement cases.'
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/accounting-tax.e2e.spec.js#is a tax_quote_refused problem
      on the preview and refuses the placement, placing nothing
constraints: []
depends_on:
  - CAP-COM-ORD-003
  - CAP-COM-ORD-012
related:
  - CAP-COM-ORD-002
  - CAP-COM-ORD-004
  - CAP-COM-ORD-006
  - CAP-COM-ORD-007
journeys:
  - JNY-COM-ORD-001
  - JNY-COM-ORD-002
open_questions: []
evidence:
  - >-
    Examined reference: services-commerce:docs/milestones/COMM-M2-take-a-staff-order.md#Product purchase
    eligibility enforced (Platform PLAT-M11 D6; Andrew approved 2026-10-21)
  - 'Examined reference: services-commerce:docs/milestones/plans/COMM-M1-plan.md#A3'
  - 'Examined reference: services-commerce:docs/milestones/plans/COMM-M2-plan.md#9. Acceptance scenarios'
  - 'Examined reference: services-commerce:docs/milestones/plans/COMM-M2-plan.md#A17'
  - 'Examined reference: services-commerce:docs/milestones/plans/COMM-M2-plan.md#A3'
  - 'Examined reference: services-commerce:docs/milestones/plans/COMM-M2-plan.md#A4'
  - 'Examined reference: services-commerce:docs/milestones/plans/COMM-M2-plan.md#D10'
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/accounting-tax.e2e.spec.js#is a
    tax_quote_refused problem on the preview and refuses the placement, placing nothing
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkout-security.e2e.spec.js#a clerk
    without commerce.orders.create changes a checkout but is refused the placement
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#confirms it
    on the sweep: the ledger committed, the participant’s claim committed, claim_confirmed on the order
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#lets exactly
    one placement win and refuses the other 409 claim_conflict naming the item and the resource
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/member-pricing-placement.e2e.spec.js#refuses the placement
    409 placement_refused with audience_lapsed and the decision’s sentence, never repricing silently
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers 200 with
    the order: numbered 10000, placed, pending billing, pay now with a thirty-minute tender window, created
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers 409
    placement_refused with the participant’s problem naming the item
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#answers the same
    order to a retry under the same key, replayed from the idempotency ledger, writing nothing (08 row 9; D11)
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#one places the
    order; the other is told the request is in progress (409) or answered the one order; exactly one order row
    exists
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#refuses
    PRICE_CHANGED with both prices when the price rose since a preview of a moment ago, the checkout left open
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#writes one line per
    item with its frozen purchase: the canonical payload, the stub’s attestation, the plan, no claim
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#refuses the
    placement 409 product_not_eligible naming the product (id and name) and the reason
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/promotion-eligibility.e2e.spec.js#refuses
    the placement 409 promotion_refused, purchaser_not_eligible
  - >-
    Examined reference: services-commerce:modules/shipping/tests/e2e/shipping.e2e.spec.js#refuses the
    placement 409 placement_refused with the problem shipping_product_required, naming the profile
controls: [TC-IAM-006, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-CRY-001, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-004, TC-LOG-005, TC-AVL-004, TC-MON-001, TC-MON-002, TC-MON-004, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002]
exercised_by: [FAS-COM-ORD-02-01, FAS-COM-ORD-02-03, FAS-COM-ORD-02-04, FAS-COM-ORD-04-01, FAS-COM-ORD-04-03, FAS-COM-ORD-04-05, FAS-COM-ORD-06-03]
suites: [TST-COM-ORD-025, TST-COM-ORD-029, TST-COM-ORD-030, TST-COM-ORD-031, TST-COM-ORD-035, TST-COM-ORD-036, TST-COM-ORD-037, TST-COM-ORD-052, TST-COM-ORD-103, TST-COM-ORD-139, TST-COM-ORD-163]
---

# Create one order at the reviewed price

## Purpose

The buyer’s reviewed purchase becomes an identifiable sale that can be billed and fulfilled. Retry handling lets staff complete placement without creating duplicates.

## How It Works

The clerk submits the reviewed cart with a placement request key. Commerce reassesses its price and asks applications to prepare the purchases. A changed result or failed preparation keeps the clerk working with the cart. Resource claims and the written order share the placement transaction. On success the clerk receives the order number and can continue to billing or payment. Repeating a completed request returns its result rather than another sale.

## Relationships

Cart review supplies the buyer’s price reference; selling applications prepare and claim the purchase; billing and delivery continue the created sale.
