---
id: ATS-COM-CAT-012
scope: CAP-COM-CAT-012
product_area: commerce
module: catalog
revision: 2
status: proposed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-COM-CAT-012-01
    title: Unconfigured settings return defaults and replacement resets omissions
    level: api
    proves:
      - BR-CAP-COM-CAT-012-02
      - INV-DOM-COM-CAT-004-12
    preconditions: A product has no purchasing-settings record
    steps: Read settings and save a partial selection
    expected: Read returns defaults with the unconfigured indication; omitted fields take defaults on save
    negative: false
    data_needs: none
    bound_to:
      - TST-COM-CAT-065
      - TST-COM-CAT-079
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#reads a
      product without a row as the defaults, not configured
    category: rule
    binding_evidence:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#reads a
        product without a row as the defaults, not configured
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#gives a
        setting the PUT leaves out its default, the whole record being stated
      - >-
        services-commerce:modules/pricing/tests/integration/services/persistence/product-purchasing-settings.integration.spec.js#creates
        the row at the defaults: priced for the buyer, no roles, not excluded from promotions,
        version 1
    step_evidence:
      - do: Read settings and save a partial selection
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#reads
          a product without a row as the defaults, not configured
    assertions:
      - expect: >-
          Read returns defaults with the unconfigured indication; omitted fields take defaults on
          save
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#reads
          a product without a row as the defaults, not configured
  - id: ATS-COM-CAT-012-02
    title: Selection strategy changes the qualifying price chosen
    level: api
    proves:
      - BR-CAP-COM-CAT-012-03
      - AS-JNY-COM-CAT-002-04
    preconditions: A buyer qualifies for Member and Student
    steps: 'Quote using lowest, rank and lowest again'
    expected: 'Selection produces Student, Member and Student pricing respectively'
    negative: false
    data_needs: Student and Member price rows
    bound_to:
      - TST-COM-CAT-065
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices the
      student member at the student price under lowest (premise)
    category: interaction
    binding_evidence:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
        the student member at the student price under lowest (premise)
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
        the same buyer at the member price under rank, Member coming before Student members
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
        the buyer at the student price again once the selection is put back to lowest
    step_evidence:
      - do: 'Quote using lowest, rank and lowest again'
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
          the student member at the student price under lowest (premise)
    assertions:
      - expect: 'Selection produces Student, Member and Student pricing respectively'
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
          the student member at the student price under lowest (premise)
  - id: ATS-COM-CAT-012-03
    title: Invalid settings preserve the existing record
    level: api
    proves:
      - BR-CAP-COM-CAT-012-04
    preconditions: The product has saved settings
    steps: 'Reference an unknown schedule, unsupported selection and unknown role'
    expected: Each invalid save fails and preserves the settings
    negative: true
    data_needs: none
    bound_to:
      - TST-COM-CAT-065
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses a
      schedule the workspace does not have, 400, and leaves the settings as they were
    category: validation
    binding_evidence:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
        a schedule the workspace does not have, 400, and leaves the settings as they were
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
        a selection, a subject and a qualification date outside the lists, 400, naming the field
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
        an unknown organization role id with 400 naming it, and stores nothing (COM-ACC-0799)
    step_evidence:
      - do: 'Reference an unknown schedule, unsupported selection and unknown role'
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
          a schedule the workspace does not have, 400, and leaves the settings as they were
    assertions:
      - expect: Each invalid save fails and preserves the settings
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
          a schedule the workspace does not have, 400, and leaves the settings as they were
  - id: ATS-COM-CAT-012-04
    title: Pricing-handler activation controls its adjustment
    level: api
    proves:
      - BR-CAP-COM-CAT-012-06
    preconditions: The product price is twenty dollars
    steps: 'Register a 2.50-dollar adjustment, deactivate it and remove it'
    expected: 'Quotes become 22.50 dollars, then return to twenty dollars for both later states'
    negative: false
    data_needs: Fixture handler registry
    bound_to:
      - TST-COM-CAT-064
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#adds the function’s
      $2.50 to the next quote: $20.00 price row and $2.50 extension, $22.50
    category: transition
    binding_evidence:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#adds the
        function’s $2.50 to the next quote: $20.00 price row and $2.50 extension, $22.50
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#keeps the row and
        ignores it when it is put inactive: back to $20.00
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#removes the row,
        and the quote is at the price row again
    step_evidence:
      - do: 'Register a 2.50-dollar adjustment, deactivate it and remove it'
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#adds the
          function’s $2.50 to the next quote: $20.00 price row and $2.50 extension, $22.50
    assertions:
      - expect: 'Quotes become 22.50 dollars, then return to twenty dollars for both later states'
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#adds the
          function’s $2.50 to the next quote: $20.00 price row and $2.50 extension, $22.50
  - id: ATS-COM-CAT-012-05
    title: Pricing-function requests reject mismatched and handler-owned fields
    level: api
    proves:
      - BR-CAP-COM-CAT-012-07
    preconditions: A product function can be registered
    steps: 'Submit another product or workspace, a timeout and no handler'
    expected: Invalid registration fails without a saved function
    negative: true
    data_needs: none
    bound_to:
      - TST-COM-CAT-064
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#refuses a body
      naming another product
    category: validation
    binding_evidence:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#refuses a body
        naming another product
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#refuses an
        unknown property such as a timeout, which belongs to the handler
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#refuses a body
        without an extension_id
    step_evidence:
      - do: 'Submit another product or workspace, a timeout and no handler'
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#refuses a body
          naming another product
    assertions:
      - expect: Invalid registration fails without a saved function
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#refuses a body
          naming another product
  - id: ATS-COM-CAT-012-06
    title: Grid validation requires Standard coverage
    level: unit
    proves:
      - BR-CAP-COM-CAT-012-08
    preconditions: Member pricing exists without Standard in a cell
    steps: 'Validate missing, inherited and prohibited Standard configurations'
    expected: Missing coverage identifies the cell; inherited and prohibited coverage pass
    negative: true
    data_needs: none
    bound_to:
      - TST-COM-CAT-010
    provenance: test
    source: >-
      react-console:lib/commerce/pricing/__tests__/rules.test.ts#refuses a period with a Member
      price and no Standard price, naming the cell
    category: invariant
    binding_evidence:
      - >-
        react-console:lib/commerce/pricing/__tests__/rules.test.ts#refuses a period with a Member
        price and no Standard price, naming the cell
      - >-
        react-console:lib/commerce/pricing/__tests__/rules.test.ts#accepts a Standard inherited from
        the Always row
      - >-
        react-console:lib/commerce/pricing/__tests__/rules.test.ts#accepts a Standard that is
        prohibited on purpose
    step_evidence:
      - do: 'Validate missing, inherited and prohibited Standard configurations'
        provenance: test
        source: >-
          react-console:lib/commerce/pricing/__tests__/rules.test.ts#refuses a period with a Member
          price and no Standard price, naming the cell
    assertions:
      - expect: Missing coverage identifies the cell; inherited and prohibited coverage pass
        provenance: test
        source: >-
          react-console:lib/commerce/pricing/__tests__/rules.test.ts#refuses a period with a Member
          price and no Standard price, naming the cell
  - id: ATS-COM-CAT-012-07
    title: Pricing configuration separates read and write authority
    level: api
    proves:
      - BR-CAP-COM-CAT-012-10
    preconditions: The caller holds read grants for settings and functions
    steps: Inspect both resources and attempt changes
    expected: Inspection succeeds and writes fail
    negative: true
    data_needs: Read-exclusively persona
    bound_to:
      - TST-COM-CAT-065
      - TST-COM-CAT-064
    provenance: test
    source: >-
      services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#lets a
      read-only principal read, and refuses it the PUT, 403 permission_missing, the settings as they
      were
    category: permission
    binding_evidence:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#lets a
        read-only principal read, and refuses it the PUT, 403 permission_missing, the settings as
        they were
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#lets a read-only
        principal read, and refuses it the PUT and the DELETE, 403 permission_missing
    step_evidence:
      - do: Inspect both resources and attempt changes
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#lets a
          read-only principal read, and refuses it the PUT, 403 permission_missing, the settings as
          they were
    assertions:
      - expect: Inspection succeeds and writes fail
        provenance: test
        source: >-
          services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#lets a
          read-only principal read, and refuses it the PUT, 403 permission_missing, the settings as
          they were
  - id: ATS-COM-CAT-012-08
    title: Audience deactivation changes a configured price strategy
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-CAT-010-06
      - BR-CAP-COM-CAT-012-03
    preconditions: Member and Student qualify for one product.
    steps: 'Select rank pricing, deactivate the first audience, quote, reactivate and quote again.'
    expected: >-
      The inactive audience is skipped without losing its stored price and returns to selection
      after reactivation.
    negative: false
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/pricing/tests/integration/services/inputs/pricing-inputs.integration.spec.js#loads
        the active audiences in rank order, the inactive left out, and the period each schedule is
        in at the instant
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
        the same buyer at the member price under rank, Member coming before Student members
    exercises:
      - CAP-COM-CAT-010
      - CAP-COM-CAT-012
    workflows:
      - WF-COM-CAT-009
    step_evidence:
      - do: 'Select rank pricing, deactivate the first audience, quote, reactivate and quote again.'
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/tests/integration/services/inputs/pricing-inputs.integration.spec.js#loads
            the active audiences in rank order, the inactive left out, and the period each schedule
            is in at the instant
          - >-
            services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
            the same buyer at the member price under rank, Member coming before Student members
    assertions:
      - expect: >-
          The inactive audience is skipped without losing its stored price and returns to selection
          after reactivation.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/tests/integration/services/inputs/pricing-inputs.integration.spec.js#loads
            the active audiences in rank order, the inactive left out, and the period each schedule
            is in at the instant
          - >-
            services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
            the same buyer at the member price under rank, Member coming before Student members
  - id: ATS-COM-CAT-012-09
    title: A product reference retains its selected schedule
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-CAT-011-07
      - BR-CAP-COM-CAT-012-04
    preconditions: A product follows Annual and another schedule is inactive.
    steps: >-
      Attempt to disable Annual and select the inactive schedule; move the product to a valid
      alternative and disable Annual.
    expected: Referenced and inactive choices refuse; the unreferenced schedule can be disabled.
    negative: false
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/pricing/tests/integration/services/persistence/pricing-schedules.integration.spec.js#refuses
        with schedule_in_use, the count in the sentence, and the count and the first five product
        ids in the details
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
        an unknown organization role id with 400 naming it, and stores nothing (COM-ACC-0799)
    exercises:
      - CAP-COM-CAT-011
      - CAP-COM-CAT-012
    workflows:
      - WF-COM-CAT-009
      - WF-COM-CAT-012
    step_evidence:
      - do: >-
          Attempt to disable Annual and select the inactive schedule; move the product to a valid
          alternative and disable Annual.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/tests/integration/services/persistence/pricing-schedules.integration.spec.js#refuses
            with schedule_in_use, the count in the sentence, and the count and the first five
            product ids in the details
          - >-
            services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
            an unknown organization role id with 400 naming it, and stores nothing (COM-ACC-0799)
    assertions:
      - expect: Referenced and inactive choices refuse; the unreferenced schedule can be disabled.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/tests/integration/services/persistence/pricing-schedules.integration.spec.js#refuses
            with schedule_in_use, the count in the sentence, and the count and the first five
            product ids in the details
          - >-
            services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#refuses
            an unknown organization role id with 400 naming it, and stores nothing (COM-ACC-0799)
  - id: ATS-COM-CAT-012-10
    title: Purchasing strategy and handler activity alter the quote
    category: interaction
    level: api
    proves:
      - BR-CAP-COM-CAT-012-03
      - BR-CAP-COM-CAT-012-06
      - BR-CAP-COM-CAT-013-01
    preconditions: Member and Student qualify and a product handler adds a fixed amount.
    steps: 'Quote under lowest and rank, then disable the handler and repeat.'
    expected: >-
      The selected audience follows each strategy and the disabled handler contributes no
      adjustment.
    negative: false
    data_needs: Run-owned workspace and records; fixed clock where dates are exercised.
    bound_to: []
    provenance: proposed
    source:
      - >-
        services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
        the same buyer at the member price under rank, Member coming before Student members
      - >-
        services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#keeps the row and
        ignores it when it is put inactive: back to $20.00
      - >-
        services-commerce:modules/pricing/tests/unit/engine/engine.spec.js#prices the hoodies
        through the member cell, the variant, the bulk rule and the store’s line discount, in that
        order
    exercises:
      - CAP-COM-CAT-012
      - CAP-COM-CAT-013
    workflows:
      - WF-COM-CAT-009
    step_evidence:
      - do: 'Quote under lowest and rank, then disable the handler and repeat.'
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
            the same buyer at the member price under rank, Member coming before Student members
          - >-
            services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#keeps the row
            and ignores it when it is put inactive: back to $20.00
          - >-
            services-commerce:modules/pricing/tests/unit/engine/engine.spec.js#prices the hoodies
            through the member cell, the variant, the bulk rule and the store’s line discount, in
            that order
    assertions:
      - expect: >-
          The selected audience follows each strategy and the disabled handler contributes no
          adjustment.
        provenance: proposed
        source:
          - >-
            services-commerce:modules/pricing/tests/e2e/product-purchasing-settings.e2e.spec.js#prices
            the same buyer at the member price under rank, Member coming before Student members
          - >-
            services-commerce:modules/pricing/tests/e2e/product-extensions.e2e.spec.js#keeps the row
            and ignores it when it is put inactive: back to $20.00
          - >-
            services-commerce:modules/pricing/tests/unit/engine/engine.spec.js#prices the hoodies
            through the member cell, the variant, the bulk rule and the store’s line discount, in
            that order
evidence:
  - 'Pinned service inputs: test sources in scenario bindings'
  - 'Pinned console inputs: console sources in scenario bindings'
  - >-
    rhythm-v2-docs:specs/commerce/catalog/planning/capabilities/CAP-COM-CAT-012-set-how-a-product-is-priced-and-bought.md#CAP-COM-CAT-012
  - >-
    rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-009-quote-a-price.md#WF-COM-CAT-009
  - >-
    rhythm-v2-docs:specs/commerce/catalog/design/workflows/WF-COM-CAT-012-replace-a-price-schedule-and-reconcile-its.md#WF-COM-CAT-012
product_intent: proposed
coverage:
  rule: covered
  transition: covered
  validation: covered
  permission: covered
  edge: 'gap: FND-COM-CAT-066'
  failure: 'gap: FND-COM-CAT-066'
  boundary: 'gap: FND-COM-CAT-066'
  concurrency: 'gap: FND-COM-CAT-066'
  invariant: covered
  interaction: covered
coverage_notes:
  edge: >-
    No complete edge scenario is established by this back-fill; the finding records the missing
    proof.
  failure: >-
    No complete failure scenario is established by this back-fill; the finding records the missing
    proof.
  boundary: >-
    No complete boundary scenario is established by this back-fill; the finding records the missing
    proof.
  concurrency: Concurrent execution has no complete scenario; sequential retry is insufficient proof.
permission_coverage:
  - key: commerce.product-purchasing-settings.read
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-purchasing-settings.update
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-purchasing-settings.create
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-purchasing-settings.delete
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-purchasing-settings.bulk
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-extensions.read
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-extensions.update
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-extensions.delete
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-extensions.create
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
  - key: commerce.product-extensions.bulk
    coverage: 'gap: FND-COM-CAT-066'
    reason: >-
      Existing permission examples cover selected personas, not the independent allow and deny
      matrix for every named key.
    provenance: unknown
    source:
      - 'rhythm-v2-docs:specs/commerce/catalog/FINDINGS.md#FND-COM-CAT-066'
---

# Configure product purchasing and price adjustments: Capability Test Specification

## Coverage

| Rule | Proof Scenario or Gap |
|---|---|
| `BR-CAP-COM-CAT-012-02` | `ATS-COM-CAT-012-01` |
| `BR-CAP-COM-CAT-012-03` | `ATS-COM-CAT-012-02`, `ATS-COM-CAT-012-08`, `ATS-COM-CAT-012-10` |
| `BR-CAP-COM-CAT-012-04` | `ATS-COM-CAT-012-03`, `ATS-COM-CAT-012-09` |
| `BR-CAP-COM-CAT-012-06` | `ATS-COM-CAT-012-04`, `ATS-COM-CAT-012-10` |
| `BR-CAP-COM-CAT-012-07` | `ATS-COM-CAT-012-05` |
| `BR-CAP-COM-CAT-012-08` | `ATS-COM-CAT-012-06` |
| `BR-CAP-COM-CAT-012-10` | `ATS-COM-CAT-012-07` |

## Interactions With Related Capabilities

Selection strategy changes the qualifying price chosen. Audience deactivation changes a configured price strategy. A product reference retains its selected schedule. Purchasing strategy and handler activity alter the quote.

Coverage describes specified proof. A binding names the existing assertions that contribute to it; proposed designs remain unexecuted.
