---
id: JNY-ACC-PRD-004
title: Console corrections preserve API-configured selling settings
feature: FEAT-ACC-PRD-03
product_area: accounting
module: products
revision: 2
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - ACT-ACC-0101
  - ACT-ACC-0112
  - ACT-ACC-0110
  - ACT-ACC-0134
  - ACT-ACC-0135
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
actor: ACT-ACC-006
goal: >-
  Retain configured purchase ceilings, tasks, bands, components and messaging through later catalogue
  corrections.
capabilities:
  - CAP-ACC-PRD-012
  - CAP-ACC-PRD-013
  - CAP-ACC-PRD-010
  - CAP-ACC-PRD-011
  - CAP-ACC-PRD-014
  - CAP-ACC-PRD-004
screens:
  - '/console/{tenantId}/configuration/accounting/products/{id}'
  - '/console/{tenantId}/configuration/accounting/products'
steps:
  - 'n': 1
    surface: createProduct
    action: >-
      Create a product with a customer ceiling, task instructions, discount bands, shared confirmation, fee
      and notes.
    capability: CAP-ACC-PRD-012
    expected: The response retains the configured feature values.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/e2e/product-features.e2e.spec.js#answers every feature as
      sent
  - 'n': 2
    surface: updateProduct
    action: Supply ticket and programme components with allocation prices.
    capability: CAP-ACC-PRD-011
    expected: Valid quantity-weighted allocation saves within the product’s price limits.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0110.spec.ts#ACT-ACC-0110'
  - 'n': 3
    surface: '/console/{tenantId}/configuration/accounting/products/{id}'
    action: Rename the product through its console editor.
    capability: CAP-ACC-PRD-004
    expected: 'Hidden ceiling, confirmation and component controls do not discard loaded settings.'
    provenance: observed
    source: 'react-console:lib/accounting-config/product-form.ts:formToWrite'
  - 'n': 4
    surface: '/console/{tenantId}/configuration/accounting/products'
    action: Deactivate it from the catalogue row.
    capability: CAP-ACC-PRD-004
    expected: 'The tested ceiling, tasks, bands, fee and notes remain stored on the inactive product.'
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0112.spec.ts#ACT-ACC-0112'
  - 'n': 5
    surface: updateProduct
    action: Clear selling features with empty settings through the API.
    capability: CAP-ACC-PRD-013
    expected: The response shows cleared features and rejects empty arrays for list features.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/e2e/product-features.e2e.spec.js#switches every feature off
      with null
alternates:
  - from_step: 1
    condition: The product uses owned confirmation content.
    path: Ask Platform to validate and save content during the product transaction.
    outcome: 'Platform refusal rolls back product writes, but later commit failure can leave changed content.'
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#rolls
      the product back when Platform cannot save the template
failures:
  - from_step: 1
    condition: Discount bands share quantity ten.
    path: Reject the conflicting bands and identify them.
    outcome: No product creation survives.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/e2e/product-features.e2e.spec.js#refuses overlapping bulk
      pricing ranges by the service’s rule, naming the rows
  - from_step: 1
    condition: A task uses a missing CRM type.
    path: Reject the unavailable task type.
    outcome: No product creation survives.
    provenance: test
    source: >-
      services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js#refuses
      a task type the tenant does not have
rules_in_play:
  - BR-CAP-ACC-PRD-012-01
  - BR-CAP-ACC-PRD-012-05
  - BR-CAP-ACC-PRD-013-02
  - BR-CAP-ACC-PRD-010-03
  - BR-CAP-ACC-PRD-010-04
  - BR-CAP-ACC-PRD-011-06
  - BR-CAP-ACC-PRD-011-09
  - BR-CAP-ACC-PRD-014-02
  - BR-CAP-ACC-PRD-014-06
  - BR-CAP-ACC-PRD-004-02
  - BR-CAP-ACC-PRD-004-10
assertions:
  - id: AS-JNY-ACC-PRD-004-01
    statement: 'The tested ceiling, tasks, quantity bands, fee and notes survive rename and deactivation.'
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0112.spec.ts#ACT-ACC-0112'
  - id: AS-JNY-ACC-PRD-004-02
    statement: Rejected empty list writes leave the product version unchanged.
    provenance: test
    source: 'react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0112.spec.ts#ACT-ACC-0112'
e2e_policy: required
e2e_reason: API settings must survive console corrections across hidden and visible controls.
evidence:
  - 'react-console:acceptance/accounting/journeys/products/ACT-ACC-0101.json'
  - 'react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0110.spec.ts'
  - 'react-console:acceptance/accounting/playwright/journeys/products/ACT-ACC-0112.spec.ts'
  - 'react-console:lib/accounting-config/product-form.ts'
  - 'services-accounting:modules/products/tests/e2e/product-features.e2e.spec.js'
  - >-
    services-accounting:modules/products/tests/integration/services/persistence/products.features.integration.spec.js
proved_by: []
---

# Console corrections preserve API-configured selling settings

## Story

An API client configures selling information before finance corrects the catalogue through the console. The journey follows rename, withdrawal and explicit clearing to distinguish preservation from removal. Some hidden settings are supported by observed form behavior rather than the browser test’s narrower feature assertions.
