---
id: SCR-ACC-PRD-001
title: Products List
route: /console/{tenantId}/configuration/accounting/products?type={productTypeId}&unit={businessUnitId}
surface: console
product_area: accounting
module: products
revision: 3
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
purpose: Locate Accounting, Donation and Legacy products, review setup coverage and perform permitted lifecycle
  actions.
supports:
- JNY-ACC-PRD-001
- JNY-ACC-PRD-002
- JNY-ACC-PRD-005
- CAP-ACC-PRD-001
- CAP-ACC-PRD-003
- CAP-ACC-PRD-005
- CAP-ACC-PRD-006
- CAP-ACC-PRD-017
permission: accounting.products.read (the console's accounting.products.view alias)
entry_from:
- /console/{tenantId}/configuration (the Configuration area chooser, Accounting group)
- /console/{tenantId}/configuration/accounting/products/new?type={productTypeId}
- /console/{tenantId}/configuration/accounting/products/{id}
exits_to:
- /console/{tenantId}/configuration/accounting/products/new?type={productTypeId}&unit={businessUnitId}
- /console/{tenantId}/configuration/accounting/products/{id}
displays:
- field: Accounting, Donation and Legacy tabs select the kind and retain it in the address.
  source: listProductTypes (DOM-ACC-PRD-001 kind)
- field: The unit filter begins in the working unit, permits all units and keeps the selection in the address.
  source: business units list (Books); the console's working context
- field: Search matches name or code; Show Inactive also includes retired records.
  source: listProducts (search, status filters)
- field: Pages of up to 25 show Name with Code, status, unit, Price and Accounting and provide Previous and
    Next navigation.
  source: listProducts (DOM-ACC-PRD-001, DOM-ACC-PRD-002 standard price)
- field: Accounting marks a setup or warns that revenue will use unit defaults.
  source: listProducts (accounting summary of DOM-ACC-PRD-004)
- field: The Legacy tab explains historical retention and unsellability.
  source: the console's own copy
actions:
- label: New <kind> (Accounting and Donation tabs only)
  operation_id: none (opens SCR-ACC-PRD-002)
  permission: accounting.products.create
  confirm: false
- label: Edit for writers on non-retired rows; view by name for readers, including retired rows
  operation_id: none (opens SCR-ACC-PRD-003)
  permission: accounting.products.update
  confirm: false
- label: Deactivate or Activate
  operation_id: updateProduct
  permission: accounting.products.update
  confirm: true
- label: Retire or Reactivate
  operation_id: retireProduct / reactivateProduct
  permission: accounting.products.update (the console's accounting.products.retire alias)
  confirm: true
- label: Delete
  operation_id: deleteProduct
  permission: accounting.products.delete
  confirm: true
- label: Pricing
  operation_id: none (opens Commerce pricing page)
  permission: accounting.products.read (list entry; no additional row-action check)
  confirm: false
- label: Copy ID to Clipboard
  operation_id: none (browser clipboard)
  permission: accounting.products.read (list entry; no additional row-action check)
  confirm: false
states:
- loading
- error
- empty
- empty after filtering
- read-only
- inactive
- retired
validation:
- BR-CAP-ACC-PRD-001-07
- BR-CAP-ACC-PRD-001-08
- BR-CAP-ACC-PRD-003-07
- BR-CAP-ACC-PRD-005-08
- BR-CAP-ACC-PRD-017-07
patterns:
- Standard layout (PageLayout and PageHeader)
- Configuration breadcrumb
- line Tabs
- ListToolbar with search and Show Inactive
- BusinessUnitSelect
- design-system Table with cursor paging
- EmptyState
- InactiveBadge
- row actions menu with ConfirmDialog
- LoadingIndicatorPanel
component: components/accounting-config/products/products-page.tsx (ProductsPage)
evidence:
- 'react-console at baf6dae3: components/configuration/area-route.tsx (products area); lib/configuration/areas.ts
  (products); components/accounting-config/products/products-page.tsx, product-row-actions.tsx, use-products.ts
  (isCreatedHere, productStatusWrite); lib/authz/backend-aliases.ts.'
- 'services-accounting at f47cb263: modules/products/aws/api/products.routes.ts (listProducts, retireProduct,
  reactivateProduct, deleteProduct, updateProduct).'
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-DAT-004, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-005]
---

# Products List

## What the Screen Is For

Finance uses the catalogue list to find Accounting's product kinds, inspect setup coverage and manage status. Domain applications administer their own kinds elsewhere.

## What It Shows and Lets People Do

Tabs select Accounting, Donation or Legacy products, with business-unit and search filters narrowing results. Accounting and Donation tabs offer creation when permitted. Row menus provide pricing navigation, identity copying and authorized lifecycle or delete actions. A reader can inspect a retired row by following its name, while a writer receives no edit link for that row.

## States and Errors

Loading, request failure and empty results have separate displays. Search or unit filtering can produce a filtered empty state. Show Inactive includes inactive and retired entries with their badges. Action refusals appear in the confirmation dialog.

## Patterns It Must Respect

Use the existing configuration list layout, address-backed kind and unit selection, cursor pagination and confirmed actions. Quick status replacement currently fails to retain sale windows and portal visibility; that defect needs correction in the implementation.
