---
id: WF-COM-CAT-016
title: Try promotions on a sample cart
trigger: >-
  Staff test a sample cart through ordinary assessment without creating a checkout or using promotion
  capacity. Explicitly selected drafts can be evaluated as active.
product_area: commerce
module: catalog
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
implements:
  - CAP-COM-CAT-018
crosses:
  - SVC-COM-CAT-promotions
  - SVC-COM-CAT-pricing
idempotency: The sample assessment persists no records; unchanged configuration and inputs produce the same calculation.
concurrency: Sample reads do not reserve capacity. Counts can change between this estimate and real placement.
hops:
  - 'n': 1
    actor_or_service: Promotions API
    action: >-
      Require console promotion-read authority and a valid nonempty sample cart, policy and included-campaign
      selection.
    anchor: 'services-commerce:modules/promotions/aws/api/promotion-previews.routes.ts'
    seam: sync
    on_failure: Reject unsupported callers or request content.
    left_inconsistent: No sample checkout is saved.
    observer: The requesting person or service receives the result and any returned refusal.
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/e2e/promotion-previews.e2e.spec.js#refuses a portal member,
      403
  - 'n': 2
    actor_or_service: Promotions preview
    action: >-
      Construct an in-memory checkout and treat explicitly included draft or paused campaigns as active for
      this assessment.
    anchor: 'services-commerce:modules/promotions/services/previews/promotion-previews.ts:previewPromotions'
    seam: sync
    on_failure: Return sample-input or policy refusals.
    left_inconsistent: No campaign status or usage changes.
    observer: The requesting person or service receives the result and any returned refusal.
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/integration/services/previews/promotion-previews.integration.spec.js#judges
      a draft as if active only when it is named: $80.00 without, $72.00 with
  - 'n': 3
    actor_or_service: Checkout assessment
    action: >-
      Run ordinary participant, audience and promotion assessment at the selected instant, without
      preprocessing, holds, redemptions, checkout events, shipping or tax.
    anchor: 'services-commerce:modules/checkout/services/checkout/checkout-assessment.ts:assessCheckout'
    seam: sync
    on_failure: Return the assessment refusal rather than placing a sale.
    left_inconsistent: The preview creates no persisted checkout or usage.
    observer: The requesting person or service receives the result and any returned refusal.
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/e2e/promotion-previews.e2e.spec.js#opens no checkout and
      writes no item, event, evaluation, redemption, reservation or order
branches:
  - A sample without a buyer uses anonymous Standard pricing.
waits: []
evidence:
  - >-
    services-commerce at c8b66a98: modules/promotions/services/previews/promotion-previews.ts;
    aws/api/promotion-previews.routes.ts; modules/checkout/services/checkout/checkout-assessment.ts;
    docs/milestones/COMM-M1-set-up-what-you-sell.md (D-REC-3).
  - 'react-console at baf6dae3: components/commerce/promotions/test-panel.tsx.'
controls: [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-CRY-001, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002]
---

# Try promotions on a sample cart

## What It Does

Staff test a sample cart through ordinary assessment without creating a checkout or using promotion capacity. Explicitly selected drafts can be evaluated as active.

## The Flow

```mermaid
sequenceDiagram
  participant S as Staff (Try It)
  participant P as Promotions preview
  participant K as Checkout assessment
  S->>P: buyer, items, codes, include drafts, instant
  P->>P: in-memory checkout under a policy
  P->>K: assess (no writes, no shipping, no tax)
  K-->>P: lines, discounts, explanations
  P-->>S: totals before shipping and tax
```

## When Something Fails

Reject unsupported callers or request content. No sample checkout is saved. Return sample-input or policy refusals. No campaign status or usage changes. Return the assessment refusal rather than placing a sale. The preview creates no persisted checkout or usage.

## Open Design Questions

The implemented recovery and concurrency behaviour above defines the current boundary. Any change to transaction scope or product authority requires a recorded decision.
