---
id: JNY-COM-CAT-005
title: A buyer receives a valid discount and staff account for its use
feature: FEAT-COM-CAT-04
product_area: commerce
module: catalog
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes: []
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
actor: ACT-COM-005
goal: >-
  Complete a priced sale with retained promotion usage and a deliberate release
  path.
capabilities:
  - CAP-COM-CAT-013
  - CAP-COM-CAT-016
  - CAP-COM-CAT-017
screens: []
steps:
  - 'n': 1
    surface: createPriceQuote
    action: Add the guide to the member’s cart
    capability: CAP-COM-CAT-013
    expected: The cart initially uses the eighty-dollar audience amount
    provenance: documented
    source: >-
      services-commerce:docs/milestones/plans/COMM-M1-plan.md#D5. The order of
      the price calculation
  - 'n': 2
    surface: checkout preview (orders module)
    action: Enter the noncombinable quarter-off code
    capability: CAP-COM-CAT-016
    expected: >-
      The seventy-five-dollar Standard-based alternative is selected and
      explained
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/unit/pricing/alternatives.spec.js#2.
      combine = no, member: audience pricing $80.00 against $100.00 less 25 % =
      $75.00; the promotional price wins
  - 'n': 3
    surface: order placement (orders module)
    action: Complete placement
    capability: CAP-COM-CAT-017
    expected: The applied code and promotion gain usage and the promotion’s terms lock
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/integration/services/persistence/promotion-redemptions.integration.spec.js#counts
      one use on the code and one on the promotion
  - 'n': 4
    surface: releasePromotionRedemption
    action: Release the redemption under override authority with a reason
    capability: CAP-COM-CAT-017
    expected: Usage is restored and the order retains the release event
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/e2e/promotion-redemptions.e2e.spec.js#records
      order.promotion_released on the order, with the actor and the reason
alternates:
  - from_step: 2
    condition: Student qualification supplies a sixty-dollar audience alternative
    path: Audience selection wins without applying the claim
    outcome: No use is consumed and the purchaser is told why
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/unit/pricing/alternatives.spec.js#3.
      combine = no, student at $60.00: audience pricing wins, EARLY25 consumes
      no use, and the buyer is told why
  - from_step: 3
    condition: Another code already retains the lines
    path: The code is retained on the order as not applied
    outcome: Placement retains the unused claim without decrementing capacity
    provenance: documented
    source: 'services-commerce:docs/milestones/COMM-M1-set-up-what-you-sell.md#R3-1b'
failures:
  - from_step: 3
    condition: The claim interval ends before placement
    path: The placement fails validation
    outcome: Nothing is persisted
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/unit/pricing/validation.spec.js#expired:
      at or after the window closes
  - from_step: 3
    condition: The selling area does not permit say which lines qualify
    path: The placement fails validation with a request to try again
    outcome: Nothing is persisted
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/unit/pricing/parts.spec.js#refuses
      a code promotion_check_unavailable when a part is listed unavailable, and
      discounts nothing
rules_in_play:
  - BR-CAP-COM-CAT-013-01
  - BR-CAP-COM-CAT-016-01
  - BR-CAP-COM-CAT-016-02
  - BR-CAP-COM-CAT-016-06
  - BR-CAP-COM-CAT-016-12
  - BR-CAP-COM-CAT-016-15
  - BR-CAP-COM-CAT-017-01
  - BR-CAP-COM-CAT-017-04
assertions:
  - id: AS-JNY-COM-CAT-005-01
    statement: >-
      The selected result respects both lowest-price comparison and prohibited
      combinations.
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/unit/pricing/alternatives.spec.js#never
      applies a promotion that does not combine to a line left on its audience
      price
  - id: AS-JNY-COM-CAT-005-02
    statement: An unapplied ineffective code does not consume capacity.
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/unit/pricing/alternatives.spec.js#records
      as applied only the promotions that gave a discount; a code that gave
      nothing is rejected and not applied
  - id: AS-JNY-COM-CAT-005-03
    statement: Release restores usage once and remains recorded in both histories.
    provenance: test
    source: >-
      services-commerce:modules/promotions/tests/e2e/promotion-redemptions.e2e.spec.js#refuses
      the second release, 409 already_released
e2e_policy: required
e2e_reason: >-
  The journey crosses calculation, order placement and redemption records,
  making end-to-end financial proof necessary.
evidence:
  - >-
    Pinned service inputs: D12 decision and algorithm, promotions unit and
    integration tests, redemption end-to-end tests
---

# A buyer receives a valid discount and staff account for its use

## Story

The member begins with audience pricing and enters a code that competes against it. Checkout explains which permitted result is cheaper. Placement records the applied redemption with the order. Later, an administrator can restore the use through the explicit release path and a reason. A code that does not contribute a benefit is distinguished from a claim that prevents placement.
