---
id: ADR-COM-CAT-003
title: Accounting Product Ownership and Commerce Extensions
product_area: commerce
module: catalog
revision: 1
status: proposed
design_intent: proposed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: >-
  Accounting retains base products and financial price rows, while Commerce retains selling facets and
  calculates their use through direct scoped reads.
constrains:
  - DOM-COM-CAT-003
  - DOM-COM-CAT-004
  - SVC-COM-CAT-catalog
  - SVC-COM-CAT-merchandise
  - SVC-COM-CAT-pricing
  - RESP-COM
origin: >-
  Accounting product architecture (one-to-one domain extensions), as cited by the merchandise table and the
  inventory migration record (D-P8I-15 to D-P8I-19)
alternatives:
  - option: Replicate base products into Commerce
    why_not: Replicated product state would require synchronization with the financial source.
  - option: Require HTTP reads for every price input
    why_not: The implementation uses scoped table reads to load the larger product and grid input set.
consequences:
  - 'Accounting functions perform product writes, including combined Commerce requests.'
  - Cross-service references rely on existence checks rather than foreign keys into Accounting.
  - The hosted price-grid save remains an Accounting product write.
supersedes: []
evidence:
  - >-
    services-commerce at c8b66a98: modules/merchandise/db/merchandise.table.ts;
    services/persistence/merchandise-products.ts; modules/pricing/services/persistence/catalog-products.ts.
  - >-
    react-console at baf6dae3: lib/commerce/pricing/live.ts (the grid saved through Accounting's product
    route).
---

# Accounting Product Ownership and Commerce Extensions

## Context

Several applications sell the same Accounting product. Copying its financial identity into another owner would create competing sources.

## Decision

Accounting retains base products and financial price rows, while Commerce retains selling facets and calculates their use through direct scoped reads.

## Alternatives Considered

Replicate base products into Commerce. Replicated product state would require synchronization with the financial source.

Require HTTP reads for every price input. The implementation uses scoped table reads to load the larger product and grid input set.

## Consequences

Accounting functions perform product writes, including combined Commerce requests. Cross-service references rely on existence checks rather than foreign keys into Accounting. The hosted price-grid save remains an Accounting product write.
