Overview
Accountability provides comprehensive multi-currency support following ASC 830 (Foreign Currency Matters):- Functional currency per company (primary economic environment)
- Transaction currency for foreign currency transactions
- Reporting currency for consolidated financial statements
- Exchange rate management with multiple rate types
- Currency translation for consolidation
Multi-currency accounting is essential for multinational organizations operating across different economic environments and jurisdictions.
Currency Data Model
packages/core/src/currency/Currency.ts
Currency Codes
Accountability uses ISO 4217 three-letter currency codes:packages/core/src/currency/CurrencyCode.ts
- USD - United States Dollar
- EUR - Euro
- GBP - British Pound Sterling
- JPY - Japanese Yen
- CNY - Chinese Yuan
Decimal Places
Different currencies use different decimal places:packages/core/src/currency/Currency.ts
- 2 Decimal Places (Most Common)
- 0 Decimal Places
- 3 Decimal Places
- 4 Decimal Places
USD, EUR, GBP, CAD, AUD, CHF, etc.Example: $1,234.56
Predefined Currencies
packages/core/src/currency/Currency.ts
Functional vs Reporting Currency
Functional Currency
Definition: The currency of the primary economic environment in which the entity operates. Determined by analyzing:-
Cash flow indicators
- Currency that mainly influences sales prices
- Currency of country whose competitive forces determine sales prices
-
Sales price indicators
- Currency in which sales prices are denominated and settled
-
Expense indicators
- Currency in which labor, materials, and other costs are denominated and settled
-
Financing indicators
- Currency in which funds are generated (equity, debt)
- Currency in which receipts from operating activities are retained
- Example 1: US Subsidiary
- Example 2: UK Subsidiary
- Example 3: Export-Heavy Subsidiary
Company: Acme US, Inc.
- Generates revenue in USD
- Pays expenses in USD
- Operates in United States
- Financing in USD
Functional currency is determined once at inception and rarely changes. A change requires significant changes to the economic environment.
Reporting Currency
The currency used for presenting financial statements:- Chosen by management for consolidated reporting
- Often the functional currency of the parent company
- Used for investor and regulatory reporting
- Parent: US company, functional currency USD
- Subsidiary: UK company, functional currency GBP
- Reporting Currency: USD (for consolidated statements)
- Translation: GBP → USD using ASC 830 rules
Exchange Rates
packages/core/src/currency/ExchangeRate.ts
Rate Types
packages/core/src/currency/ExchangeRate.ts
- Spot
- Average
- Historical
- Closing
Current market rate at a point in timeUse for: Transaction-date conversionsExample: EUR/USD = 1.10 on March 15, 2025
Rate Sources
packages/core/src/currency/ExchangeRate.ts
Manual
Manual
Manually entered by user
- Entered via UI form
- Used for custom rates or overrides
- Audited with user ID and timestamp
Import
Import
Imported from file or external system
- Bulk import via CSV/Excel
- Historical rate uploads
- Integration with treasury system
API
API
Retrieved from API feed
- Automatic daily updates
- Sources: ECB, Federal Reserve, Bloomberg, etc.
- Scheduled sync jobs
Exchange Rate Precision
Exchange rates use BigDecimal for high precision:BigDecimal avoids floating-point precision issues. All monetary calculations use BigDecimal for accuracy.
Recording Foreign Currency Transactions
When a transaction occurs in a currency other than the functional currency:Record at Transaction Date
Convert foreign currency amount to functional currency using spot rate at transaction dateExample:
- Date: March 1, 2025
- Transaction: €1,000 purchase
- Spot rate: 1 EUR = 1.10 USD
- Record: $1,100 expense
Recognize Exchange Gain/Loss (if applicable)
For monetary items (receivables, payables), recognize exchange gain/loss at settlement or period endExample:
- AP booked: €1,000 = $1,100 (rate 1.10)
- Payment date: March 30, 2025
- Spot rate: 1 EUR = 1.08 USD
- Payment: €1,000 = $1,080
- Exchange gain: 1,080 instead of $1,100)
Multi-Currency Journal Entry Example
Scenario: US company (functional currency USD) records EUR invoice- Validates both lines are in EUR (transaction currency)
- Looks up EUR/USD exchange rate for March 1, 2025
- Converts each line to USD (functional currency):
- Debit: €1,000 × 1.10 = $1,100
- Credit: €1,000 × 1.10 = $1,100
- Stores both transaction and functional amounts
Currency Translation for Consolidation
When consolidating subsidiaries with different functional currencies:Current Rate Method (ASC 830-30)
Used when functional currency ≠ reporting currency:- Assets & Liabilities
- Revenue & Expenses
- Equity
- Translation Adjustment
Translate at current (closing) rate at balance sheet dateExample:
- UK subsidiary: Cash £100,000
- Dec 31 rate: 1 GBP = 1.25 USD
- Translated: $125,000
Remeasurement Method
Used when entity operates in highly inflationary economy or books of record are not in functional currency:- Monetary items: Current rate
- Non-monetary items: Historical rate
- Remeasurement gain/loss: Included in net income
Currency Restrictions
Accounts can optionally be restricted to a specific currency:packages/core/src/accounting/Account.ts
- Bank Accounts: EUR bank account only accepts EUR transactions
- Foreign Currency Accounts: JPY cash account for Japan operations
- Intercompany Accounts: USD intercompany payable for US parent
- Journal entry lines posting to restricted accounts must use the restricted currency
- Attempts to post in other currencies will fail with validation error
Most accounts have no currency restriction (
currencyRestriction: null), allowing transactions in any currency. Use restrictions sparingly for specific bank accounts or foreign currency holdings.Best Practices
Functional Currency Determination
Functional Currency Determination
Document your functional currency analysis:
- Economic factors: Cash flows, pricing, expenses, financing
- Management assessment: Support with memos and analysis
- Consistency: Apply consistently unless facts change
- Audit support: Retain documentation for auditors
Exchange Rate Sources
Exchange Rate Sources
Use reliable, auditable exchange rate sources:Recommended Sources:
- European Central Bank (ECB) - free daily rates
- Federal Reserve H.10 release - official US rates
- OANDA - commercial FX data provider
- Bloomberg/Reuters - for financial institutions
- Record rate source and date
- Maintain audit trail of rates used
- Consistent methodology (always use ECB, always use closing rate, etc.)
Period-End Currency Revaluation
Period-End Currency Revaluation
At each period end, revalue foreign currency monetary items:
- Identify monetary items: Cash, AR, AP, loans in foreign currency
- Apply current rate: Use period-end closing rate
- Calculate gain/loss: Compare to carrying amount
- Record entry: Recognize unrealized gain/loss in income
- AR: €10,000 booked at 1.10 = $11,000
- Month-end rate: 1.12
- Revalued: €10,000 × 1.12 = $11,200
- Unrealized gain: $200 (credit to “Foreign Exchange Gain”)
Consolidation Translation
Consolidation Translation
Follow ASC 830 methodology:
- Identify functional currency for each entity
- Record transactions in functional currency
- Translate to reporting currency at consolidation:
- Assets/Liabilities: Closing rate
- Income/Expenses: Average rate
- Equity: Historical rates
- Record CTA in AOCI (Accumulated Other Comprehensive Income)
Technical Details
Monetary Amount Type
packages/core/src/shared/values/MonetaryAmount.ts
Currency Conversion Helper
packages/core/src/currency/ExchangeRate.ts
Type Guards
Related Pages
- Organizations - Reporting currency configuration
- Companies - Functional currency per company
- Journal Entries - Multi-currency transaction recording
- Chart of Accounts - Currency restrictions on accounts