Skip to content

CAP-ACC-BKS-013Maintain tax payable mapping during the Commerce transition

Markdown

CAP-ACC-BKS-013

Maintain tax payable mapping during the Commerce transition

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationInconsistent

KindCapabilityProduct areaAccountingModuleBooks, Business Units and Chart of AccountsRevision1

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 posting uses rate-specific payable mapping or the unit’s fallback.Issued tax snapshots survive configuration changes.Transitional tax setup retains referential protection while ownership is moved.
Surfaces
consoleapi
Intent sources
services-accounting:docs/architecture/accounting-2.0/02-decisions.md#R-1services-accounting:docs/architecture/realignment-2026-10-22/ownership.md#3. Capability ownership matrixservices-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D1services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D16

Controls

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

Permissions

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

Business Rules

8 rules, 6 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 proposed.

IdRuleKindEnforced atProvenance
01
Proposed
The decided ownership places tax classes, zones, rates and determination in Commerce’s shared tax service while Accounting retains payable mapping and recorded document tax.
policydocumented
02must prove
Proposed
Rate payable mappings use accounts of the mapped unit; posting chooses the rate’s account or the unit’s sales-tax default and refuses the document when neither is available.
calculationservice, databasetest
03must prove
Proposed
Zone criteria match their postal-range, region, country or rest-of-world kind, normalize and deduplicate codes, limit lists to 100 entries and require equal-length ordered postal-range endpoints.
validationapi, servicetest
services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses the criteria of another kind, and any criteria on the rest of the world
04must prove
Proposed
A zone holds at most twenty named rates, each with at most 100 classes, percentages from 0 to 100 as decimal text with six places and no repeated class or unit mapping.
validationapi, servicetest
services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses more than twenty rates, a blank name, a class or a unit named twice, and a bad percentage, each by position
05must prove
Proposed
Replacing a zone replaces its rates with new identities while issued document tax retains its original rate references.
lifecycleservice, databasetest
services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js#answers 200 with the version moved on and the rates rewritten whole, the first under a new id
06must prove
Proposed
Zone matching follows priority and name, selects the first match, reserves rest-of-world for fallback and treats an omitted country as the United States.
calculationservicetest
services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#taxes an address with no country as the United States, as Rhythm 1.0 did
07must prove
Proposed
Product setups, product-type defaults, rates and recorded tax lines protect a referenced tax class from deletion with dependents identified; deactivation retains existing references.
invariantservice, databasetest
services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js#translates the refusal of each restrict foreign key to a tax class into a 409 naming it, the invoice lines among them
08
Proposed
Tax classes are shared workspace definitions without a business unit, ordered by name and allowed to have matching names under different identifiers.
policyapi, servicetest
services-accounting:modules/books/tests/e2e/tax-classes.e2e.spec.js#answers 400 to a business unit, which tax classes do not carry

Scenarios

IdGivenWhenThenProvenance
01A New York zone includes state and city rates.The controller configures their payable destinations and posts an issued taxed invoice.Each tax liability is directed to the account mapped for that rate.test
02An invoice already contains yesterday’s tax calculation.The controller changes today’s zone rates.The invoice retains the earlier rate references and tax snapshot.test

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.