---
id: ADR-ACC-PRD-003
title: Product Kind Ownership Restricts Service Writers
product_area: accounting
module: products
revision: 3
status: proposed
design_intent: confirmed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
decision: Product service callers must match the kind's application owner, while authorized console and system
  logic can write across owners.
constrains:
- DOM-ACC-PRD-001
- SVC-ACC-PRD-products
- WF-ACC-PRD-001
- WF-ACC-PRD-004
origin: 'services-accounting:docs/migrations/accounting-modernization/products-shared/README.md#D-2 (A: the
  console exemption); services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D4'
alternatives:
- option: Match console writes to the originating screen's application.
  why_not: The caller context does not reliably identify the screen that submitted the request.
- option: Let every service write every kind.
  why_not: This removes the protection between application owners.
consequences:
- A refusal identifies the caller, kind and owning service.
- Current HTTP business routes accept console callers; application services use SQL functions.
supersedes: []
evidence:
- 'services-accounting at f47cb263: modules/products/services/rules/product-rules.ts (productOwnerProblem);
  tests/integration/services/persistence/products.shared-base.integration.spec.js.'
---

# Product Kind Ownership Restricts Service Writers

## Context

The catalogue serves several applications, so one application's service must not mutate another's products. Console administration remains permission-based across those kinds.

## Decision

Product service callers must match the kind's application owner, while authorized console and system logic can write across owners.

## Alternatives Considered

Match console writes to the originating screen's application. The caller context does not reliably identify the screen that submitted the request.

Let every service write every kind. This removes the protection between application owners.

## Consequences

Both product write paths check application ownership. Those checks do not prove extension completion or enforce the console's navigation choices.
