---
id: MOD-ACC-PRD
title: Products
product_area: accounting
module: products
revision: 2
status: draft
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repositories:
  - name: services-accounting
    paths:
      - modules/products
      - aws/accounting.service.ts
      - aws/accounting.metadata.ts
      - aws/accounting.export-datasets.ts
      - docs/accounting/products.md
      - docs/architecture/accounting-2.0
      - docs/migrations/accounting-modernization/products-shared/README.md
      - docs/migrations/accounting-modernization/products-a12-a13/README.md
      - docs/milestones/ACCT-M1-books-and-invoices.md
      - docs/milestones/plans/ACCT-M1-plan.md
      - docs/milestones/plans/ACCT-realignment-2026-10-22.md
  - name: react-console
    paths:
      - 'app/(console)/console/[tenantId]/configuration/[module]/[area]'
      - components/configuration/area-route.tsx
      - lib/configuration/areas.ts
      - components/accounting-config/products
      - components/configuration/tax/product-type-tax-classes-panel.tsx
      - lib/accounting-config
      - lib/accounting/configuration
      - lib/authz/backend-aliases.ts
      - acceptance/accounting/inventory
      - acceptance/accounting/journeys/products
      - acceptance/accounting/playwright/journeys/products
      - e2e/dev/products-common-walk.dev.spec.ts
      - e2e/dev/products-screens-walk.dev.spec.ts
      - e2e/dev/accounting-configuration-walk.dev.spec.ts
      - e2e/mock/accounting-product-common.mock.spec.ts
      - e2e/mock/accounting-products.mock.spec.ts
      - e2e/mock/accounting-products-list.mock.spec.ts
      - e2e/mock/accounting-tax.mock.spec.ts
      - e2e/mock/eligibility-card.mock.spec.ts
owns:
  - The shared product catalogue and product-kind registry.
  - Product prices and migrated special-price handovers.
  - Product selling settings and their owned child records.
  - 'Product accounting setups and their owned deferral, split and inter-entity records.'
  - Existing product-kind tax defaults pending the approved transfer.
  - Product metadata and export declarations.
  - Database product-saving and retirement functions for domain applications.
does_not_own:
  - record: >-
      Business units, their currencies, exchange rates and pricing defaults; GL accounts, departments,
      accounting projects, merchant accounts; tax classes
    owner: MOD-ACC-BKS
  - record: >-
      Invoice, credit memo, debit memo and write-off lines that name products and freeze their price and tax
      class
    owner: MOD-ACC-TRX
  - record: 'Posting, including the fallback to the business unit’s default accounts for a product without a setup'
    owner: MOD-ACC-BAT
  - record: Installment schedules and their lines that name products
    owner: MOD-BIL-BIL
  - record: >-
      Pricing audiences, pricing schedules, price evaluation, catalog listings, merchandise, and the product
      pricing page under a product
    owner: MOD-COM-CAT
  - record: >-
      Orders responsible for applying quantity discounts and purchase limits, create the tasks and send the
      confirmation e-mail
    owner: MOD-COM-ORD
  - record: 'Tax determination, and after the transfer tax classes, the default per kind and each product’s class'
    owner: Commerce (decision D-T2 of 2026-10-22; no tax module registered yet)
  - record: Membership packages and chapter dues records that extend a product
    owner: MOD-MBR-STR
  - record: 'CRM task types, task queues and the tasks themselves'
    owner: MOD-CRM-ACT
  - record: 'Communication templates, including a product’s own confirmation template, and sending'
    owner: MOD-PFM-NOT
  - record: 'Object registration, fields, layouts and custom fields'
    owner: MOD-PFM-MTD
  - record: 'Roles, permission evaluation and application access'
    owner: MOD-PFM-SEC
  - record: The purchasing eligibility card shown on the product form
    owner: MOD-PFM-ELG
  - record: Workspace data export and purge machinery (the products dataset is this module’s)
    owner: MOD-ACC-BKS (maintenance) and MOD-PFM-TNL
  - record: 'Console shell, navigation and the Configuration area chooser'
    owner: MOD-PFM-CSH
hosted_screens:
  - route: '/console/{tenantId}/configuration/accounting/products'
    purpose: Browse and administer the product catalogue.
  - route: '/console/{tenantId}/configuration/accounting/products/new?type={productTypeId}'
    purpose: Enter a new product.
  - route: '/console/{tenantId}/configuration/accounting/products/{id}'
    purpose: Inspect and edit a product according to granted access.
  - route: '/console/{tenantId}/configuration/accounting/taxClasses'
    purpose: Maintain existing product-kind tax defaults.
supersedes:
  - >-
    react-console acceptance inventory area PRD (capabilities CAP-ACC-PRD-001 to 022, rules RUL-ACC-PRD-001 to
    054)
  - react-console acceptance journeys area products (ACT-ACC-0100 to 0151)
evidence:
  - >-
    services-accounting at f47cb263875bbc0c5640fba7dae6785ec32695f8: products routes, schemas, mapper,
    persistence, rules, confirmation workflow, ports, tables, metadata, exports and tests; product permissions
    and registrations; products guide, modernization records and cited milestone decisions. Dependency records
    are read only where cited.
  - >-
    react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: Configuration routes and areas, product
    components and libraries, tax-default panel, permission aliases, Accounting acceptance inventories,
    product journey records and browser specs.
testing_artifacts:
  capability_specifications:
    - id: ATS-ACC-PRD-001
      path: design/tests/ATS-ACC-PRD-001-know-which-kinds-of-product-exist-and-what-each-can-do.md
    - id: ATS-ACC-PRD-002
      path: design/tests/ATS-ACC-PRD-002-establish-a-product-under-a-stable-identity.md
    - id: ATS-ACC-PRD-003
      path: design/tests/ATS-ACC-PRD-003-find-and-read-products.md
    - id: ATS-ACC-PRD-004
      path: design/tests/ATS-ACC-PRD-004-change-a-product-without-losing-another-person-s-edit.md
    - id: ATS-ACC-PRD-005
      path: design/tests/ATS-ACC-PRD-005-take-a-product-out-of-sale-and-bring-it-back.md
    - id: ATS-ACC-PRD-006
      path: design/tests/ATS-ACC-PRD-006-remove-a-product-nobody-depends-on.md
    - id: ATS-ACC-PRD-007
      path: design/tests/ATS-ACC-PRD-007-let-each-application-write-only-its-own-kinds-of-product.md
    - id: ATS-ACC-PRD-008
      path: design/tests/ATS-ACC-PRD-008-price-a-product-for-each-audience-period-and-currency.md
    - id: ATS-ACC-PRD-009
      path: design/tests/ATS-ACC-PRD-009-hand-rhythm-1-0-special-prices-over-to-commerce.md
    - id: ATS-ACC-PRD-010
      path: design/tests/ATS-ACC-PRD-010-offer-discounts-for-buying-in-quantity.md
    - id: ATS-ACC-PRD-011
      path: design/tests/ATS-ACC-PRD-011-sell-products-together-as-a-bundle.md
    - id: ATS-ACC-PRD-012
      path: design/tests/ATS-ACC-PRD-012-limit-how-much-one-customer-may-buy.md
    - id: ATS-ACC-PRD-013
      path: design/tests/ATS-ACC-PRD-013-create-follow-up-tasks-when-a-product-is-bought.md
    - id: ATS-ACC-PRD-014
      path: design/tests/ATS-ACC-PRD-014-send-the-buyer-a-confirmation-e-mail.md
    - id: ATS-ACC-PRD-015
      path: design/tests/ATS-ACC-PRD-015-decide-where-a-product-s-money-goes.md
    - id: ATS-ACC-PRD-016
      path: design/tests/ATS-ACC-PRD-016-recognise-a-product-s-revenue-over-time-and-share-it.md
    - id: ATS-ACC-PRD-017
      path: >-
        design/tests/ATS-ACC-PRD-017-find-products-still-lacking-an-accounting-setup-and-set-many-up-at-once.md
    - id: ATS-ACC-PRD-018
      path: design/tests/ATS-ACC-PRD-018-set-the-default-tax-class-for-each-kind-of-product.md
    - id: ATS-ACC-PRD-019
      path: design/tests/ATS-ACC-PRD-019-carry-the-product-catalogue-into-a-workspace-export.md
  feature_suites:
    - id: FAS-ACC-PRD-01
      path: planning/acceptance/FAS-ACC-PRD-01-product-catalogue.md
    - id: FAS-ACC-PRD-02
      path: planning/acceptance/FAS-ACC-PRD-02-product-pricing.md
    - id: FAS-ACC-PRD-03
      path: planning/acceptance/FAS-ACC-PRD-03-selling-settings.md
    - id: FAS-ACC-PRD-04
      path: planning/acceptance/FAS-ACC-PRD-04-accounting-configuration.md
  executable_suites:
    - id: TST-ACC-PRD-001
      path: implementation/tests/TST-ACC-PRD-001-act-acc-0100.md
    - id: TST-ACC-PRD-002
      path: implementation/tests/TST-ACC-PRD-002-act-acc-0102.md
    - id: TST-ACC-PRD-003
      path: implementation/tests/TST-ACC-PRD-003-act-acc-0107.md
    - id: TST-ACC-PRD-004
      path: implementation/tests/TST-ACC-PRD-004-act-acc-0108.md
    - id: TST-ACC-PRD-005
      path: implementation/tests/TST-ACC-PRD-005-act-acc-0110.md
    - id: TST-ACC-PRD-006
      path: implementation/tests/TST-ACC-PRD-006-act-acc-0112.md
    - id: TST-ACC-PRD-007
      path: implementation/tests/TST-ACC-PRD-007-act-acc-0114.md
    - id: TST-ACC-PRD-008
      path: implementation/tests/TST-ACC-PRD-008-act-acc-0116.md
    - id: TST-ACC-PRD-009
      path: implementation/tests/TST-ACC-PRD-009-act-acc-0118.md
    - id: TST-ACC-PRD-010
      path: implementation/tests/TST-ACC-PRD-010-act-acc-0119.md
    - id: TST-ACC-PRD-011
      path: implementation/tests/TST-ACC-PRD-011-act-acc-0121.md
    - id: TST-ACC-PRD-012
      path: implementation/tests/TST-ACC-PRD-012-act-acc-0122.md
    - id: TST-ACC-PRD-013
      path: implementation/tests/TST-ACC-PRD-013-act-acc-0124.md
    - id: TST-ACC-PRD-014
      path: implementation/tests/TST-ACC-PRD-014-act-acc-0136.md
    - id: TST-ACC-PRD-015
      path: implementation/tests/TST-ACC-PRD-015-act-acc-0143.md
    - id: TST-ACC-PRD-016
      path: implementation/tests/TST-ACC-PRD-016-act-acc-0147.md
    - id: TST-ACC-PRD-017
      path: implementation/tests/TST-ACC-PRD-017-accounting-configuration-walk.md
    - id: TST-ACC-PRD-018
      path: implementation/tests/TST-ACC-PRD-018-products-common-walk.md
    - id: TST-ACC-PRD-019
      path: implementation/tests/TST-ACC-PRD-019-products-screens-walk.md
    - id: TST-ACC-PRD-020
      path: implementation/tests/TST-ACC-PRD-020-accounting-product-common.md
    - id: TST-ACC-PRD-021
      path: implementation/tests/TST-ACC-PRD-021-accounting-products-list.md
    - id: TST-ACC-PRD-022
      path: implementation/tests/TST-ACC-PRD-022-accounting-products.md
    - id: TST-ACC-PRD-023
      path: implementation/tests/TST-ACC-PRD-023-accounting-tax.md
    - id: TST-ACC-PRD-024
      path: implementation/tests/TST-ACC-PRD-024-eligibility-card.md
    - id: TST-ACC-PRD-025
      path: implementation/tests/TST-ACC-PRD-025-product-accounting-setups.md
    - id: TST-ACC-PRD-026
      path: implementation/tests/TST-ACC-PRD-026-product-accounting.md
    - id: TST-ACC-PRD-027
      path: implementation/tests/TST-ACC-PRD-027-product-features.md
    - id: TST-ACC-PRD-028
      path: implementation/tests/TST-ACC-PRD-028-products-security.md
    - id: TST-ACC-PRD-029
      path: implementation/tests/TST-ACC-PRD-029-products-shared-base.md
    - id: TST-ACC-PRD-030
      path: implementation/tests/TST-ACC-PRD-030-products.md
    - id: TST-ACC-PRD-031
      path: implementation/tests/TST-ACC-PRD-031-products-table.md
    - id: TST-ACC-PRD-032
      path: implementation/tests/TST-ACC-PRD-032-save-product-function.md
    - id: TST-ACC-PRD-033
      path: implementation/tests/TST-ACC-PRD-033-special-prices-a12-migration.md
    - id: TST-ACC-PRD-034
      path: implementation/tests/TST-ACC-PRD-034-communication-templates-queries.md
    - id: TST-ACC-PRD-035
      path: implementation/tests/TST-ACC-PRD-035-pricing-audiences.md
    - id: TST-ACC-PRD-036
      path: implementation/tests/TST-ACC-PRD-036-product-accounting-setups.md
    - id: TST-ACC-PRD-037
      path: implementation/tests/TST-ACC-PRD-037-product-accounting-setups-queries.md
    - id: TST-ACC-PRD-038
      path: implementation/tests/TST-ACC-PRD-038-product-types-queries.md
    - id: TST-ACC-PRD-039
      path: implementation/tests/TST-ACC-PRD-039-products-features.md
    - id: TST-ACC-PRD-040
      path: implementation/tests/TST-ACC-PRD-040-products.md
    - id: TST-ACC-PRD-041
      path: implementation/tests/TST-ACC-PRD-041-products-queries.md
    - id: TST-ACC-PRD-042
      path: implementation/tests/TST-ACC-PRD-042-products-shared-base.md
    - id: TST-ACC-PRD-043
      path: implementation/tests/TST-ACC-PRD-043-task-configurations-queries.md
    - id: TST-ACC-PRD-044
      path: implementation/tests/TST-ACC-PRD-044-products-api-mapper.md
    - id: TST-ACC-PRD-045
      path: implementation/tests/TST-ACC-PRD-045-change-validation.md
    - id: TST-ACC-PRD-046
      path: implementation/tests/TST-ACC-PRD-046-cleaning.md
    - id: TST-ACC-PRD-047
      path: implementation/tests/TST-ACC-PRD-047-deletion-validation.md
    - id: TST-ACC-PRD-048
      path: implementation/tests/TST-ACC-PRD-048-generate-identifier.md
    - id: TST-ACC-PRD-049
      path: implementation/tests/TST-ACC-PRD-049-validation.md
    - id: TST-ACC-PRD-050
      path: implementation/tests/TST-ACC-PRD-050-change-validation.md
    - id: TST-ACC-PRD-051
      path: implementation/tests/TST-ACC-PRD-051-cleaning.md
    - id: TST-ACC-PRD-052
      path: implementation/tests/TST-ACC-PRD-052-deletion-validation.md
    - id: TST-ACC-PRD-053
      path: implementation/tests/TST-ACC-PRD-053-generate-identifier.md
    - id: TST-ACC-PRD-054
      path: implementation/tests/TST-ACC-PRD-054-validation.md
    - id: TST-ACC-PRD-055
      path: implementation/tests/TST-ACC-PRD-055-change-validation.md
    - id: TST-ACC-PRD-056
      path: implementation/tests/TST-ACC-PRD-056-cleaning.md
    - id: TST-ACC-PRD-057
      path: implementation/tests/TST-ACC-PRD-057-deletion-validation.md
    - id: TST-ACC-PRD-058
      path: implementation/tests/TST-ACC-PRD-058-validation.md
    - id: TST-ACC-PRD-059
      path: implementation/tests/TST-ACC-PRD-059-change-validation.md
    - id: TST-ACC-PRD-060
      path: implementation/tests/TST-ACC-PRD-060-cleaning.md
    - id: TST-ACC-PRD-061
      path: implementation/tests/TST-ACC-PRD-061-deletion-validation.md
    - id: TST-ACC-PRD-062
      path: implementation/tests/TST-ACC-PRD-062-id-generation.md
    - id: TST-ACC-PRD-063
      path: implementation/tests/TST-ACC-PRD-063-validation.md
    - id: TST-ACC-PRD-064
      path: implementation/tests/TST-ACC-PRD-064-product-visible-properites.md
    - id: TST-ACC-PRD-065
      path: implementation/tests/TST-ACC-PRD-065-validate.md
    - id: TST-ACC-PRD-066
      path: implementation/tests/TST-ACC-PRD-066-product-rules.md
---

# Products

## Purpose

The catalogue gives finance and domain applications a shared place to maintain the products involved in sales. This planning layer groups product administration, pricing, selling settings and accounting configuration.

## Boundary

The module maintains catalogue configuration and exposes it to other parts of Rhythm. Books supplies the accounting reference records; Transactions and Batch Management consume product configuration for invoicing and posting. Commerce owns price evaluation and the planned execution of selling settings. Domain applications own their extending records, while Platform supplies security, metadata, communications and workspace maintenance. The existing tax assignments remain described here pending their approved transfer to Commerce.

## Features

| Id | Title | Capabilities |
|---|---|---|
| FEAT-ACC-PRD-01 | Product Catalogue | 8 |
| FEAT-ACC-PRD-02 | Product Pricing | 2 |
| FEAT-ACC-PRD-03 | Selling Settings | 5 |
| FEAT-ACC-PRD-04 | Accounting Configuration | 4 |

## Capabilities

| Id | Title | Product intent | Evidence |
|---|---|---|---|
| CAP-ACC-PRD-001 | Understand the available product kinds | proposed | observed |
| CAP-ACC-PRD-002 | Create a product with a permanent identity | proposed | observed |
| CAP-ACC-PRD-003 | Locate products and inspect their configuration | proposed | observed |
| CAP-ACC-PRD-004 | Save product corrections against the version read | proposed | observed |
| CAP-ACC-PRD-005 | Withdraw a product from sale and restore it | proposed | observed |
| CAP-ACC-PRD-006 | Delete a product after its dependencies are removed | proposed | observed |
| CAP-ACC-PRD-007 | Keep domain products under their owning application | proposed | observed |
| CAP-ACC-PRD-008 | Configure prices by audience, period and currency | proposed | observed |
| CAP-ACC-PRD-009 | Preserve migrated special prices for Commerce | proposed | partially-observed |
| CAP-ACC-PRD-010 | Configure discounts for quantity purchases | proposed | partially-observed |
| CAP-ACC-PRD-011 | Offer a collection of products as a bundle | proposed | partially-observed |
| CAP-ACC-PRD-012 | Configure a customer purchase ceiling | proposed | partially-observed |
| CAP-ACC-PRD-013 | Record the follow-up work a purchase needs | proposed | partially-observed |
| CAP-ACC-PRD-014 | Configure a purchase confirmation message | proposed | partially-observed |
| CAP-ACC-PRD-015 | Assign a product’s accounting treatment | proposed | observed |
| CAP-ACC-PRD-016 | Allocate product revenue across dates and accounts | proposed | observed |
| CAP-ACC-PRD-017 | Complete accounting setup for a group of products | proposed | partially-observed |
| CAP-ACC-PRD-018 | Maintain the tax default for a product kind | out-of-scope | observed |
| CAP-ACC-PRD-019 | Carry the product catalogue into a workspace export | proposed | observed |

## Journeys

| Id | Title | Product intent | E2E policy |
|---|---|---|---|
| JNY-ACC-PRD-001 | Finance prepares a priced product with accounting setup | proposed | required |
| JNY-ACC-PRD-002 | Finance withdraws, restores and removes catalogue products | proposed | required |
| JNY-ACC-PRD-003 | Finance configures valid donation and audience pricing | proposed | optional |
| JNY-ACC-PRD-004 | Console corrections preserve API-configured selling settings | proposed | required |
| JNY-ACC-PRD-005 | Finance completes revenue treatment and missing setups | proposed | optional |
| JNY-ACC-PRD-006 | Membership keeps its shared product within domain ownership | proposed | none |

## Testing Artifact Tree

The module has nineteen capability test specifications in Design, four cumulative feature acceptance suites in Planning and sixty-six executable-suite records in Implementation. The tree names every artifact and its relative location in frontmatter. The module performs no inference.
