---
id: CAP-ACC-PRD-003
title: Locate products and inspect their configuration
feature: FEAT-ACC-PRD-01
product_area: accounting
module: products
revision: 5
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - react-console acceptance inventory CAP-ACC-PRD-003
  - react-console acceptance inventory CAP-ACC-PRD-019
  - react-console acceptance inventory CAP-ACC-PRD-021
  - react-console acceptance inventory RUL-ACC-PRD-042
  - react-console acceptance inventory RUL-ACC-PRD-043
  - react-console acceptance inventory RUL-ACC-PRD-052
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D11'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R9'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R28'
purpose: 'A reader narrows the catalogue by product kind, business unit, status or search text.'
outcomes:
  - Readers can find and inspect relevant catalogue records.
concepts:
  - CON-ACC-PRD-001
actors:
  - ACT-ACC-006
  - ACT-ACC-007
  - ACT-ACC-011
surfaces:
  - console
  - api
permissions:
  - key: accounting.products.read
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-ACC-PRD-003-01
    proved_by: [ATS-ACC-PRD-003-01, TST-ACC-PRD-030, TST-ACC-PRD-041]
    statement: >-
      Product pages sort by name and identity, default to fifty entries, allow limits up to two hundred and
      provide a continuation cursor when more entries exist.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products.e2e.spec.js#answers 400 to a limit above 200'
    origin: none
  - id: BR-CAP-ACC-PRD-003-02
    proved_by: []
    statement: >-
      Product queries combine kind, status and unit filters with case-insensitive name and identity searches
      that treat wildcard characters as text.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: false
    provenance: test
    source: >-
      services-accounting:modules/products/tests/e2e/products.e2e.spec.js#searches LIKE metacharacters
      literally
    origin: none
  - id: BR-CAP-ACC-PRD-003-03
    proved_by: [ATS-ACC-PRD-003-05, ATS-ACC-PRD-018-09, ATS-ACC-PRD-019-03]
    statement: >-
      Product reads include prices, components, selling settings, an accounting summary or none, and the
      resolved tax class.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.queries.integration.spec.js#maps
      a product whole: every column, its prices, its components and its accounting summary
    origin: none
  - id: BR-CAP-ACC-PRD-003-04
    proved_by: [ATS-ACC-PRD-003-02, TST-ACC-PRD-013, TST-ACC-PRD-028, TST-ACC-PRD-031]
    statement: A workspace cannot list or retrieve another workspace’s products.
    kind: permission
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#answers tenant B 404 for
      tenant A’s product
    origin: none
  - id: BR-CAP-ACC-PRD-003-05
    proved_by: [ATS-ACC-PRD-003-03, TST-ACC-PRD-028]
    statement: >-
      Product reads require product read permission, while full accounting setup reads require the separate
      product-accounting read permission.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js#reads the products'
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3'
  - id: BR-CAP-ACC-PRD-003-06
    proved_by: [ATS-ACC-PRD-003-04, TST-ACC-PRD-012]
    statement: Readers without product edit authority can inspect the product editor with its controls disabled.
    kind: permission
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:components/accounting-config/products/product-editor-page.tsx:ProductEditorPage'
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D11'
  - id: BR-CAP-ACC-PRD-003-07
    proved_by: []
    statement: >-
      The console defaults to the working unit, keeps tab and unit selections in the address, pages
      twenty-five records, hides inactive and retired entries by default and identifies missing accounting
      setup.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: observed
    source: 'react-console:components/accounting-config/products/products-page.tsx:ProductsList'
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R28'
  - id: BR-CAP-ACC-PRD-003-08
    proved_by: []
    statement: >-
      The portal projection removes components, version, accounting summary, confirmation settings, purchase
      limits and task instructions, retaining only base-currency prices; no portal product route currently
      uses it.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: 'services-accounting:modules/products/services/rules/product-rules.ts:portalVisibleProduct'
    origin: none
scenarios:
  - id: SC-CAP-ACC-PRD-003-01
    given: Thirty catalogue products span two units.
    when: A reader selects one unit and searches for permit.
    then: Matching names and identities in that unit appear in name order.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.queries.integration.spec.js#combines
      the search with a filter
  - id: SC-CAP-ACC-PRD-003-02
    given: A product has no accounting setup.
    when: Staff inspect its console row.
    then: The accounting indicator explains that unit defaults apply.
    provenance: observed
    source: 'react-console:components/accounting-config/products/products-page.tsx:AccountingCell'
edge_cases: []
constraints: []
depends_on: []
related:
  - CAP-ACC-PRD-015
  - CAP-ACC-PRD-018
journeys:
  - JNY-ACC-PRD-001
open_questions: []
evidence:
  - 'react-console:components/accounting-config/products/product-editor-page.tsx'
  - 'react-console:components/accounting-config/products/products-page.tsx'
  - 'react-console:components/accounting-config/products/use-products.ts'
  - 'react-console:lib/authz/backend-aliases.ts'
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md'
  - 'services-accounting:modules/products/aws/api/products-api-mapper.ts'
  - 'services-accounting:modules/products/aws/api/products.routes.ts'
  - 'services-accounting:modules/products/services/persistence/products.ts'
  - 'services-accounting:modules/products/services/rules/product-rules.ts'
  - 'services-accounting:modules/products/tests/e2e/products-security.e2e.spec.js'
  - 'services-accounting:modules/products/tests/e2e/products.e2e.spec.js'
  - >-
    services-accounting:modules/products/tests/integration/services/persistence/products.queries.integration.spec.js
  - 'services-accounting:modules/products/tests/unit/carried/products/product-visible-properites.spec.js'
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-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-005]
exercised_by: [FAS-ACC-PRD-01-01, FAS-ACC-PRD-01-02, FAS-ACC-PRD-01-03, FAS-ACC-PRD-01-04, FAS-ACC-PRD-01-05, FAS-ACC-PRD-04-02]
suites: [TST-ACC-PRD-012, TST-ACC-PRD-013, TST-ACC-PRD-028, TST-ACC-PRD-030, TST-ACC-PRD-031, TST-ACC-PRD-041]
---

# Locate products and inspect their configuration

## Purpose

A reader narrows the catalogue by product kind, business unit, status or search text.

## How It Works

A reader narrows the catalogue by product kind, business unit, status or search text. The API returns ordered pages and a cursor for continuing. The console uses the working unit as its starting context. Staff can deliberately choose all units or include inactive records. Each row helps distinguish a configured product from one still using default accounting. Opening a product shows its stored configuration. Full accounting information depends on a separate permission. A reader without edit authority can inspect the disabled editor. Portal filtering exists as a helper, although a live portal product route is still absent.

## Relationships

The product record supplies the identity and configuration used by this outcome.
