Skip to main content

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

TypeDefinitionExample
Base/Functional CurrencyPrimary currency of the subsidiaryUK Sub uses GBP
Transaction CurrencyCurrency of individual transactionUK Sub invoices in EUR
Consolidation CurrencyCurrency for consolidated reportsParent 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

FrequencyUse Case
MonthlyStandard practice for accurate monthly close
QuarterlyMinimum for quarterly reporting
DailyHigh-volume FX exposure, trading companies
Real-timeNot 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

PracticeRecommendation
Rate UpdatesUpdate rates at least weekly, daily for high-volume
RevaluationRun monthly before closing
Rate SourceUse consistent, documented rate source
CTA ReviewMonitor CTA movement, explain large changes
FX ExposureReport and hedge significant exposures