Multi-Currency Operations
NetSuite OneWorld supports multiple currencies across subsidiaries, enabling global operations with proper currency tracking, translation, and revaluation.
Currency Architecture
Multi-Currency Structure
═══════════════════════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────────────────────┐
│ ONEWORLD ACCOUNT │
│ │
│ Base Currency: USD (for consolidation) │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ USA Subsidiary │ │ UK Subsidiary │ │ Germany Sub │ │
│ │ ─────────────── │ │ ─────────────── │ │ ─────────────── │ │
│ │ │ │ │ │ │ │
│ │ Functional: USD │ │ Functional: GBP │ │ Functional: EUR │ │
│ │ │ │ │ │ │ │
│ │ Can transact: │ │ Can transact: │ │ Can transact: │ │
│ │ • USD │ │ • GBP │ │ • EUR │ │
│ │ • EUR │ │ • USD │ │ • USD │ │
│ │ • CAD │ │ • EUR │ │ • GBP │ │
│ │ │ │ │ │ │ │
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │ │
│ └─────────────────────┼─────────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────┐ │
│ │ CONSOLIDATION │ │
│ │ Currency: USD │ │
│ │ │ │
│ │ GBP → USD translation │ │
│ │ EUR → USD translation │ │
│ └─────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Currency Types
Functional vs Transaction Currency
| Type | Definition | Example |
|---|---|---|
| Base/Functional Currency | Primary currency of the subsidiary | UK Sub uses GBP |
| Transaction Currency | Currency of individual transaction | UK Sub invoices in EUR |
| Consolidation Currency | Currency for consolidated reports | Parent uses USD |
Currency Layers in a Transaction
═══════════════════════════════════════════════════════════════════════════════
UK Subsidiary sells to French customer:
TRANSACTION CURRENCY: EUR
─────────────────────────────────────────────────────────────────────────────
Invoice Amount: €10,000
(Customer's currency)
FUNCTIONAL CURRENCY: GBP
─────────────────────────────────────────────────────────────────────────────
Invoice in Books: £8,696
(€10,000 ÷ 1.15 EUR/GBP rate)
CONSOLIDATION CURRENCY: USD
─────────────────────────────────────────────────────────────────────────────
Consolidated Report: $10,870
(£8,696 × 1.25 GBP/USD rate)
NetSuite tracks all three amounts automatically
Exchange Rate Setup
Currency Record
Navigation: Lists > Accounting > Currencies
Currency Record Configuration
═══════════════════════════════════════════════════════════════════════════════
┌─ Currency: British Pound ────────────────────────────────────────────────────┐
│ │
│ Name: British Pound │
│ Symbol: £ │
│ ISO Code: GBP │
│ │
│ Exchange Rate Type: │
│ ● Current ← Updates with market rates │
│ ○ Historical ← Fixed rate (rarely used) │
│ │
│ Display Symbol: [▼ Before Amount ] → £1,000.00 │
│ │
│ Decimal Precision: [▼ 2 ] │
│ │
│ Locale: [▼ United Kingdom ] │
│ │
│ ☑ Available for All Subsidiaries │
│ OR │
│ ☐ Specific Subsidiaries: [Select...] │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
Exchange Rate Management
Navigation: Lists > Accounting > Currency Exchange Rates
Exchange Rate Entry
═══════════════════════════════════════════════════════════════════════════════
┌─ Exchange Rate ──────────────────────────────────────────────────────────────┐
│ │
│ Base Currency: USD │
│ Transaction Curr: GBP │
│ │
│ Effective Date: 01/31/2025 │
│ │
│ Exchange Rate: 1.25 │
│ (1 GBP = 1.25 USD) │
│ │
│ Rate Types: │
│ ───────────────────────────────────────────────────────────────────────── │
│ │
│ ☑ Current Rate: 1.2500 ← For balance sheet items │
│ ☑ Average Rate: 1.2350 ← For income statement items │
│ ☑ Historical Rate: 1.2000 ← For equity items (if applicable) │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
RATE TYPES USAGE:
─────────────────────────────────────────────────────────────────────────────
Current Rate: Assets, Liabilities (period-end)
Average Rate: Revenue, Expenses (weighted average for period)
Historical Rate: Equity, Fixed Assets at acquisition (sometimes)
Automatic Rate Updates
Exchange Rate Integration Options
═══════════════════════════════════════════════════════════════════════════════
OPTION 1: Manual Entry
─────────────────────────────────────────────────────────────────────────────
• User enters rates daily/weekly/monthly
• Best for controlled environments
• Labor-intensive
OPTION 2: CSV Import
─────────────────────────────────────────────────────────────────────────────
• Import rates via CSV file
• Good for batch updates
• Can be scheduled
OPTION 3: Exchange Rate Integration (Third-Party)
─────────────────────────────────────────────────────────────────────────────
• Automatic feed from providers (XE, OANDA, etc.)
• Real-time or daily updates
• Requires SuiteApp or integration
OPTION 4: Web Services Integration
─────────────────────────────────────────────────────────────────────────────
• Custom script fetches rates
• Updates rates via SuiteScript
• Full control over source and timing
Transaction Processing
Foreign Currency Transaction
Foreign Currency Sale
═══════════════════════════════════════════════════════════════════════════════
UK Subsidiary (Functional: GBP) sells in EUR:
SALES ORDER:
─────────────────────────────────────────────────────────────────────────────
Customer: French Customer
Currency: EUR
Amount: €10,000
Exchange Rate: 1.15 EUR/GBP (auto-populated)
Base Amount: £8,696
INVOICE GL ENTRY:
─────────────────────────────────────────────────────────────────────────────
┌───────────────────────────────┬──────────────┬──────────────┬───────────┐
│ Account │ Debit (GBP) │ Credit (GBP) │ EUR │
├───────────────────────────────┼──────────────┼──────────────┼───────────┤
│ Accounts Receivable │ £8,696 │ │ €10,000 │
│ Sales Revenue │ │ £8,696 │ €10,000 │
└───────────────────────────────┴──────────────┴──────────────┴───────────┘
Both functional (GBP) and transaction (EUR) amounts tracked.
PAYMENT RECEIVED (rate changed to 1.18):
─────────────────────────────────────────────────────────────────────────────
┌───────────────────────────────┬──────────────┬──────────────┬───────────┐
│ Account │ Debit (GBP) │ Credit (GBP) │ EUR │
├───────────────────────────────┼──────────────┼──────────────┼───────────┤
│ Bank - EUR │ £8,475 │ │ €10,000 │
│ Accounts Receivable │ │ £8,696 │ €10,000 │
│ FX Gain/Loss │ £221 │ │ - │
└───────────────────────────────┴──────────────┴──────────────┴───────────┘
FX Loss: Rate moved from 1.15 to 1.18 (EUR weakened vs GBP)
£8,696 - £8,475 = £221 loss
Currency Revaluation
Revaluation Process
Currency Revaluation
═══════════════════════════════════════════════════════════════════════════════
PURPOSE: Adjust unrealized FX gains/losses on open balances at period-end
BEFORE REVALUATION (Dec 31):
─────────────────────────────────────────────────────────────────────────────
UK Subsidiary has €50,000 AR balance
Original booking rate: 1.15 EUR/GBP → £43,478
Current rate: 1.12 EUR/GBP → £44,643
Difference: £1,165 unrealized gain (EUR strengthened)
RUN REVALUATION:
─────────────────────────────────────────────────────────────────────────────
Navigation: Transactions > Financial > Revalue Open Currency Balances
┌─ Revaluation Settings ─────────────────────────────────────────────────┐
│ │
│ Subsidiary: [▼ UK Operations ] │
│ Revaluation Date: 12/31/2025 │
│ │
│ Accounts to Revalue: │
│ ☑ Accounts Receivable │
│ ☑ Accounts Payable │
│ ☑ Bank Accounts │
│ ☐ Intercompany (if separate) │
│ │
│ Exchange Rate Source: [▼ Current Rate ] │
│ │
│ Unrealized FX Account: [▼ 7200 - Unrealized FX Gain/Loss ] │
│ │
└────────────────────────────────────────────────────────────────────────┘
REVALUATION ENTRY:
─────────────────────────────────────────────────────────────────────────────
┌───────────────────────────────┬──────────────┬──────────────┐
│ Account │ Debit (GBP) │ Credit (GBP) │
├───────────────────────────────┼──────────────┼──────────────┤
│ Accounts Receivable │ £1,165 │ │
│ Unrealized FX Gain │ │ £1,165 │
└───────────────────────────────┴──────────────┴──────────────┘
Revaluation Timing
| Frequency | Use Case |
|---|---|
| Monthly | Standard practice for accurate monthly close |
| Quarterly | Minimum for quarterly reporting |
| Daily | High-volume FX exposure, trading companies |
| Real-time | Not typical, revaluation is period-end process |
Consolidation Translation
Translation Methods
Translation for Consolidation
═══════════════════════════════════════════════════════════════════════════════
UK Subsidiary (GBP) translating to Parent (USD):
BALANCE SHEET (Current Rate Method):
─────────────────────────────────────────────────────────────────────────────
Assets/Liabilities: Period-end rate
Equity: Historical rate (or accumulated translation)
Example (Dec 31, Rate: 1.25 GBP/USD):
┌─────────────────────────┬────────────┬────────────┬────────────┐
│ Account │ GBP │ Rate │ USD │
├─────────────────────────┼────────────┼────────────┼────────────┤
│ Cash │ £100,000 │ 1.25 │ $125,000 │
│ Accounts Receivable │ £200,000 │ 1.25 │ $250,000 │
│ Fixed Assets │ £500,000 │ 1.25 │ $625,000 │
│ ─────────────────────── │ ────────── │ ────────── │ ────────── │
│ Total Assets │ £800,000 │ │ $1,000,000 │
│ │ │ │ │
│ Liabilities │ £300,000 │ 1.25 │ $375,000 │
│ Equity │ £500,000 │ Hist. │ $600,000 │
│ CTA (Plug) │ - │ │ $25,000 │
│ ─────────────────────── │ ────────── │ ────────── │ ────────── │
│ Total L+E │ £800,000 │ │ $1,000,000 │
└─────────────────────────┴────────────┴────────────┴────────────┘
CTA = Cumulative Translation Adjustment (equity plug)
INCOME STATEMENT (Average Rate Method):
─────────────────────────────────────────────────────────────────────────────
Revenue/Expenses: Average rate for period
Example (Annual Average Rate: 1.23 GBP/USD):
┌─────────────────────────┬────────────┬────────────┬────────────┐
│ Account │ GBP │ Rate │ USD │
├─────────────────────────┼────────────┼────────────┼────────────┤
│ Revenue │ £1,000,000 │ 1.23 │ $1,230,000 │
│ COGS │ £600,000 │ 1.23 │ $738,000 │
│ Operating Expenses │ £200,000 │ 1.23 │ $246,000 │
│ ─────────────────────── │ ────────── │ ────────── │ ────────── │
│ Net Income │ £200,000 │ │ $246,000 │
└─────────────────────────┴────────────┴────────────┴────────────┘
Cumulative Translation Adjustment (CTA)
CTA Explanation
═══════════════════════════════════════════════════════════════════════════════
The CTA is an equity account that absorbs translation differences:
WHY CTA EXISTS:
─────────────────────────────────────────────────────────────────────────────
• Balance sheet uses current rate
• Income statement uses average rate
• Equity uses historical rate
• These rates differ → imbalance
CTA = Translation "plug" to make balance sheet balance
CTA MOVEMENT:
─────────────────────────────────────────────────────────────────────────────
Opening CTA: $20,000
Current year translation:
• Net income translated: $246,000 (at average)
• Net assets change: $250,000 (at current)
• Difference: $4,000
Closing CTA: $24,000
This appears in Equity section of consolidated balance sheet
Not a gain/loss in P&L (it's in Other Comprehensive Income)
SuiteQL Queries
FX Exposure Report
-- Open foreign currency balances
SELECT
s.name AS subsidiary,
a.accountsearchdisplayname AS account,
t.currency,
c.symbol AS currency_symbol,
SUM(tl.foreignamount) AS open_foreign_amount,
SUM(tl.amount) AS open_base_amount,
ROUND(SUM(tl.foreignamount) / NULLIF(SUM(tl.amount), 0), 4) AS avg_rate
FROM
transaction t
JOIN transactionline tl ON t.id = tl.transaction
JOIN account a ON tl.account = a.id
JOIN subsidiary s ON t.subsidiary = s.id
JOIN currency c ON t.currency = c.id
WHERE
a.accttype IN ('AcctRec', 'AcctPay', 'Bank')
AND t.status NOT IN ('Voided', 'Closed')
AND tl.foreignamount != 0
AND t.currency != s.currency -- Foreign currency only
GROUP BY
s.name, a.accountsearchdisplayname, t.currency, c.symbol
HAVING
SUM(tl.foreignamount) != 0
ORDER BY
ABS(SUM(tl.foreignamount)) DESC
Realized FX Gains/Losses
-- Realized FX by period
SELECT
s.name AS subsidiary,
TO_CHAR(t.trandate, 'YYYY-MM') AS period,
SUM(CASE WHEN tal.amount > 0 THEN tal.amount ELSE 0 END) AS fx_gains,
SUM(CASE WHEN tal.amount < 0 THEN ABS(tal.amount) ELSE 0 END) AS fx_losses,
SUM(tal.amount) AS net_fx
FROM
transactionaccountingline tal
JOIN transaction t ON tal.transaction = t.id
JOIN account a ON tal.account = a.id
JOIN subsidiary s ON t.subsidiary = s.id
WHERE
a.acctnumber LIKE '71%' -- FX Gain/Loss accounts
AND t.trandate >= ADD_MONTHS(SYSDATE, -12)
GROUP BY
s.name, TO_CHAR(t.trandate, 'YYYY-MM')
ORDER BY
s.name, period DESC
Best Practices
| Practice | Recommendation |
|---|---|
| Rate Updates | Update rates at least weekly, daily for high-volume |
| Revaluation | Run monthly before closing |
| Rate Source | Use consistent, documented rate source |
| CTA Review | Monitor CTA movement, explain large changes |
| FX Exposure | Report and hedge significant exposures |
Related Documentation
- Consolidation & Elimination - Period-end consolidation
- Consolidated Reporting - Multi-currency reports
- Intercompany Settlement - FX in IC transactions