Skip to content

CAP-ACC-BKS-002Enable supported foreign currencies for a business unit

Markdown

CAP-ACC-BKS-002

Enable supported foreign currencies for a 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
Single-currency operation rejects foreign-currency work using the legacy treatment.Enabled foreign currencies carry explicit sourcing and missing-price choices.Existing account and rate dependencies protect their currencies from removal.
Surfaces
consoleapi
Intent sources
services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#R1services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D2services-accounting:docs/architecture/accounting-2.0/02-decisions.md#P-3

Controls

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

Permissions

KeyChecked atScope
accounting.business-units.updateapitenant
accounting.business-units.readapitenant

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
Multicurrency starts disabled; enabling it requires a supported currency, and the supported set takes effect only while the switch is enabled.
validationapi, service, consoletest
services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js#refuses Enable Multicurrency on a create with no supported currency, in Rhythm 1.0’s words
02must prove
Confirmed
A unit with multicurrency disabled refuses non-base currencies for accounts, prices, transactions and rates using the carried-forward refusal message.
✗ A conflicting configuration receives the stated refusal.
policyservicetest
services-accounting:modules/books/tests/unit/rules/multi-currency-rules.spec.js#refuses a foreign currency when the flag is off, with 1.0’s sentence
03must prove
Confirmed
The supported set contains at most 200 offered currencies, without duplicates or the unit’s base currency.
validationapi, service, databasetest
services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers 400 to a supported currency named twice, in Rhythm 1.0’s words
04must prove
Confirmed
Each supported currency chooses table or provider rates and calculated or prohibited missing-price handling, defaulting to table and calculate; the base currency has neither setting.
policyapi, service, databasetest
services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js#answers each supported currency with its settings, the defaults for one that stated none, and the codes beside them
05must prove
Confirmed
Removing a supported currency or disabling multicurrency is refused while accounts or rates use it, with the unit, currency and dependent kinds identified; disabling an unused set clears it.
invariantservice, databasetest
services-accounting:modules/books/tests/e2e/business-units.e2e.spec.js#answers 409 naming the currency, the unit and the kinds of account that use it
06must prove
Confirmed
GL, bank and merchant accounts accept only currencies enabled for their business unit.
✗ A conflicting configuration receives the stated refusal.
validationapi, service, databasetest
services-accounting:modules/books/tests/e2e/gl-accounts.e2e.spec.js#answers 400 to a currency the unit is not enabled for, in Rhythm 1.0’s words
07
Confirmed
When codes and detailed currency settings are both supplied, the codes define membership and the matching settings define each member’s behaviour.
policyservicetest
services-accounting:modules/books/tests/integration/services/persistence/business-units.integration.spec.js#lets the codes govern when both are sent (the console’s round trip), the settings applying to the codes they name
08must prove
Confirmed
An account creation and concurrent removal of its currency cannot both succeed with the account left in an unsupported currency.
invariantdatabasetest
09
Confirmed
The console displays supported currencies while multicurrency is enabled and asks for confirmation before disabling it and clearing the set.
policyconsoledocumented

Scenarios

IdGivenWhenThenProvenance
01A unit needs Canadian-dollar and euro trading.The controller enables both currencies and selects provider rates with prohibited base-price calculation for euros.A Canadian-dollar cash account can be saved, after which the currency cannot be removed while that account uses it.test
02Two administrators change the same unit concurrently.One drops euros as the other adds a euro account.One request succeeds and the refused request explains the conflict.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.