01must proveConfirmed | Multicurrency starts disabled; enabling it requires a supported currency, and the supported set takes effect only while the switch is enabled. | validation | api, service, console | test |
02must proveConfirmed | 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. | policy | service | test |
03must proveConfirmed | The supported set contains at most 200 offered currencies, without duplicates or the unit’s base currency. | validation | api, service, database | test |
04must proveConfirmed | 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. | policy | api, service, database | test |
05must proveConfirmed | 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. | invariant | service, database | test |
06must proveConfirmed | GL, bank and merchant accounts accept only currencies enabled for their business unit. ✗ A conflicting configuration receives the stated refusal. | validation | api, service, database | test |
07Confirmed | When codes and detailed currency settings are both supplied, the codes define membership and the matching settings define each member’s behaviour. | policy | service | test |
08must proveConfirmed | An account creation and concurrent removal of its currency cannot both succeed with the account left in an unsupported currency. | invariant | database | test |
09Confirmed | The console displays supported currencies while multicurrency is enabled and asks for confirmation before disabling it and clearing the set. | policy | console | documented |