---
id: ATS-COM-ORD-003
scope: CAP-COM-ORD-003
product_area: commerce
module: orders
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-COM-ORD-003-01
    title: Preview retains the calculated result
    level: api
    proves:
      - BR-CAP-COM-ORD-003-01
    preconditions: Fixture application items have Standard prices in USD.
    steps:
      - do: Request the cart preview and inspect its stored state.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#answers 200 with every item
          advised by the stub and priced from its standard USD row, and no problem
    expected: 'Item advice, prices and totals appear with the saved snapshot and preview event.'
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#answers 200 with every item advised
        by the stub and priced from its standard USD row, and no problem
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on the
        checkout, with the totals, and leaves a previewed event
      - TST-COM-ORD-027
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#answers 200 with every item advised
      by the stub and priced from its standard USD row, and no problem
    category: rule
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#answers 200 with every item advised
      by the stub and priced from its standard USD row, and no problem
  - id: ATS-COM-ORD-003-02
    title: Item problems remain visible in a returned preview
    level: api
    proves:
      - BR-CAP-COM-ORD-003-02
    preconditions: One application refuses an item and other fixtures lack or prohibit a currency price.
    steps:
      - do: Preview the affected carts.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#shows a participant’s refusal
          inline on the item rather than refusing the preview
    expected: The response contains the relevant item problems without permitting placement.
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#shows a participant’s refusal
        inline on the item rather than refusing the preview
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#reports an item without a price in
        the currency, and one whose price row prohibits it
      - TST-COM-ORD-027
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#shows a participant’s refusal inline
      on the item rather than refusing the preview
    category: validation
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#shows a participant’s refusal inline
      on the item rather than refusing the preview
  - id: ATS-COM-ORD-003-03
    title: Unavailable advice allows the same cart to recover
    level: api
    proves:
      - BR-CAP-COM-ORD-003-03
    preconditions: The selected application is unavailable for the first calls.
    steps:
      - do: 'Attempt preview and placement, restore application responses and retry preview.'
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview
          503 participant_unavailable, retryable
    expected: 'Unavailable responses leave an open cart with no order, and the recovered preview succeeds.'
    negative: true
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview
        503 participant_unavailable, retryable
      - >-
        services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#leaves the checkout
        open, nothing placed
      - >-
        services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#previews the same
        checkout once the participant answers again
      - TST-COM-ORD-034
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview 503
      participant_unavailable, retryable
    category: failure
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview 503
      participant_unavailable, retryable
  - id: ATS-COM-ORD-003-04
    title: Product eligibility identifies only the blocked item
    level: api
    proves:
      - BR-CAP-COM-ORD-003-04
    preconditions: >-
      A restricted product is tested with eligible, ineligible and indeterminate subjects alongside an unbound
      product.
    steps:
      - do: Request the preview for each subject.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with
          no problem
    expected: Only blocked bound items report product_not_eligible and an unbound product requires no evaluation.
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with no
        problem
      - >-
        services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with a
        product_not_eligible problem on the bound line alone, naming it and the engine's sentence
      - >-
        services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews the
        line as a product_not_eligible problem
      - >-
        services-commerce:modules/checkout/tests/unit/checkout/checkout-purchase-eligibility.spec.js#costs no
        evaluation for a product with no binding
      - TST-COM-ORD-036
      - TST-COM-ORD-052
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with no
      problem
    category: validation
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with no
      problem
  - id: ATS-COM-ORD-003-05
    title: A missing tax address prevents the taxable purchase
    level: api
    proves:
      - BR-CAP-COM-ORD-003-05
    preconditions: A buyer lacks a preferred address while the fixture zone can tax the product.
    steps:
      - do: Request preview and then placement.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#refuses a buyer with no
          preferred address while a zone could tax the line: a no_tax_address problem on the preview, a 409 on
          the placement
    expected: 'The item has no_tax_address, placement returns 409 and no order is found.'
    negative: true
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#refuses a buyer with no
        preferred address while a zone could tax the line: a no_tax_address problem on the preview, a 409 on
        the placement
      - TST-COM-ORD-026
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#refuses a buyer with no preferred
      address while a zone could tax the line: a no_tax_address problem on the preview, a 409 on the placement
    category: validation
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#refuses a buyer with no preferred
      address while a zone could tax the line: a no_tax_address problem on the preview, a 409 on the placement
  - id: ATS-COM-ORD-003-06
    title: The selected tax zone supplies item components
    level: api
    proves:
      - BR-CAP-COM-ORD-003-06
    preconditions: T-shirts and a membership are priced with Texas state and Austin city rates.
    steps:
      - do: Preview the cart and inspect item tax and the saved quotation.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes each line at the most
          specific zone: state and city on the T-shirts, state alone on the membership
    expected: >-
      The T-shirts carry city and state components, the membership carries its matching state component and
      the quote preserves the amounts.
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes each line at the most
        specific zone: state and city on the T-shirts, state alone on the membership
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#stores the snapshot with each
        item’s tax, the tax record and the totals with the tax in them
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes nothing at an address no
        zone matches, and says so
      - TST-COM-ORD-026
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes each line at the most
      specific zone: state and city on the T-shirts, state alone on the membership
    category: rule
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes each line at the most
      specific zone: state and city on the T-shirts, state alone on the membership
  - id: ATS-COM-ORD-003-07
    title: Deleted ship-to helper produces a blocking refusal
    level: unit
    proves:
      - BR-CAP-COM-ORD-003-07
    preconditions: The selected shipping contact is absent from the supplied party facts.
    steps:
      - do: Evaluate the party and pass its problems to the placement-refusal helper.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is a blocking
          problem with the code and the message Andrew decided
    expected: >-
      The helpers report ship_to_not_found with 409 details and preserve selection rather than using buyer
      fallback.
    negative: true
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is a blocking problem
        with the code and the message Andrew decided
      - >-
        services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is refused
        ship_to_not_found with the problems in the details
      - >-
        services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is the ship-to party
        when one was chosen, never the buyer
      - TST-COM-ORD-059
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is a blocking problem
      with the code and the message Andrew decided
    category: validation
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is a blocking problem
      with the code and the message Andrew decided
  - id: ATS-COM-ORD-003-08
    title: Addressless ship-to blocks shipping only
    level: unit
    proves:
      - BR-CAP-COM-ORD-003-08
    preconditions: The selected contact has no preferred address.
    steps:
      - do: Evaluate the helper once with shipping required and once without.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is a blocking
          problem with the code and the message Andrew decided
    expected: Only the shipping case returns ship_to_no_address.
    negative: true
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is a blocking
        problem with the code and the message Andrew decided
      - >-
        services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is no problem, so a
        membership-only order to the recipient places
      - TST-COM-ORD-058
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is a blocking problem
      with the code and the message Andrew decided
    category: edge
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is a blocking problem
      with the code and the message Andrew decided
  - id: ATS-COM-ORD-003-09
    title: Fee pricing excludes discounts and needs its product
    level: api
    proves:
      - BR-CAP-COM-ORD-003-09
    preconditions: A pricing extension contributes a three-dollar fee and the fee product has an eight-percent tax rate.
    steps:
      - do: 'Preview with the fee product and promotion, then without the product.'
        provenance: test
        source: >-
          services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#previews the fee
          in the totals: $3.00 fee beside the line, nothing refused
    expected: >-
      The fee remains three dollars with twenty-four cents tax; missing configuration produces
      order_fee_unsupported.
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#previews the fee in
        the totals: $3.00 fee beside the line, nothing refused
      - >-
        services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#taxes the fee by the
        product’s class: 8 % of $3.00 is $0.24, in the order’s tax and total
      - >-
        services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#never discounts the
        fee: TEN takes $10.00 from the item and nothing from the fee line
      - >-
        services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#refuses the preview
        409 order_fee_unsupported, with the sentence
      - TST-COM-ORD-077
    provenance: test
    source: >-
      services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#previews the fee in
      the totals: $3.00 fee beside the line, nothing refused
    category: boundary
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#previews the fee in
      the totals: $3.00 fee beside the line, nothing refused
  - id: ATS-COM-ORD-003-10
    title: Required preprocessing failures prevent sale
    level: api
    proves:
      - BR-CAP-COM-ORD-003-10
    preconditions: 'Bundling, required-failure and optional-failure stores are configured.'
    steps:
      - do: Preview and place through each preprocessing arrangement.
        provenance: test
        source: >-
          services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#previews the
          checkout as the extension answered it: two t-shirts, the dropped mug gone, a bundled mug added
    expected: 'Bundling changes the items, required failure stops the request and optional failure records a skip.'
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#previews the checkout
        as the extension answered it: two t-shirts, the dropped mug gone, a bundled mug added
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#refuses the preview
        and the placement with EXTENSION_UNAVAILABLE (503) when the required extension answers outside its
        contract, placing nothing
      - >-
        services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#skips an optional
        extension that fails, prices the checkout as it is, and tells the trail
      - TST-COM-ORD-021
    provenance: test
    source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#previews the checkout as
      the extension answered it: two t-shirts, the dropped mug gone, a bundled mug added
    category: failure
    expected_provenance: test
    expected_source: >-
      services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#previews the checkout as
      the extension answered it: two t-shirts, the dropped mug gone, a bundled mug added
  - id: ATS-COM-ORD-003-11
    title: Composer rendering follows the returned preview
    level: unit
    proves:
      - BR-CAP-COM-ORD-003-12
    preconditions: The composer uses a controlled preview adapter and a selected customer fixture.
    steps:
      - do: Render before and after customer selection and inspect purchase-type choices.
        provenance: test
        source: >-
          react-console:components/order-composer/__tests__/live-composer.test.tsx#shows exactly the figures
          Commerce's preview answered
    expected: The displayed figures follow the adapter and only the supported store-product choice appears.
    negative: false
    data_needs: Use the controlled records and transports established by the cited tests.
    bound_to:
      - >-
        react-console:components/order-composer/__tests__/live-composer.test.tsx#shows exactly the figures
        Commerce's preview answered
      - >-
        react-console:components/order-composer/__tests__/live-composer.test.tsx#has nothing to price, and
        says so, before there is a customer
      - >-
        react-console:components/order-composer/__tests__/live-composer.test.tsx#offers store products only
        (Andrew 2026-10-22), with no Prototype menu
      - TST-COM-ORD-018
    provenance: test
    source: >-
      react-console:components/order-composer/__tests__/live-composer.test.tsx#shows exactly the figures
      Commerce's preview answered
    category: rule
    expected_provenance: test
    expected_source: >-
      react-console:components/order-composer/__tests__/live-composer.test.tsx#shows exactly the figures
      Commerce's preview answered
  - id: ATS-COM-ORD-003-12
    title: Preview discounts do not spend the promotion allowance
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-ORD-003-01
      - BR-CAP-COM-ORD-004-06
    preconditions: A cart qualifies for a limited-use code.
    steps:
      - do: 'Enter the code, preview twice, inspect counters and place once.'
        provenance: proposed
        source:
          - >-
            services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on
            the checkout, with the totals, and leaves a previewed event
          - >-
            services-commerce:modules/checkout/tests/e2e/promotions.e2e.spec.js#takes one use of the code and
            of the promotion
    expected: Both previews show the saving without spending a use; placement records one use.
    negative: false
    data_needs: Use an isolated workspace with the records and responses named in the preconditions.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on the
        checkout, with the totals, and leaves a previewed event
      - >-
        services-commerce:modules/checkout/tests/e2e/promotions.e2e.spec.js#takes one use of the code and of
        the promotion
    exercises:
      - CAP-COM-ORD-003
      - CAP-COM-ORD-004
    related_capabilities:
      - CAP-COM-ORD-004
    expected_provenance: proposed
    expected_source:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on the
        checkout, with the totals, and leaves a previewed event
      - >-
        services-commerce:modules/checkout/tests/e2e/promotions.e2e.spec.js#takes one use of the code and of
        the promotion
  - id: ATS-COM-ORD-003-13
    title: Repricing requires another review before purchase
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-ORD-003-01
      - BR-CAP-COM-ORD-005-03
    preconditions: A saved preview shows the fixture shirt price.
    steps:
      - do: 'Raise the price and place, then preview again and place.'
        provenance: proposed
        source:
          - >-
            services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on
            the checkout, with the totals, and leaves a previewed event
          - >-
            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
    expected: The first placement reports the difference without an order; the reviewed retry uses the revised amount.
    negative: false
    data_needs: Use an isolated workspace with the records and responses named in the preconditions.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on the
        checkout, with the totals, and leaves a previewed event
      - >-
        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
    exercises:
      - CAP-COM-ORD-003
      - CAP-COM-ORD-005
    related_capabilities:
      - CAP-COM-ORD-005
    expected_provenance: proposed
    expected_source:
      - >-
        services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price snapshot on the
        checkout, with the totals, and leaves a previewed event
      - >-
        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
  - id: ATS-COM-ORD-003-14
    title: Unavailable application advice leaves shopping recoverable
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-ORD-003-03
      - BR-CAP-COM-ORD-012-05
    preconditions: The owning application stops answering advice.
    steps:
      - do: 'Preview and place, restore the application and preview again.'
        provenance: proposed
        source:
          - >-
            services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the
            preview 503 participant_unavailable, retryable
          - >-
            services-commerce:modules/participants/tests/unit/client/lambda-participant-client.spec.js#times
            out by the contract’s timeout for the operation, aborting the call: advise 5 s, prepare 10 s
    expected: 'The unavailable calls produce no sale, and the same cart receives advice after recovery.'
    negative: false
    data_needs: Use an isolated workspace with the records and responses named in the preconditions.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview
        503 participant_unavailable, retryable
      - >-
        services-commerce:modules/participants/tests/unit/client/lambda-participant-client.spec.js#times out
        by the contract’s timeout for the operation, aborting the call: advise 5 s, prepare 10 s
    exercises:
      - CAP-COM-ORD-003
      - CAP-COM-ORD-012
    related_capabilities:
      - CAP-COM-ORD-012
    expected_provenance: proposed
    expected_source:
      - >-
        services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview
        503 participant_unavailable, retryable
      - >-
        services-commerce:modules/participants/tests/unit/client/lambda-participant-client.spec.js#times out
        by the contract’s timeout for the operation, aborting the call: advise 5 s, prepare 10 s
evidence:
  - >-
    Examined reference: react-console:components/order-composer/__tests__/live-composer.test.tsx#has nothing
    to price, and says so, before there is a customer
  - >-
    Examined reference: react-console:components/order-composer/__tests__/live-composer.test.tsx#offers store
    products only (Andrew 2026-10-22), with no Prototype menu
  - >-
    Examined reference: react-console:components/order-composer/__tests__/live-composer.test.tsx#shows exactly
    the figures Commerce's preview answered
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#previews the checkout as
    the extension answered it: two t-shirts, the dropped mug gone, a bundled mug added
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#refuses the preview and
    the placement with EXTENSION_UNAVAILABLE (503) when the required extension answers outside its contract,
    placing nothing
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js#skips
    an optional extension that fails, prices the checkout as it is, and tells the trail
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#refuses a buyer
    with no preferred address while a zone could tax the line: a no_tax_address problem on the preview, a 409
    on the placement
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#stores the
    snapshot with each item’s tax, the tax record and the totals with the tax in them
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes each line
    at the most specific zone: state and city on the T-shirts, state alone on the membership
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkout-tax.e2e.spec.js#taxes nothing at
    an address no zone matches, and says so
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#answers 200 with
    every item advised by the stub and priced from its standard USD row, and no problem
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#reports an item
    without a price in the currency, and one whose price row prohibits it
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#shows a
    participant’s refusal inline on the item rather than refusing the preview
  - >-
    Examined reference: services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js#stores the price
    snapshot on the checkout, with the totals, and leaves a previewed event
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#leaves the checkout open,
    nothing placed
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#previews the same
    checkout once the participant answers again
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js#refuses the preview 503
    participant_unavailable, retryable
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews the line as
    a product_not_eligible problem
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with a
    product_not_eligible problem on the bound line alone, naming it and the engine's sentence
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js#previews with no
    problem
  - >-
    Examined reference:
    services-commerce:modules/checkout/tests/unit/checkout/checkout-purchase-eligibility.spec.js#costs no
    evaluation for a product with no binding
  - >-
    Examined reference: services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is a
    blocking problem with the code and the message Andrew decided
  - >-
    Examined reference: services-commerce:modules/checkout/tests/unit/checkout/ship-to-no-address.spec.js#is
    no problem, so a membership-only order to the recipient places
  - >-
    Examined reference: services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is a
    blocking problem with the code and the message Andrew decided
  - >-
    Examined reference: services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is
    refused ship_to_not_found with the problems in the details
  - >-
    Examined reference: services-commerce:modules/checkout/tests/unit/checkout/ship-to-not-found.spec.js#is
    the ship-to party when one was chosen, never the buyer
  - >-
    Examined reference:
    services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#never discounts the fee:
    TEN takes $10.00 from the item and nothing from the fee line
  - >-
    Examined reference:
    services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#previews the fee in the
    totals: $3.00 fee beside the line, nothing refused
  - >-
    Examined reference:
    services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#refuses the preview 409
    order_fee_unsupported, with the sentence
  - >-
    Examined reference:
    services-commerce:modules/orders/tests/e2e/extension-line-adjustments.e2e.spec.js#taxes the fee by the
    product’s class: 8 % of $3.00 is $0.24, in the order’s tax and total
coverage:
  rule: covered
  transition: 'gap: FND-COM-ORD-060'
  validation: covered
  permission: 'gap: FND-COM-ORD-060'
  edge: covered
  failure: covered
  boundary: covered
  concurrency: 'gap: FND-COM-ORD-060'
  invariant: 'gap: FND-COM-ORD-060'
  interaction: covered
coverage_definition: Covered means a design scenario exists; executable coverage and execution results are separate.
permission_coverage:
  - key: commerce.checkouts.update
    where_checked: api
    scenarios: []
    gap: FND-COM-ORD-060
    note: >-
      The listed examples do not establish a complete allow-and-deny matrix for this key; unused catalogue
      keys need no invented route.
    provenance: unknown
    source: FND-COM-ORD-060
transition_coverage:
  - state_model: STATE-COM-ORD-002
    from: unvalidated
    to: advised
    trigger: The assessment obtains participant advice.
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/services/checkout/checkout-assessment.ts'
    note: 'Individual examples do not exhaustively prove this transition, its guard and side effects.'
  - state_model: STATE-COM-ORD-002
    from: unvalidated
    to: problems
    trigger: 'Assessment records seller, price or eligibility blockers.'
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/services/checkout/checkout-assessment.ts'
    note: 'Individual examples do not exhaustively prove this transition, its guard and side effects.'
  - state_model: STATE-COM-ORD-002
    from: advised
    to: unvalidated
    trigger: Selection editing or preprocessing changes the item.
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: >-
      services-commerce:modules/checkout/services/checkout/checkout-workflow.ts:changeItem;
      modules/checkout/services/checkout/checkout-preprocessing.ts
    note: 'Individual examples do not exhaustively prove this transition, its guard and side effects.'
  - state_model: STATE-COM-ORD-002
    from: unvalidated
    to: prepared
    trigger: The seller answers an early reservation request.
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: >-
      services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#acquires the hold: 200 with
      the reservation held, the item prepared with it, the participant’s row held, hold_acquired on the trail
    note: 'Individual examples do not exhaustively prove this transition, its guard and side effects.'
  - state_model: STATE-COM-ORD-002
    from: prepared
    to: stale
    trigger: Reservation expiry discovers the item's elapsed hold.
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: >-
      services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#expires the ledger’s row,
      marks the item stale with hold_expired on the trail, and counts it
    note: 'Individual examples do not exhaustively prove this transition, its guard and side effects.'
  - state_model: STATE-COM-ORD-002
    from: advised
    to: frozen
    trigger: Placement captures newly prepared purchase details.
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/orders/services/placement/place-order.ts:placeOrder'
    note: 'Individual examples do not exhaustively prove this transition, its guard and side effects.'
invariant_coverage:
  - invariant: INV-DOM-COM-ORD-001-01
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/db/checkouts.table.ts:checkouts_placed_order_check'
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-02
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/db/checkouts.table.ts:checkouts_placed_order_uq'
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-03
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: >-
      services-commerce:modules/checkout/db/checkouts.table.ts:checkouts_currency_check,
      checkouts_ordering_profile_source_check
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-04
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/services/persistence/checkouts.ts:CHECKOUT_TRANSITIONS'
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-05
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: >-
      services-commerce:modules/checkout/tests/e2e/placement.e2e.spec.js#leaves the checkout placed, naming
      the order, its items frozen with what prepare attested, and its trail telling the story;
      services-commerce:modules/checkout/services/persistence/checkouts.ts:updateCheckout, appendCheckoutEvent
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-06
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/db/checkouts.table.ts:checkouts_ship_to_check'
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-07
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:modules/checkout/tests/e2e/checkout-security.e2e.spec.js'
    note: Broader invariant coverage remains open beyond the concrete examples.
  - invariant: INV-DOM-COM-ORD-001-08
    scenarios: []
    gap: FND-COM-ORD-060
    provenance: unknown
    source: >-
      services-commerce:modules/checkout/db/checkout-items.table.ts:checkout_items_quantity_check;
      modules/checkout/services/checkout/checkout-part-checks.ts
    note: Broader invariant coverage remains open beyond the concrete examples.
workflow_coverage:
  - workflow: WF-COM-ORD-001
    scenarios:
      - ATS-COM-ORD-001-19
    gap: FND-COM-ORD-060
    provenance: proposed
    source:
      - 'services-commerce:modules/checkout/tests/e2e/ordering-profile-resolution.e2e.spec.js'
      - 'services-commerce:modules/checkout/services/checkout/purchasing-roles.ts'
      - >-
        services-commerce:modules/checkout/tests/e2e/holds-and-claims.e2e.spec.js#refuses another buyer the
        booth: 409 hold_unavailable with the participant’s reason, and their preview marks the item
        unavailable
      - 'services-commerce:modules/checkout/tests/e2e/checkout-preprocessing.e2e.spec.js'
      - 'services-commerce:modules/checkout/tests/e2e/participant-unavailable.e2e.spec.js'
      - 'services-commerce:modules/checkout/tests/e2e/product-purchase-eligibility.e2e.spec.js'
      - 'services-commerce:modules/checkout/tests/e2e/accounting-tax.e2e.spec.js'
      - 'services-commerce:modules/checkout/tests/e2e/checkouts.e2e.spec.js'
      - 'services-commerce:modules/checkout/aws/lambda/SWEEPER.ts:handler'
interaction_coverage:
  - with: CAP-COM-ORD-004
    scenarios:
      - ATS-COM-ORD-003-12
  - with: CAP-COM-ORD-005
    scenarios:
      - ATS-COM-ORD-003-13
  - with: CAP-COM-ORD-012
    scenarios:
      - ATS-COM-ORD-003-14
unproved_rules:
  - rule: BR-CAP-COM-ORD-003-11
    gap: FND-COM-ORD-060
    provenance: unknown
    source: 'services-commerce:docs/milestones/plans/COMM-M2-plan.md#D7'
---

# Review the price and resolve purchase blockers: Capability Test Specification

## Coverage

| Rule | Scenario or finding |
|---|---|
| `BR-CAP-COM-ORD-003-01` | `ATS-COM-ORD-003-01`, `ATS-COM-ORD-003-12`, `ATS-COM-ORD-003-13` |
| `BR-CAP-COM-ORD-003-02` | `ATS-COM-ORD-003-02` |
| `BR-CAP-COM-ORD-003-03` | `ATS-COM-ORD-003-03`, `ATS-COM-ORD-003-14` |
| `BR-CAP-COM-ORD-003-04` | `ATS-COM-ORD-003-04` |
| `BR-CAP-COM-ORD-003-05` | `ATS-COM-ORD-003-05` |
| `BR-CAP-COM-ORD-003-06` | `ATS-COM-ORD-003-06` |
| `BR-CAP-COM-ORD-003-07` | `ATS-COM-ORD-003-07` |
| `BR-CAP-COM-ORD-003-08` | `ATS-COM-ORD-003-08` |
| `BR-CAP-COM-ORD-003-09` | `ATS-COM-ORD-003-09` |
| `BR-CAP-COM-ORD-003-10` | `ATS-COM-ORD-003-10` |
| `BR-CAP-COM-ORD-003-11` | no scenario: `FND-COM-ORD-060` |
| `BR-CAP-COM-ORD-003-12` | `ATS-COM-ORD-003-11` |

## Interactions With Related Capabilities

Preview discounts do not spend the promotion allowance. A cart qualifies for a limited-use code. Enter the code, preview twice, inspect counters and place once.

Repricing requires another review before purchase. A saved preview shows the fixture shirt price. Raise the price and place, then preview again and place.

Unavailable application advice leaves shopping recoverable. The owning application stops answering advice. Preview and place, restore the application and preview again.

Crossing workflow examples also cover preparation, commitment and recovery at their service handoffs. Their structured bindings distinguish specified outcomes from executable evidence.
