Skip to content

CAP-ACC-PRD-018Maintain the tax default for a product kind

Markdown

CAP-ACC-PRD-018

Maintain the tax default for a product kind

Markdown
  • DocumentDraft
  • Product intentOut of scope
  • ImplementationObserved

Planning

Feature
FEAT-ACC-PRD-04
Exercised by
FAS-ACC-PRD-04-02, FAS-ACC-PRD-04-04
Key concepts
CON-ACC-PRD-004
Actors
ACT-ACC-009, ACT-ACC-007, ACT-ACC-011
Depends on
CAP-ACC-PRD-015
Related
CAP-ACC-PRD-003
Open questions
OQ-ACC-PRD-001
Proved by
ATS-ACC-PRD-018

Implementation

Executable suites
TST-ACC-PRD-029, TST-ACC-PRD-042

KindCapabilityProduct areaAccountingModuleProductsRevision5

Read atservices-accounting f47cb263react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Tax defaults provide fallback classification during the ownership transfer.
Surfaces
consoleapi
Intent sources
services-accounting:docs/migrations/accounting-modernization/products-shared/README.md#D-7services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D4services-accounting:docs/milestones/plans/ACCT-realignment-2026-10-22.md#D-T2

Controls

22 controls apply, from the corpus control catalogue.

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-001 TC-DAT-004 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-PI-001 TC-PI-003 TC-PI-005

Permissions

KeyChecked atScope
accounting.tax-classes.readapitenant
accounting.tax-classes.updateapitenant
accounting.tax-classes.deleteapitenant

Business Rules

10 rules, 8 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's out-of-scope.

IdRuleKindEnforced atProvenance
01must prove
Out of scope
Tax-class resolution uses the setup assignment first, the workspace’s default for the kind second and no class otherwise.
calculationservice, databasetest
services-accounting:modules/products/tests/e2e/products-shared-base.e2e.spec.js#lets the product’s own accounting setup class win over the type default
02must prove
Out of scope
A workspace holds at most one default per registered kind, including inactive kinds, and cannot change the default’s kind.
invariantservice, databasetest
services-accounting:modules/products/tests/integration/services/persistence/products.shared-base.integration.spec.js#refuses an unknown type, an unknown class and an inactive class newly chosen, and keeps an inactive class once held
03must prove
Out of scope
A newly selected default class must be an active workspace class, while an already held retired class remains acceptable.
validationservicetest
services-accounting:modules/products/tests/integration/services/persistence/products.shared-base.integration.spec.js#refuses an unknown type, an unknown class and an inactive class newly chosen, and keeps an inactive class once held
04must prove
Out of scope
First-time default assignment omits a version and subsequent replacement requires the current read version.
validationservicetest
services-accounting:modules/products/tests/e2e/products-shared-base.e2e.spec.js#replaces the default at the version read, lists it, and refuses a stale version 409
05must prove
Out of scope
Removing a default leaves products without setup assignments with no resolved class, and a repeat removal returns not found.
lifecycleservicetest
services-accounting:modules/products/tests/e2e/products-shared-base.e2e.spec.js#removes the default, 200 then 404, after which a package without a setup class is taxed under none
06must prove
Out of scope
A tax class referenced by a product-kind default cannot be deleted.
invariantdatabasetest
services-accounting:modules/products/tests/e2e/products-shared-base.e2e.spec.js#refuses deleting a tax class only a default names, 409 with the sentence, and allows it once the default is gone
07must prove
Out of scope
A combined update-and-delete lock blocks both operations on a default, while a delete-only lock permits replacement.
permissionservicetest
08must prove
Out of scope
Tax defaults require tax-class permissions rather than product permissions.
permissionapitest
services-accounting:modules/products/tests/e2e/products-shared-base.e2e.spec.js#refuses a caller with product rights alone (tax configuration needs the tax-classes keys)
09
Out of scope
Documented line behavior freezes the resolved class when no explicit invoice or memo line class is supplied.
policydocumented
10
Out of scope
The product should move tax-class ownership, product-kind defaults and product assignments to Commerce and remove tax classification from Accounting’s editor.
policydocumented

Scenarios

IdGivenWhenThenProvenance
01Membership packages have no kind default.A tax administrator assigns their standard class.Unassigned packages resolve the default while a package with its own class keeps that assignment.test
services-accounting:modules/products/tests/e2e/products-shared-base.e2e.spec.js#sets a default for membership packages, after which a package without a setup class is taxed under it

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.