---
id: MOD-COM-CAT
title: Catalog and Selling Configuration
product_area: commerce
module: catalog
revision: 1
status: draft
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repositories:
  - name: services-commerce
    paths:
      - modules/catalog
      - modules/merchandise
      - modules/pricing
      - modules/promotions
      - modules/configuration
      - modules/recommendations
      - >-
        aws/commerce.service.ts (the catalog, merchandise, pricing, promotions,
        configuration and recommendation permission groups)
      - >-
        docs/milestones/COMM-M1-set-up-what-you-sell.md,
        COMM-M1b-promotions-and-codes.md, COMM-M1-repairs-6-report.md,
        COMM-M1-repairs-7-report.md, README.md
      - >-
        docs/milestones/plans/COMM-M1-plan.md, COMM-M1b-engine.md;
        decisions/COMM-M1-D12-*.md; walkthroughs/COMM-M1-handoff.md (cited by
        the records)
      - >-
        COMM-M1-QUESTIONS.md, docs/debt/pricing-schedules-owned-by-event.md,
        docs/debt/promotion-scope-column.md, docs/decisions/ordering-profiles.md
        (cited by the records)
  - name: react-console
    paths:
      - >-
        components/commerce/{audiences,catalog,merchandise,ordering-profiles,pricing,pricing-schedules,promotions,stores}
      - >-
        lib/commerce/{audiences,catalog,merchandise,ordering-profiles,pricing,pricing-schedules,promotions,stores}
      - components/commerce/__tests__
      - >-
        components/configuration/area-route.tsx (the orders areas),
        components/configuration/resources/product-categories.tsx
      - >-
        lib/configuration/areas.ts (the orders areas),
        lib/authz/backend-aliases.ts (Commerce keys)
      - >-
        e2e/mock/commerce-checkout-policies.mock.spec.ts,
        commerce-view-edit.mock.spec.ts, merchandise.mock.spec.ts,
        promotions.mock.spec.ts
      - >-
        components/order-composer/priced-preview.tsx (read only: the composer is
        MOD-COM-ORD’s)
owns:
  - 'Checkout policies, processing defaults and interim tax configuration'
  - Stores and their category assortments and purchasing choices
  - 'Categories, product presentations and managed listing assets'
  - 'Merchandise descriptions, selections and sale-availability assessment'
  - 'Audiences, schedules, purchasing settings and pricing calculations'
  - 'Campaign offers, claims, issuance, assessments and accountable usage'
  - 'Suggestion rules, placements, registered flows, presentations and responses'
does_not_own:
  - record: >-
      Owned elsewhere: Accounting products, product types, revenue accounts,
      price rows, exchange rates, business units, merchant accounts and payment
      methods
    owner: MOD-ACC-PRD and MOD-ACC-BKS
  - record: >-
      Owned elsewhere: Invoices, payments, credits and refunds that orders
      produce
    owner: MOD-ACC-TRX
  - record: >-
      Owned elsewhere: Checkouts, orders, placement, participants, entitlements
      and download grants, the order composer and the orders pages
    owner: MOD-COM-ORD
  - record: >-
      Owned elsewhere: Inventory, shipping, fulfilment and the data-operation
      imports from Rhythm 1.0
    owner: MOD-COM-FUL
  - record: >-
      Owned elsewhere: Eligibility rules and bindings that qualify buyers for
      audiences and promotions
    owner: MOD-PFM-ELG
  - record: 'Owned elsewhere: Contacts, organizations, affiliations and contact roles'
    owner: MOD-CRM-ENT
  - record: 'Owned elsewhere: Pricing extension handlers and their registry'
    owner: MOD-PFM-INT
  - record: 'Owned elsewhere: Membership qualification facts and membership products'
    owner: MOD-MBR-MEM
  - record: 'Owned elsewhere: Installment plans and schedules offered at checkout'
    owner: MOD-BIL-BIL
  - record: 'Owned elsewhere: Permission evaluation and application access'
    owner: MOD-PFM-SEC
hosted_screens:
  - route: '/console/{tenantId}/configuration/orders/orderingProfiles'
    purpose: >-
      Checkout Policies: inspect and maintain list, view, create and edit a
      policy, and the defaults page.
  - route: '/console/{tenantId}/configuration/orders/stores'
    purpose: >-
      Stores: inspect and maintain list, view, create and edit a store and its
      assortment.
  - route: '/console/{tenantId}/configuration/orders/productCategories'
    purpose: >-
      Product Categories: inspect and maintain category organization for store
      offerings.
  - route: '/console/{tenantId}/configuration/orders/merchandise'
    purpose: >-
      Merchandise: inspect and maintain list, view, create and edit an item and
      its Storefront section (the listing).
  - route: '/console/{tenantId}/configuration/orders/pricingAudiences'
    purpose: >-
      Pricing Audiences: inspect and maintain list, view, create and edit
      audiences and see where each is used.
  - route: '/console/{tenantId}/configuration/accounting/products/{productId}/pricing'
    purpose: >-
      A product’s Pricing page: inspect and maintain the price grid, Purchasing
      settings and Preview As (hosted under Accounting’s Products area).
  - route: '/console/{tenantId}/configuration/orders/promotions'
    purpose: >-
      Promotions: inspect and maintain list, create, view (Overview, Codes,
      Redemptions, Performance), edit, Try It, and a code’s editor and page.
  - route: '/console/{tenantId}/configuration/orders/promotionCodes'
    purpose: 'All Codes: inspect and maintain every code across promotions.'
  - route: '/console/{tenantId}/configuration/orders/coupons'
    purpose: >-
      Coupons: inspect and maintain the Rhythm 1.0 area kept reachable by
      address but unlisted (D-REC-17, to confirm).
supersedes: []
evidence:
  - >-
    Pinned service inputs: modules/catalog, merchandise, pricing, promotions,
    configuration, recommendations (routes, schemas, services, tables,
    migrations named by the tables, tests), aws/commerce.service.ts (permission
    groups), docs/milestones/COMM-M1* with the plans, decisions and walkthrough
    they cite, COMM-M1-QUESTIONS.md,
    docs/debt/pricing-schedules-owned-by-event.md,
    docs/debt/promotion-scope-column.md, docs/decisions/ordering-profiles.md.
  - >-
    Pinned console inputs:
    components/commerce/{audiences,catalog,merchandise,ordering-profiles,pricing,pricing-schedules,promotions,stores}/**,
    lib/commerce/** of the same areas, components/configuration/area-route.tsx
    and resources/product-categories.tsx, lib/configuration/areas.ts (the orders
    areas), lib/authz/backend-aliases.ts (Commerce keys),
    e2e/mock/{commerce-checkout-policies,commerce-view-edit,merchandise,promotions}.mock.spec.ts.
    The orders pages and the order composer named in the registry belong to the
    orders module and were read only for the priced preview.
  - >-
    Structural inventory: 114 product operations, 35 tables, 71 permission keys,
    186 service test files and nine hosted route entries; ownership is mapped in
    coverage_catalog.
  - >-
    Planning rows: 229 rules; 189 require proof; 160 acceptance scenarios, of
    which 155 retain existing test bindings.
  - >-
    Console inventory: 58 unit and mock-browser test files mapped to capability
    or shared-presentation ownership; seven files supply acceptance bindings.
coverage_catalog: >
  ### Operation Mapping


  | Operation | Capability |

  |---|---|

  | `acceptOffer` | `CAP-COM-CAT-020` |

  | `activatePromotion` | `CAP-COM-CAT-014` |

  | `activateRecommendationRule` | `CAP-COM-CAT-019` |

  | `archivePromotion` | `CAP-COM-CAT-014` |

  | `archiveRecommendationRule` | `CAP-COM-CAT-019` |

  | `createMerchandise` | `CAP-COM-CAT-007` |

  | `createMerchandiseOptionSet` | `CAP-COM-CAT-007` |

  | `createOrderingProfile` | `CAP-COM-CAT-001` |

  | `createPriceQuote` | `CAP-COM-CAT-013` |

  | `createPricingAudience` | `CAP-COM-CAT-010` |

  | `createPricingSchedule` | `CAP-COM-CAT-011` |

  | `createProductCategory` | `CAP-COM-CAT-005` |

  | `createProductListing` | `CAP-COM-CAT-006` |

  | `createPromotion` | `CAP-COM-CAT-014` |

  | `createPromotionCode` | `CAP-COM-CAT-015` |

  | `createPromotionCodeIssuance` | `CAP-COM-CAT-015` |

  | `createPublicPriceQuote` | `CAP-COM-CAT-013` |

  | `createRecommendationJourney` | `CAP-COM-CAT-019` |

  | `createRecommendationRule` | `CAP-COM-CAT-019` |

  | `createStore` | `CAP-COM-CAT-003` |

  | `createTaxZone` | `CAP-COM-CAT-004` |

  | `deleteMerchandise` | `CAP-COM-CAT-007` |

  | `deleteMerchandiseOptionSet` | `CAP-COM-CAT-007` |

  | `deleteOrderingProfile` | `CAP-COM-CAT-001` |

  | `deletePricingAudience` | `CAP-COM-CAT-010` |

  | `deletePricingSchedule` | `CAP-COM-CAT-011` |

  | `deleteProductCategory` | `CAP-COM-CAT-005` |

  | `deleteProductExtension` | `CAP-COM-CAT-012` |

  | `deleteProductListing` | `CAP-COM-CAT-006` |

  | `deleteRecommendationJourney` | `CAP-COM-CAT-019` |

  | `deleteStore` | `CAP-COM-CAT-003` |

  | `deleteTaxZone` | `CAP-COM-CAT-004` |

  | `disablePromotionCode` | `CAP-COM-CAT-015` |

  | `dismissOffer` | `CAP-COM-CAT-020` |

  | `downloadEntitledFile` | `CAP-COM-CAT-009` |

  | `duplicatePromotion` | `CAP-COM-CAT-014` |

  | `enablePromotionCode` | `CAP-COM-CAT-015` |

  | `endPromotion` | `CAP-COM-CAT-014` |

  | `endRecommendationRule` | `CAP-COM-CAT-019` |

  | `evaluateOffers` | `CAP-COM-CAT-020` |

  | `evaluatePublicOffers` | `CAP-COM-CAT-020` |

  | `exportPromotionCodeIssuanceCodes` | `CAP-COM-CAT-015` |

  | `getMerchandise` | `CAP-COM-CAT-007` |

  | `getMerchandiseOptionSet` | `CAP-COM-CAT-007` |

  | `getOrderingProfile` | `CAP-COM-CAT-001` |

  | `getOrderingProfileDefaults` | `CAP-COM-CAT-002` |

  | `getOrderingProfileUsage` | `CAP-COM-CAT-001` |

  | `getPricingAudience` | `CAP-COM-CAT-010` |

  | `getPricingSchedule` | `CAP-COM-CAT-011` |

  | `getProductCategory` | `CAP-COM-CAT-005` |

  | `getProductExtension` | `CAP-COM-CAT-012` |

  | `getProductListing` | `CAP-COM-CAT-006` |

  | `getProductPurchasingSettings` | `CAP-COM-CAT-012` |

  | `getPromotion` | `CAP-COM-CAT-014` |

  | `getPromotionCode` | `CAP-COM-CAT-015` |

  | `getPromotionCodeIssuance` | `CAP-COM-CAT-015` |

  | `getPublicStorefrontListing` | `CAP-COM-CAT-008` |

  | `getRecommendationJourney` | `CAP-COM-CAT-019` |

  | `getRecommendationPlacement` | `CAP-COM-CAT-019` |

  | `getRecommendationRule` | `CAP-COM-CAT-019` |

  | `getRecommendationRulePerformance` | `CAP-COM-CAT-019` |

  | `getStore` | `CAP-COM-CAT-003` |

  | `getStorefrontListing` | `CAP-COM-CAT-008` |

  | `getTaxZone` | `CAP-COM-CAT-004` |

  | `listAllPromotionCodes` | `CAP-COM-CAT-015` |

  | `listCategoryProducts` | `CAP-COM-CAT-005` |

  | `listMerchandise` | `CAP-COM-CAT-007` |

  | `listMerchandiseOptionSets` | `CAP-COM-CAT-007` |

  | `listOrderPromotionRedemptions` | `CAP-COM-CAT-017` |

  | `listOrderingProfiles` | `CAP-COM-CAT-001` |

  | `listPricingAudiences` | `CAP-COM-CAT-010` |

  | `listPricingSchedules` | `CAP-COM-CAT-011` |

  | `listProductCategories` | `CAP-COM-CAT-005` |

  | `listProductListings` | `CAP-COM-CAT-006` |

  | `listPromotionAreas` | `CAP-COM-CAT-014` |

  | `listPromotionCodeRedemptions` | `CAP-COM-CAT-017` |

  | `listPromotionCodes` | `CAP-COM-CAT-015` |

  | `listPromotionHistory` | `CAP-COM-CAT-014` |

  | `listPromotionRedemptions` | `CAP-COM-CAT-017` |

  | `listPromotions` | `CAP-COM-CAT-014` |

  | `listPublicStorefrontListings` | `CAP-COM-CAT-008` |

  | `listRecommendationJourneys` | `CAP-COM-CAT-019` |

  | `listRecommendationPlacements` | `CAP-COM-CAT-019` |

  | `listRecommendationRules` | `CAP-COM-CAT-019` |

  | `listStorefrontListings` | `CAP-COM-CAT-008` |

  | `listStores` | `CAP-COM-CAT-003` |

  | `listTaxZones` | `CAP-COM-CAT-004` |

  | `pausePromotion` | `CAP-COM-CAT-014` |

  | `pauseRecommendationRule` | `CAP-COM-CAT-019` |

  | `previewPromotions` | `CAP-COM-CAT-018` |

  | `readPromotionPerformance` | `CAP-COM-CAT-017` |

  | `releasePromotionRedemption` | `CAP-COM-CAT-017` |

  | `replaceCategoryProducts` | `CAP-COM-CAT-005` |

  | `replaceOrderingProfileDefaults` | `CAP-COM-CAT-002` |

  | `resolveOrderingProfile` | `CAP-COM-CAT-002` |

  | `resumePromotion` | `CAP-COM-CAT-014` |

  | `resumeRecommendationRule` | `CAP-COM-CAT-019` |

  | `retireMerchandise` | `CAP-COM-CAT-007` |

  | `revokePromotionCode` | `CAP-COM-CAT-015` |

  | `setProductExtension` | `CAP-COM-CAT-012` |

  | `setProductPurchasingSettings` | `CAP-COM-CAT-012` |

  | `updateMerchandise` | `CAP-COM-CAT-007` |

  | `updateMerchandiseOptionSet` | `CAP-COM-CAT-007` |

  | `updateOrderingProfile` | `CAP-COM-CAT-001` |

  | `updatePricingAudience` | `CAP-COM-CAT-010` |

  | `updatePricingSchedule` | `CAP-COM-CAT-011` |

  | `updateProductCategory` | `CAP-COM-CAT-005` |

  | `updateProductListing` | `CAP-COM-CAT-006` |

  | `updatePromotion` | `CAP-COM-CAT-014` |

  | `updatePromotionCode` | `CAP-COM-CAT-015` |

  | `updateRecommendationJourney` | `CAP-COM-CAT-019` |

  | `updateRecommendationRule` | `CAP-COM-CAT-019` |

  | `updateStore` | `CAP-COM-CAT-003` |

  | `updateTaxZone` | `CAP-COM-CAT-004` |


  ### Table Mapping


  | Declaration (under services-commerce modules/) | Capabilities |

  |---|---|

  | `catalog/db/product-categories.table.ts` | `CAP-COM-CAT-005` |

  | `catalog/db/product-category-products.table.ts` | `CAP-COM-CAT-005`,
  `CAP-COM-CAT-006` |

  | `catalog/db/product-listings.table.ts` | `CAP-COM-CAT-006`,
  `CAP-COM-CAT-008` |

  | `catalog/db/product-listing-images.table.ts` | `CAP-COM-CAT-006` |

  | `catalog/db/product-listing-files.table.ts` | `CAP-COM-CAT-006`,
  `CAP-COM-CAT-009` |

  | `catalog/db/managed-assets.table.ts` | `CAP-COM-CAT-003`, `CAP-COM-CAT-005`,
  `CAP-COM-CAT-006` |

  | `merchandise/db/merchandise.table.ts` | `CAP-COM-CAT-007` |

  | `merchandise/db/merchandise-variants.table.ts` | `CAP-COM-CAT-007` |

  | `merchandise/db/merchandise-option-sets.table.ts` | `CAP-COM-CAT-007` |

  | `merchandise/db/merchandise-modifier-options.table.ts` | `CAP-COM-CAT-007` |

  | `pricing/db/pricing-audiences.table.ts` | `CAP-COM-CAT-010` |

  | `pricing/db/pricing-schedules.table.ts` | `CAP-COM-CAT-011` |

  | `pricing/db/pricing-periods.table.ts` | `CAP-COM-CAT-011`, `CAP-COM-CAT-013`
  |

  | `pricing/db/product-purchasing-settings.table.ts` | `CAP-COM-CAT-012` |

  | `pricing/db/product-extensions.table.ts` | `CAP-COM-CAT-012` |

  | `promotions/db/promotions.table.ts` | `CAP-COM-CAT-014` |

  | `promotions/db/promotion-parts.table.ts` | `CAP-COM-CAT-014` |

  | `promotions/db/promotion-events.table.ts` | `CAP-COM-CAT-014`,
  `CAP-COM-CAT-017` |

  | `promotions/db/promotion-codes.table.ts` | `CAP-COM-CAT-015` |

  | `promotions/db/promotion-code-restrictions.table.ts` | `CAP-COM-CAT-015` |

  | `promotions/db/promotion-code-issuances.table.ts` | `CAP-COM-CAT-015` |

  | `promotions/db/checkout-promotions.table.ts` | `CAP-COM-CAT-016`,
  `CAP-COM-CAT-017` |

  | `promotions/db/promotion-redemptions.table.ts` | `CAP-COM-CAT-017` |

  | `promotions/db/order-line-discounts.table.ts` | `CAP-COM-CAT-016`,
  `CAP-COM-CAT-017` |

  | `configuration/db/ordering-profiles.table.ts` | `CAP-COM-CAT-001` |

  | `configuration/db/ordering-profile-defaults.table.ts` | `CAP-COM-CAT-002` |

  | `configuration/db/stores.table.ts` | `CAP-COM-CAT-003` |

  | `configuration/db/tax-zones.table.ts` | `CAP-COM-CAT-004` |

  | `configuration/db/tax-rates.table.ts` | `CAP-COM-CAT-004` |

  | `recommendations/db/recommendation-rules.table.ts` | `CAP-COM-CAT-019` |

  | `recommendations/db/recommendation-rule-placements.table.ts` |
  `CAP-COM-CAT-019` |

  | `recommendations/db/recommendation-placements.table.ts` | `CAP-COM-CAT-019`
  |

  | `recommendations/db/recommendation-journeys.table.ts` | `CAP-COM-CAT-019` |

  | `recommendations/db/offer-presentations.table.ts` | `CAP-COM-CAT-020` |

  | `recommendations/db/offer-interactions.table.ts` | `CAP-COM-CAT-020` |


  ### Permission Mapping


  | Key | Capabilities |

  |---|---|

  | `commerce.ordering-profiles.read` | `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  | `commerce.ordering-profiles.create` | `CAP-COM-CAT-001` |

  | `commerce.ordering-profiles.update` | `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  | `commerce.ordering-profiles.delete` | `CAP-COM-CAT-001` |

  | `commerce.ordering-profiles.bulk` | `CAP-COM-CAT-001` |

  | `commerce.stores.read` | `CAP-COM-CAT-003` |

  | `commerce.stores.create` | `CAP-COM-CAT-003` |

  | `commerce.stores.update` | `CAP-COM-CAT-003` |

  | `commerce.stores.delete` | `CAP-COM-CAT-003` |

  | `commerce.stores.bulk` | `CAP-COM-CAT-003` |

  | `commerce.tax-zones.read` | `CAP-COM-CAT-004` |

  | `commerce.tax-zones.create` | `CAP-COM-CAT-004` |

  | `commerce.tax-zones.update` | `CAP-COM-CAT-004` |

  | `commerce.tax-zones.delete` | `CAP-COM-CAT-004` |

  | `commerce.tax-zones.bulk` | `CAP-COM-CAT-004` (bound to no route) |

  | `commerce.pricing-audiences.read` | `CAP-COM-CAT-010` |

  | `commerce.pricing-audiences.create` | `CAP-COM-CAT-010` |

  | `commerce.pricing-audiences.update` | `CAP-COM-CAT-010` |

  | `commerce.pricing-audiences.delete` | `CAP-COM-CAT-010` |

  | `commerce.pricing-audiences.bulk` | `CAP-COM-CAT-010` (bound to no route) |

  | `commerce.pricing-schedules.read` | `CAP-COM-CAT-011` |

  | `commerce.pricing-schedules.create` | `CAP-COM-CAT-011` |

  | `commerce.pricing-schedules.update` | `CAP-COM-CAT-011` |

  | `commerce.pricing-schedules.delete` | `CAP-COM-CAT-011` |

  | `commerce.pricing-schedules.bulk` | `CAP-COM-CAT-011` (bound to no route) |

  | `commerce.product-purchasing-settings.read` | `CAP-COM-CAT-012` |

  | `commerce.product-purchasing-settings.create` | `CAP-COM-CAT-012` (bound to
  no route) |

  | `commerce.product-purchasing-settings.update` | `CAP-COM-CAT-012` |

  | `commerce.product-purchasing-settings.delete` | `CAP-COM-CAT-012` (bound to
  no route) |

  | `commerce.product-purchasing-settings.bulk` | `CAP-COM-CAT-012` (bound to no
  route) |

  | `commerce.product-extensions.read` | `CAP-COM-CAT-012` |

  | `commerce.product-extensions.create` | `CAP-COM-CAT-012` (bound to no route)
  |

  | `commerce.product-extensions.update` | `CAP-COM-CAT-012` |

  | `commerce.product-extensions.delete` | `CAP-COM-CAT-012` |

  | `commerce.product-extensions.bulk` | `CAP-COM-CAT-012` (bound to no route) |

  | `commerce.merchandise.read` | `CAP-COM-CAT-007` |

  | `commerce.merchandise.create` | `CAP-COM-CAT-007` |

  | `commerce.merchandise.update` | `CAP-COM-CAT-007` |

  | `commerce.merchandise.delete` | `CAP-COM-CAT-007` |

  | `commerce.merchandise.bulk` | `CAP-COM-CAT-007` |

  | `commerce.product-categories.read` | `CAP-COM-CAT-005` |

  | `commerce.product-categories.create` | `CAP-COM-CAT-005` |

  | `commerce.product-categories.update` | `CAP-COM-CAT-005` |

  | `commerce.product-categories.delete` | `CAP-COM-CAT-005` |

  | `commerce.product-categories.bulk` | `CAP-COM-CAT-005` |

  | `commerce.product-listings.read` | `CAP-COM-CAT-006` |

  | `commerce.product-listings.create` | `CAP-COM-CAT-006` |

  | `commerce.product-listings.update` | `CAP-COM-CAT-006` |

  | `commerce.product-listings.delete` | `CAP-COM-CAT-006` |

  | `commerce.product-listings.bulk` | `CAP-COM-CAT-006` |

  | `commerce.recommendation-journeys.read` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-journeys.create` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-journeys.update` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-journeys.delete` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-journeys.bulk` | `CAP-COM-CAT-019` (bound to no
  route) |

  | `commerce.recommendation-rules.read` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-rules.create` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-rules.update` | `CAP-COM-CAT-019` |

  | `commerce.recommendation-rules.delete` | `CAP-COM-CAT-019` (bound to no
  route) |

  | `commerce.recommendation-rules.bulk` | `CAP-COM-CAT-019` (bound to no route)
  |

  | `commerce.recommendation-rules.activate` | `CAP-COM-CAT-019` |

  | `commerce.storefront.read` | `CAP-COM-CAT-008` |

  | `commerce.downloads.read` | `CAP-COM-CAT-009` |

  | `commerce.price-quotes.read` | `CAP-COM-CAT-013` |

  | `commerce.promotions.read` | `CAP-COM-CAT-014`, `CAP-COM-CAT-015`,
  `CAP-COM-CAT-017`, `CAP-COM-CAT-018` |

  | `commerce.promotions.manage` | `CAP-COM-CAT-014`, `CAP-COM-CAT-015` |

  | `commerce.promotions.activate` | `CAP-COM-CAT-014` |

  | `commerce.promotions.override` | `CAP-COM-CAT-017` |

  | `commerce.recommendation-placements.read` | `CAP-COM-CAT-019` |

  | `commerce.offers.read` | `CAP-COM-CAT-020` |

  | `commerce.offers.respond` | `CAP-COM-CAT-020` |


  ### Service spec file ownership


  | Spec file (under services-commerce modules/) | Capabilities |

  |---|---|

  | `catalog/tests/e2e/catalog-security.e2e.spec.js` | `CAP-COM-CAT-005`,
  `CAP-COM-CAT-006`, `CAP-COM-CAT-008` |

  | `catalog/tests/e2e/downloads.e2e.spec.js` | `CAP-COM-CAT-009`,
  `CAP-COM-CAT-006` |

  | `catalog/tests/e2e/product-categories.e2e.spec.js` | `CAP-COM-CAT-005` |

  | `catalog/tests/e2e/product-listings.e2e.spec.js` | `CAP-COM-CAT-006` |

  | `catalog/tests/e2e/storefront.e2e.spec.js` | `CAP-COM-CAT-008` |

  | `catalog/tests/integration/db/catalog-tables.table.integration.spec.js` |
  `CAP-COM-CAT-005`, `CAP-COM-CAT-006` |

  |
  `catalog/tests/integration/services/assets/catalog-assets.integration.spec.js`
  | `CAP-COM-CAT-003`, `CAP-COM-CAT-005`, `CAP-COM-CAT-006` |

  |
  `catalog/tests/integration/services/persistence/product-categories.integration.spec.js`
  | `CAP-COM-CAT-005` |

  |
  `catalog/tests/integration/services/persistence/product-categories.queries.integration.spec.js`
  | `CAP-COM-CAT-005` |

  |
  `catalog/tests/integration/services/persistence/product-listings.integration.spec.js`
  | `CAP-COM-CAT-006` |

  |
  `catalog/tests/integration/services/persistence/product-listings.queries.integration.spec.js`
  | `CAP-COM-CAT-006` |

  |
  `catalog/tests/integration/services/storefront/storefront-listings.integration.spec.js`
  | `CAP-COM-CAT-008` |

  |
  `catalog/tests/integration/services/storefront/storefront-listings.queries.integration.spec.js`
  | `CAP-COM-CAT-008` |

  | `catalog/tests/unit/api/product-listing-download-rules.spec.js` |
  `CAP-COM-CAT-009`, `CAP-COM-CAT-006` |

  | `catalog/tests/unit/ports/purchase-bindings.spec.js` | `CAP-COM-CAT-008` |

  | `catalog/tests/unit/storefront/storefront-availability.spec.js` |
  `CAP-COM-CAT-008` |

  | `catalog/tests/unit/storefront/storefront-visibility.spec.js` |
  `CAP-COM-CAT-008` |

  | `configuration/tests/e2e/configuration-security.e2e.spec.js` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002`, `CAP-COM-CAT-003`, `CAP-COM-CAT-004` |

  | `configuration/tests/e2e/ordering-profiles.e2e.spec.js` | `CAP-COM-CAT-001`,
  `CAP-COM-CAT-002` |

  | `configuration/tests/e2e/stores.e2e.spec.js` | `CAP-COM-CAT-003` |

  | `configuration/tests/e2e/tax-zones.e2e.spec.js` | `CAP-COM-CAT-004` |

  |
  `configuration/tests/integration/db/configuration-records.table.integration.spec.js`
  | `CAP-COM-CAT-001`, `CAP-COM-CAT-002`, `CAP-COM-CAT-003` |

  | `configuration/tests/integration/db/tax-records.table.integration.spec.js` |
  `CAP-COM-CAT-004` |

  |
  `configuration/tests/integration/services/persistence/ordering-profiles.integration.spec.js`
  | `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  |
  `configuration/tests/integration/services/persistence/ordering-profiles.queries.integration.spec.js`
  | `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  |
  `configuration/tests/integration/services/persistence/stores.integration.spec.js`
  | `CAP-COM-CAT-003` |

  |
  `configuration/tests/integration/services/persistence/stores.queries.integration.spec.js`
  | `CAP-COM-CAT-003` |

  |
  `configuration/tests/integration/services/persistence/tax-zones.integration.spec.js`
  | `CAP-COM-CAT-004` |

  |
  `configuration/tests/integration/services/persistence/tax-zones.queries.integration.spec.js`
  | `CAP-COM-CAT-004` |

  | `configuration/tests/unit/api/blank-ordering-profile-ids.spec.js` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  | `configuration/tests/unit/api/blank-tax-zone-values.spec.js` |
  `CAP-COM-CAT-004` |

  | `configuration/tests/unit/api/configuration-ranges.spec.js` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-004` |

  | `configuration/tests/unit/api/country-codes.spec.js` | `CAP-COM-CAT-004` |

  |
  `configuration/tests/unit/persistence/ordering-profile-merchant-account.spec.js`
  | `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  | `configuration/tests/unit/persistence/ordering-profile-rules.spec.js` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002` |

  | `merchandise/tests/e2e/merchandise.e2e.spec.js` | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/db/accounting-product-functions.integration.spec.js`
  | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/db/merchandise-tables.table.integration.spec.js`
  | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/services/participant/backorder-race.integration.spec.js`
  | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/services/participant/merchandise-participant.integration.spec.js`
  | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/services/persistence/merchandise-extensions.queries.integration.spec.js`
  | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/services/persistence/merchandise-products.queries.integration.spec.js`
  | `CAP-COM-CAT-007` |

  |
  `merchandise/tests/integration/services/persistence/merchandise.integration.spec.js`
  | `CAP-COM-CAT-007` |

  | `merchandise/tests/unit/participant/merchandise-availability.spec.js` |
  `CAP-COM-CAT-007` |

  | `merchandise/tests/unit/participant/merchandise-payload.spec.js` |
  `CAP-COM-CAT-007` |

  | `merchandise/tests/unit/participant/merchandise-registration.spec.js` |
  `CAP-COM-CAT-007` |

  | `pricing/tests/e2e/member-pricing-scenarios.e2e.spec.js` | `CAP-COM-CAT-013`
  |

  | `pricing/tests/e2e/price-quote-public-display.e2e.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/e2e/price-quote-public-sale.e2e.spec.js` | `CAP-COM-CAT-013`
  |

  | `pricing/tests/e2e/price-quote-staff-form.e2e.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/e2e/price-quotes-security.e2e.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/e2e/price-quotes.e2e.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/e2e/pricing-audiences.e2e.spec.js` | `CAP-COM-CAT-010` |

  | `pricing/tests/e2e/pricing-configuration-security.e2e.spec.js` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002`, `CAP-COM-CAT-003`, `CAP-COM-CAT-004` |

  | `pricing/tests/e2e/pricing-schedules.e2e.spec.js` | `CAP-COM-CAT-011` |

  | `pricing/tests/e2e/product-extensions.e2e.spec.js` | `CAP-COM-CAT-012` |

  | `pricing/tests/e2e/product-purchasing-settings.e2e.spec.js` |
  `CAP-COM-CAT-012` |

  |
  `pricing/tests/integration/db/member-pricing-tables.table.integration.spec.js`
  | `CAP-COM-CAT-010`, `CAP-COM-CAT-011`, `CAP-COM-CAT-012` |

  | `pricing/tests/integration/db/pricing-records.table.integration.spec.js` |
  `CAP-COM-CAT-012` |

  |
  `pricing/tests/integration/services/extensions/priced-with-extensions.integration.spec.js`
  | `CAP-COM-CAT-013` |

  |
  `pricing/tests/integration/services/handovers/audience-handover-realization.integration.spec.js`
  | `CAP-COM-CAT-010` |

  |
  `pricing/tests/integration/services/inputs/pricing-inputs.integration.spec.js`
  | `CAP-COM-CAT-013` |

  |
  `pricing/tests/integration/services/persistence/catalog-products.queries.integration.spec.js`
  | `CAP-COM-CAT-013` |

  |
  `pricing/tests/integration/services/persistence/exchange-rates.queries.integration.spec.js`
  | `CAP-COM-CAT-013` |

  |
  `pricing/tests/integration/services/persistence/pricing-audiences.integration.spec.js`
  | `CAP-COM-CAT-010` |

  |
  `pricing/tests/integration/services/persistence/pricing-audiences.queries.integration.spec.js`
  | `CAP-COM-CAT-010` |

  |
  `pricing/tests/integration/services/persistence/pricing-schedules.integration.spec.js`
  | `CAP-COM-CAT-011` |

  |
  `pricing/tests/integration/services/persistence/pricing-schedules.queries.integration.spec.js`
  | `CAP-COM-CAT-011` |

  |
  `pricing/tests/integration/services/persistence/product-extensions.integration.spec.js`
  | `CAP-COM-CAT-012` |

  |
  `pricing/tests/integration/services/persistence/product-extensions.queries.integration.spec.js`
  | `CAP-COM-CAT-012` |

  |
  `pricing/tests/integration/services/persistence/product-purchasing-settings.integration.spec.js`
  | `CAP-COM-CAT-012` |

  |
  `pricing/tests/integration/services/persistence/product-purchasing-settings.queries.integration.spec.js`
  | `CAP-COM-CAT-012` |

  |
  `pricing/tests/integration/services/placement/audience-settlement.integration.spec.js`
  | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/eligibility/commerce-eligibility-port.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/eligibility/fixture-eligibility-port.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/eligibility/http-eligibility-transport.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/eligibility/platform-evaluate-port.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/eligibility/platform-evaluate-request.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/eligibility/platform-purchase-bindings.spec.js` |
  `CAP-COM-CAT-008` |

  | `pricing/tests/unit/eligibility/service-eligibility-transport.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/engine.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/price-grid.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/pricing-subject.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/quote-tolerance.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/rounding.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/standard-basis.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-1-entered-amount.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-2-audience-resolution.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-3-base-price.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-4-participant-adjustments.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-6-bulk-rules.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-7-product-extension.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-8-rounding.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/engine/step-9-order-extension.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/extensions/commerce-extensions.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/extensions/extension-point-declarations.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/extensions/extension-point-examples.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/extensions/extensions-manifest-fragment.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/extensions/failure-policy.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/extensions/reference-handlers.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/inputs/evaluate-planned.spec.js` | `CAP-COM-CAT-013` |

  | `pricing/tests/unit/inputs/pricing-schedule-boundaries.spec.js` |
  `CAP-COM-CAT-011` |

  | `pricing/tests/unit/membership/fixture-party-ids.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/membership/membership-facts-port.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/participants/provisional-audiences.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/participants/registry-participant-adviser.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/persistence/member-pricing-problems.spec.js` |
  `CAP-COM-CAT-013` |

  | `pricing/tests/unit/tax/accounting-tax.spec.js` | `CAP-COM-CAT-004` |

  | `pricing/tests/unit/tax/commerce-tax-port.spec.js` | `CAP-COM-CAT-004` |

  | `pricing/tests/unit/tax/zone-table-tax.spec.js` | `CAP-COM-CAT-004` |

  | `pricing/tests/unit/tax/zone-tax-calculation.spec.js` | `CAP-COM-CAT-004` |

  | `promotions/tests/e2e/promotion-code-issuances.e2e.spec.js` |
  `CAP-COM-CAT-015` |

  | `promotions/tests/e2e/promotion-codes.e2e.spec.js` | `CAP-COM-CAT-015` |

  | `promotions/tests/e2e/promotion-previews.e2e.spec.js` | `CAP-COM-CAT-018` |

  | `promotions/tests/e2e/promotion-redemptions.e2e.spec.js` | `CAP-COM-CAT-017`
  |

  | `promotions/tests/e2e/promotions-security.e2e.spec.js` | `CAP-COM-CAT-014` |

  | `promotions/tests/e2e/promotions.e2e.spec.js` | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/db/promotion-parts-conversion.integration.spec.js`
  | `CAP-COM-CAT-014` |

  | `promotions/tests/integration/db/promotions.table.integration.spec.js` |
  `CAP-COM-CAT-014` |

  | `promotions/tests/integration/db/redemptions.table.integration.spec.js` |
  `CAP-COM-CAT-017` |

  |
  `promotions/tests/integration/services/areas/merchandise-provider.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/checkout/checkout-candidates.queries.integration.spec.js`
  | `CAP-COM-CAT-016` |

  |
  `promotions/tests/integration/services/persistence/checkout-promotions.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/persistence/checkout-promotions.queries.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/persistence/promotion-code-issuances.integration.spec.js`
  | `CAP-COM-CAT-015` |

  |
  `promotions/tests/integration/services/persistence/promotion-code-issuances.queries.integration.spec.js`
  | `CAP-COM-CAT-015` |

  |
  `promotions/tests/integration/services/persistence/promotion-codes.integration.spec.js`
  | `CAP-COM-CAT-015` |

  |
  `promotions/tests/integration/services/persistence/promotion-codes.queries.integration.spec.js`
  | `CAP-COM-CAT-015` |

  |
  `promotions/tests/integration/services/persistence/promotion-parts.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/persistence/promotion-parts.queries.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/persistence/promotion-redemptions.integration.spec.js`
  | `CAP-COM-CAT-017` |

  |
  `promotions/tests/integration/services/persistence/promotion-redemptions.queries.integration.spec.js`
  | `CAP-COM-CAT-017` |

  |
  `promotions/tests/integration/services/persistence/promotion-statistics.queries.integration.spec.js`
  | `CAP-COM-CAT-017` |

  |
  `promotions/tests/integration/services/persistence/promotions.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/persistence/promotions.queries.integration.spec.js`
  | `CAP-COM-CAT-014` |

  |
  `promotions/tests/integration/services/persistence/redemption-concurrency.integration.spec.js`
  | `CAP-COM-CAT-017` |

  |
  `promotions/tests/integration/services/previews/promotion-previews.integration.spec.js`
  | `CAP-COM-CAT-018` |

  | `promotions/tests/unit/api/promotion-previews-mapper.spec.js` |
  `CAP-COM-CAT-018` |

  | `promotions/tests/unit/api/promotions-api-mapper.spec.js` |
  `CAP-COM-CAT-014` |

  | `promotions/tests/unit/areas/area-registry.spec.js` | `CAP-COM-CAT-014` |

  | `promotions/tests/unit/eligibility/promotion-eligibility.spec.js` |
  `CAP-COM-CAT-016` |

  | `promotions/tests/unit/issuance/code-template.spec.js` | `CAP-COM-CAT-015` |

  | `promotions/tests/unit/issuance/issuance-job.spec.js` | `CAP-COM-CAT-015` |

  | `promotions/tests/unit/issuance/issuance-request-csv.spec.js` |
  `CAP-COM-CAT-015` |

  | `promotions/tests/unit/pricing/allocation.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/alternatives.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/apply-promotions.spec.js` | `CAP-COM-CAT-016`
  |

  | `promotions/tests/unit/pricing/benefits.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/code-charset.spec.js` | `CAP-COM-CAT-015` |

  | `promotions/tests/unit/pricing/code-normalization.spec.js` |
  `CAP-COM-CAT-015` |

  | `promotions/tests/unit/pricing/parts.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/prior-discounts.spec.js` | `CAP-COM-CAT-016`
  |

  | `promotions/tests/unit/pricing/promotion-shape.spec.js` | `CAP-COM-CAT-014`
  |

  | `promotions/tests/unit/pricing/purity.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/reason-codes.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/scope.spec.js` | `CAP-COM-CAT-014` |

  | `promotions/tests/unit/pricing/shipping-offers.spec.js` | `CAP-COM-CAT-016`
  |

  | `promotions/tests/unit/pricing/stacking.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/pricing/validation.spec.js` | `CAP-COM-CAT-016` |

  | `promotions/tests/unit/promotions/promotion-parts-rules.spec.js` |
  `CAP-COM-CAT-014` |

  | `promotions/tests/unit/promotions/promotion-rules.spec.js` |
  `CAP-COM-CAT-014` |

  | `recommendations/tests/e2e/offers.e2e.spec.js` | `CAP-COM-CAT-020` |

  | `recommendations/tests/e2e/recommendation-rules.e2e.spec.js` |
  `CAP-COM-CAT-019` |

  | `recommendations/tests/e2e/recommendations-security.e2e.spec.js` |
  `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/db/recommendations-tables.table.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/offer-interactions.integration.spec.js`
  | `CAP-COM-CAT-020` |

  |
  `recommendations/tests/integration/services/persistence/offer-interactions.queries.integration.spec.js`
  | `CAP-COM-CAT-020` |

  |
  `recommendations/tests/integration/services/persistence/offer-presentations.integration.spec.js`
  | `CAP-COM-CAT-020` |

  |
  `recommendations/tests/integration/services/persistence/offer-presentations.queries.integration.spec.js`
  | `CAP-COM-CAT-020` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-journeys.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-journeys.queries.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-performances.queries.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-placements.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-placements.queries.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-rules.integration.spec.js`
  | `CAP-COM-CAT-019` |

  |
  `recommendations/tests/integration/services/persistence/recommendation-rules.queries.integration.spec.js`
  | `CAP-COM-CAT-019` |

  | `recommendations/tests/unit/holdout.spec.js` | `CAP-COM-CAT-020` |

  | `recommendations/tests/unit/messages.spec.js` | `CAP-COM-CAT-019` |

  | `recommendations/tests/unit/recommendations-manifest.spec.js` |
  `CAP-COM-CAT-019` |

  | `recommendations/tests/unit/rule-rules.spec.js` | `CAP-COM-CAT-019` |

  | `recommendations/tests/unit/store-placements.spec.js` | `CAP-COM-CAT-019` |


  ### Background Processing


  | Resource | Capabilities |

  |---|---|

  | scheduled catalog asset sweep, work queue and dead-letter queue |
  `CAP-COM-CAT-003`, `CAP-COM-CAT-005`, `CAP-COM-CAT-006` |

  | the promotion code issuance worker (invoked by the issuance request) |
  `CAP-COM-CAT-015` |



  ### Console Test Mapping


  | Pinned File | Capability Ownership | Acceptance Binding |

  |---|---|---|

  | `components/commerce/__tests__/label-colons.test.tsx` | `MOD-COM-CAT`
  (shared presentation) | not bound: FND-COM-CAT-026 |

  | `components/commerce/__tests__/no-placeholder-text.test.ts` | `MOD-COM-CAT`
  (shared presentation) | not bound: FND-COM-CAT-026 |

  | `components/commerce/__tests__/permission-gating.test.tsx` | `MOD-COM-CAT`
  (shared presentation) | bound |

  | `components/commerce/audiences/__tests__/audience-rule-fields.test.tsx` |
  `CAP-COM-CAT-010` | not bound: FND-COM-CAT-026 |

  | `components/commerce/audiences/__tests__/pricing-audience-pages.test.tsx` |
  `CAP-COM-CAT-010` | not bound: FND-COM-CAT-026 |

  | `components/commerce/catalog/__tests__/listing-draft.test.ts` |
  `CAP-COM-CAT-005`, `CAP-COM-CAT-006` | not bound: FND-COM-CAT-026 |

  | `components/commerce/catalog/__tests__/option-picker.test.tsx` |
  `CAP-COM-CAT-005`, `CAP-COM-CAT-006` | not bound: FND-COM-CAT-026 |

  | `components/commerce/catalog/__tests__/upload-controls.test.tsx` |
  `CAP-COM-CAT-005`, `CAP-COM-CAT-006` | not bound: FND-COM-CAT-026 |

  | `components/commerce/merchandise/__tests__/merchandise-screens.test.tsx` |
  `CAP-COM-CAT-006`, `CAP-COM-CAT-007` | not bound: FND-COM-CAT-026 |

  |
  `components/commerce/merchandise/__tests__/merchandise-storefront-slug.test.tsx`
  | `CAP-COM-CAT-006`, `CAP-COM-CAT-007` | not bound: FND-COM-CAT-026 |

  |
  `components/commerce/ordering-profiles/__tests__/checkout-policy-pages.test.tsx`
  | `CAP-COM-CAT-001`, `CAP-COM-CAT-002` | not bound: FND-COM-CAT-026 |

  | `components/commerce/pricing-schedules/__tests__/period-row.test.tsx` |
  `CAP-COM-CAT-011` | not bound: FND-COM-CAT-026 |

  |
  `components/commerce/pricing-schedules/__tests__/price-schedule-pages.test.tsx`
  | `CAP-COM-CAT-011` | not bound: FND-COM-CAT-026 |

  | `components/commerce/pricing/__tests__/add-column-picker.test.tsx` |
  `CAP-COM-CAT-012`, `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `components/commerce/pricing/__tests__/pricing-crumbs.test.ts` |
  `CAP-COM-CAT-012`, `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  |
  `components/commerce/pricing/__tests__/purchasing-settings-schedule.test.tsx`
  | `CAP-COM-CAT-012`, `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/area-criteria-form.test.tsx` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/automatic-claim.test.tsx` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/cart-line-price.test.ts` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/code-field.test.tsx` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/codes-screens.test.tsx` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/generate-codes-form.test.ts` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/promotion-pages.test.tsx` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/promotions/__tests__/row-actions.test.tsx` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `components/commerce/stores/__tests__/store-pages.test.tsx` |
  `CAP-COM-CAT-003` | not bound: FND-COM-CAT-026 |

  | `e2e/mock/commerce-checkout-policies.mock.spec.ts` | `CAP-COM-CAT-001`,
  `CAP-COM-CAT-002` | bound |

  | `e2e/mock/commerce-view-edit.mock.spec.ts` | `CAP-COM-CAT-003`,
  `CAP-COM-CAT-010` | bound |

  | `e2e/mock/merchandise.mock.spec.ts` | `CAP-COM-CAT-006`, `CAP-COM-CAT-007` |
  bound |

  | `e2e/mock/promotions.mock.spec.ts` | `CAP-COM-CAT-014`, `CAP-COM-CAT-015` |
  bound |

  | `lib/commerce/audiences/__tests__/live.test.ts` | `CAP-COM-CAT-010` | not
  bound: FND-COM-CAT-026 |

  | `lib/commerce/audiences/__tests__/rules.test.ts` | `CAP-COM-CAT-010` | not
  bound: FND-COM-CAT-026 |

  | `lib/commerce/catalog/__tests__/categories.test.ts` | `CAP-COM-CAT-005`,
  `CAP-COM-CAT-006` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/catalog/__tests__/live.test.ts` | `CAP-COM-CAT-005`,
  `CAP-COM-CAT-006` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/catalog/__tests__/rules.test.ts` | `CAP-COM-CAT-005`,
  `CAP-COM-CAT-006` | bound |

  | `lib/commerce/merchandise/__tests__/live.test.ts` | `CAP-COM-CAT-006`,
  `CAP-COM-CAT-007` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/merchandise/__tests__/permissions.test.ts` |
  `CAP-COM-CAT-006`, `CAP-COM-CAT-007` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/ordering-profiles/__tests__/adapters.test.ts` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/ordering-profiles/__tests__/rules.test.ts` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/ordering-profiles/__tests__/source.test.ts` |
  `CAP-COM-CAT-001`, `CAP-COM-CAT-002` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing-schedules/__tests__/adapters.test.ts` |
  `CAP-COM-CAT-011` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing-schedules/__tests__/rules.test.ts` | `CAP-COM-CAT-011`
  | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/access.test.ts` | `CAP-COM-CAT-012`,
  `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/columns.test.ts` | `CAP-COM-CAT-012`,
  `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/live.test.ts` | `CAP-COM-CAT-012`,
  `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/preview-source.test.ts` | `CAP-COM-CAT-012`,
  `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/preview-target.test.ts` | `CAP-COM-CAT-012`,
  `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/purchasing-settings.test.ts` |
  `CAP-COM-CAT-012`, `CAP-COM-CAT-013` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/pricing/__tests__/rules.test.ts` | `CAP-COM-CAT-012`,
  `CAP-COM-CAT-013` | bound |

  | `lib/commerce/promotions/__tests__/live.test.ts` | `CAP-COM-CAT-014`,
  `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`, `CAP-COM-CAT-018` |
  not bound: FND-COM-CAT-026 |

  | `lib/commerce/promotions/__tests__/mock-codes.test.ts` | `CAP-COM-CAT-014`,
  `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`, `CAP-COM-CAT-018` |
  not bound: FND-COM-CAT-026 |

  | `lib/commerce/promotions/__tests__/mock-order-uses.test.ts` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/promotions/__tests__/mock.test.ts` | `CAP-COM-CAT-014`,
  `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`, `CAP-COM-CAT-018` |
  not bound: FND-COM-CAT-026 |

  | `lib/commerce/promotions/__tests__/preview-selling.test.ts` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/promotions/__tests__/rules.test.ts` | `CAP-COM-CAT-014`,
  `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`, `CAP-COM-CAT-018` |
  not bound: FND-COM-CAT-026 |

  | `lib/commerce/promotions/__tests__/test-panel-subjects.test.ts` |
  `CAP-COM-CAT-014`, `CAP-COM-CAT-015`, `CAP-COM-CAT-016`, `CAP-COM-CAT-017`,
  `CAP-COM-CAT-018` | not bound: FND-COM-CAT-026 |

  | `lib/commerce/stores/__tests__/adapters.test.ts` | `CAP-COM-CAT-003` | not
  bound: FND-COM-CAT-026 |

  | `lib/commerce/stores/__tests__/rules.test.ts` | `CAP-COM-CAT-003` | not
  bound: FND-COM-CAT-026 |

  | `lib/commerce/stores/__tests__/source.test.ts` | `CAP-COM-CAT-003` | not
  bound: FND-COM-CAT-026 |
---

# Catalog and Selling Configuration

## Purpose

Staff prepare the offering and financial context Commerce needs to sell products. The module connects catalog presentation, pricing, campaigns and suggestions around products owned by Accounting. Its proposed contracts distinguish implemented behaviour from decision-backed product intent.

## Boundary

Commerce owns selling configuration and assessment in this layer. Accounting retains products and financial transactions; orders retains checkouts, placed sales and grants; fulfilment retains physical stock and delivery. Eligibility and application providers supply qualification and item-specific answers. Hosted configuration screens belong here because they administer these records.

## Features

| Feature | Concepts | Capabilities | Journeys |
|---|---|---|---|
| Sale Configuration | 2 | 4 | 1 |
| Catalog Presentation | 1 | 5 | 1 |
| Product Pricing | 1 | 4 | 1 |
| Marketing Benefits | 1 | 5 | 2 |
| Contextual Suggestions | 1 | 2 | 1 |

## Capabilities

| Id | Outcome | Intent |
|---|---|---|
| `CAP-COM-CAT-001` | Configure reusable sale-processing policies | proposed |
| `CAP-COM-CAT-002` | Select the policy governing a sale | proposed |
| `CAP-COM-CAT-003` | Configure a store’s offered assortment | proposed |
| `CAP-COM-CAT-004` | Calculate tax from buyer geography | proposed |
| `CAP-COM-CAT-005` | Organize product shelves | proposed |
| `CAP-COM-CAT-006` | Prepare and publish product presentations | proposed |
| `CAP-COM-CAT-007` | Manage merchandise selections and sale availability | proposed |
| `CAP-COM-CAT-008` | Present the store’s available products | proposed |
| `CAP-COM-CAT-009` | Retrieve purchased digital files | proposed |
| `CAP-COM-CAT-010` | Configure qualifying price audiences | proposed |
| `CAP-COM-CAT-011` | Maintain dated pricing periods | proposed |
| `CAP-COM-CAT-012` | Configure product purchasing and price adjustments | proposed |
| `CAP-COM-CAT-013` | Calculate and explain a buyer’s item price | proposed |
| `CAP-COM-CAT-014` | Prepare and control a promotion’s lifecycle | proposed |
| `CAP-COM-CAT-015` | Issue promotion codes with controlled access | proposed |
| `CAP-COM-CAT-016` | Choose the best permitted promotional result | proposed |
| `CAP-COM-CAT-017` | Retain and review promotion usage | proposed |
| `CAP-COM-CAT-018` | Preview a promotion against a sample cart | proposed |
| `CAP-COM-CAT-019` | Configure recommendation rules and placements | proposed |
| `CAP-COM-CAT-020` | Present offers and process buyer responses | proposed |

## Journeys

| Id | Outcome | Browser Policy |
|---|---|---|
| `JNY-COM-CAT-001` | An administrator prepares a store for selling | required |
| `JNY-COM-CAT-002` | An administrator configures audience prices and checks a preview | required |
| `JNY-COM-CAT-003` | A visitor browses the public store offering | optional |
| `JNY-COM-CAT-004` | A coordinator prepares codes and an administrator launches the offer | required |
| `JNY-COM-CAT-005` | A buyer receives a valid discount and staff account for its use | required |
| `JNY-COM-CAT-006` | A member accepts a contextual cart suggestion | none |
