Skip to content

CAP-ACC-BKS-001Establish a separate set of books for each business unit

Markdown

CAP-ACC-BKS-001

Establish a separate set of books for each business unit

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

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
Separate bookkeeping organizations have distinct units whose founding currency and fiscal month remain stable.A newly saved unit already has the current and following fiscal years.Staff start unit-specific work with an eligible selected context.
Surfaces
consoleapi
Intent sources
services-accounting:docs/milestones/plans/ACCT-M1-plan.md#2. Scopeservices-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D3services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D12services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R12services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R28

Controls

24 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-003 TC-PI-005

Permissions

KeyChecked atScope
accounting.business-units.readapitenant
accounting.business-units.createapitenant
accounting.business-units.updateapitenant
accounting.business-units.deleteapitenant
accounting.business-units.queryservicetenant

Business Rules

9 rules, 7 to be proved before approval. A rule's product intent is derived from its origin: 9 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Creating a unit requires a name, an offered base currency and a fiscal start month between 1 and 12; an omitted identifier is generated from the name and remains fixed.
✓ A valid configuration completes the stated operation.✗ A conflicting configuration receives the stated refusal.
validationapi, service, databasetest
services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#creates it under the id its name suggests, in the tenant of the path
02must prove
Confirmed
A saved unit retains its original base currency and fiscal start month, and replacing either is refused with the field identified.
✗ A conflicting configuration receives the stated refusal.
invariantservice, databasetest
services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers 409 to a change of the base currency, naming the column
03must prove
Confirmed
Unit creation and generation of the fiscal year containing the workspace’s current date and the following year succeed together or are rolled back together.
lifecycleservice, databasetest
services-accounting:modules/books/tests/integration/services/persistence/fiscal-years.integration.spec.js#gives the new unit exactly its two years, the one containing today and the next
04must prove
Confirmed
Unspecified creation settings default to accrual accounting, no inventory costing, direct write-off against bad-debt expense, summary downloads, Other software, no project inheritance, active status and single-currency operation.
policyservice, databasetest
services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#gives every setting the request left out its default
05must prove
Confirmed
A replacement preserves supported currencies, multicurrency enablement, direct write-off treatment and fee settings when their respective inputs are omitted, and applies their replacement semantics when supplied.
policyapi, servicetest
services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js#keeps the supported currencies when the replacement does not state them
06must prove
Confirmed
Unit deletion identifies and refuses remaining GL accounts, bank accounts, merchant accounts or projects; otherwise owned currencies, defaults, departments and fiscal years are removed, subject to other restricting references.
✗ A conflicting configuration receives the stated refusal.
lifecycleservice, databasetest
07
Confirmed
Unit lists sort by ascending priority with unspecified priorities last, then name, and support activity filters and searches on name or identifier.
policyapi, servicetest
services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers every unit by priority, lowest first and none last, then by name
08must prove
Confirmed
The console remembers an active working unit or selects the first active unit in list order, initializes scoped lists and new records with it rather than All Business Units, and offers newly created units without a reload.
policyconsoledocumented
09
Confirmed
The read-only business-unit query dataset exposes identifier, name, active state and base currency under its own query permission and supports transaction queries without writing units.
policydatabase, servicetest
services-accounting:modules/books/tests/integration/db/business-units-view.integration.spec.js#refuses the reader a column of the table the dataset does not describe

Scenarios

IdGivenWhenThenProvenance
01A Pacific chapter begins its fiscal year in July.The controller opens its books in US dollars.The new unit has fiscal years 2026–2027 and 2027–2028 and appears in the working-unit choices.test
02An incorrectly denominated unit already owns a GL account and project.The controller requests removal of the unit.The refusal identifies both dependencies; after removal of those dependencies the unit and its departments and calendar can be deleted.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.