Currencies

Table of Contents

Currency management is covered here end to end: the ISO 4217 standard and OreStudio's extensions, every screen in the Qt UI, and the three classification tables currencies depend on — rounding types, market tiers, and monetary natures.

Overview

Currencies are the foundational reference data entity. Every trade, cashflow, position, and P&L figure in the system is denominated in a currency; getting the currency record right is a prerequisite for everything else.

ISO 4217 and its limitations

The international standard for currency codes is ISO 4217. It defines a three-letter alphabetic code (USD, EUR, GBP), a three-digit numeric code (840, 978, 826), a currency name, and the number of decimal places — for example, USD has 2 minor units, meaning amounts are expressed to the nearest cent.

ISO 4217 is widely adopted and OreStudio uses it as its primary identifier. However, the standard has gaps that matter in practice:

  • It does not classify currencies by market tier — the distinction between major G10 currencies and emerging-market currencies is economically important but absent from the standard.
  • It does not cover digital assets. Cryptocurrencies such as Bitcoin or Ethereum are increasingly relevant in financial systems but have no ISO 4217 code.
  • It says nothing about display formatting — whether a symbol precedes or follows the amount, what the thousands and decimal separators are, or how the fractional unit is labelled.
  • It does not specify rounding conventions — whether a calculation result should be rounded up, down, or to the nearest unit.

OreStudio extends the ISO 4217 model with additional fields to cover these gaps: monetary nature, market tier, currency symbol, fraction symbol, a printf-style format string, and configurable rounding rules. The standard fields remain primary; the extensions are supplementary.

The Currencies window

Open the Currencies window from the Reference Data menu. It lists all currencies defined in the tenant, with one row per currency.

currencies_main_dialog.png

Figure 1: The Currencies window, showing the full list of currencies in the tenant. Each row shows the ISO code, name, numeric code, symbol, version number, the identity of the last modifier, and when the record was last recorded. The status bar shows the current page and total record count.

The toolbar buttons reload the list and adjust the display. The list is paginated; use the page controls at the bottom right to navigate. Double-clicking a row opens the Currency Details dialog.

Currency Details

The Currency Details dialog has four tabs: General, Formatting, Rounding, and Provenance. The three action buttons at the bottom — Delete, Close, and Save — apply to the currency as a whole.

General

currency_details_general.png

Figure 2: The General tab for the Angolan Kwanza (AOA). It shows the ISO code, full name, numeric code, monetary nature, market tier, and the country flag icon associated with the currency.

The General tab carries the core identity of the currency:

  • ISO Code — the three-letter ISO 4217 alphabetic code. This is the primary key and cannot be changed after creation.
  • Name — the full English name of the currency (e.g. Angolan Kwanza).
  • Numeric Code — the ISO 4217 numeric code (e.g. 973 for AOA).
  • Asset Class — the monetary nature of the currency: fiat for a government-issued currency, crypto.major for a major digital asset. See Monetary Natures below for the full list.
  • Market Tier — the currency's liquidity classification: g10 for the major currencies, emerging for others. See Market Tiers below.
  • Icon — the country flag for the currency's issuing nation, populated automatically from the system's image dataset on import.

Formatting

currency_details_formatting.png

Figure 3: The Formatting tab for AOA, showing the currency symbol (Kz), the fractional unit symbol (c for centavo), fractions per unit (100), and the display format string.

The Formatting tab controls how currency amounts are displayed:

  • Symbol — the currency symbol, e.g. Kz for the Kwanza or $ for the US Dollar.
  • Fraction Symbol — the symbol for the fractional unit, e.g. c for centavo.
  • Fractions Per Unit — the number of fractional units in one whole unit. Most fiat currencies use 100; the Kuwaiti Dinar uses 1000; currencies with no fractional unit (e.g. Japanese Yen) use 0; cryptocurrencies typically use 100000000.
  • Format — a printf-style format string controlling amount rendering, e.g. Kz#,##0.00 produces Kz1,234.56.

Rounding

The Rounding tab controls how calculated amounts are rounded before storage and display:

  • Rounding Type — the rounding algorithm applied to amounts in this currency. See Rounding Types below for the full list of options.
  • Rounding Precision — the number of decimal places to round to. Typically 2 for most fiat currencies and 8 for cryptocurrencies.

Provenance

currency_details_provenance.png

Figure 4: The Provenance tab showing record metadata: version number, the service that last modified the record, who performed the operation, when it was recorded, the change reason code, and a free-text commentary.

The Provenance tab is read-only and shows the audit metadata for the current version. See the Reference Data — Provenance section for a full description of the provenance fields common to all reference data entities.

Editing a currency

To edit a currency, open it in the Currency Details dialog, make your changes, and click Save. Before the record is written, OreStudio prompts for a change reason.

currency_details_change_reason.png

Figure 5: The Change Reason Required dialog, which appears before every save. A reason code must be selected; commentary is optional for some reason codes and required for others.

Select a Reason from the drop-down and add optional Commentary. Click Save to confirm. Every save creates a new version; the previous version is never overwritten.

Currency history

To view the full change history, open the details dialog and click the history icon in the title bar, or right-click the row and choose History.

currency_history_dialog.png

Figure 6: The History dialog for the Angolan Kwanza, showing three versions: the original ISO 4217 import (version 1), a test correction (version 2), and a final rectification (version 3, currently selected). The Changes tab shows that only the Name and Commentary fields changed between version 2 and version 3.

Select a version to populate the detail panel. The Changes tab shows which fields changed between the selected version and its predecessor. The Revert button reinstates any historical version as a new version, preserving the full audit chain.

Auxiliary Data

The three tables described in this section act as classification vocabularies for currencies. In a standard deployment their values are fixed at provisioning time and rarely change; OreStudio still versions and audits them the same way as any other reference data. They are managed by the system tenant and are accessible from the Reference Data → Currencies sub-menu.

Rounding Types

Rounding types specify the algorithm used to round currency amounts in financial calculations. The values match the roundingType enumeration in ORE's XML schema, ensuring consistency with any ORE configuration files loaded into the system.

Open the Rounding Types window from Reference Data → Currency Codes or from the toolbar within the Currency Detail dialog.

rounding_types_main_window.png

Figure 7: The Rounding Types list window showing the five standard rounding methods with their display order, version, and provenance.

Double-clicking a row opens the detail dialog, which shows the code, name, and a description that includes numeric examples at two decimal places.

rounding_types_details.png

Figure 8: The detail dialog for the Up rounding type, showing the code, human-readable name, and a description with concrete examples.

There are five standard values:

Up

Rounds away from zero regardless of the fractional part. The amount is always moved to the next representable value in the direction away from zero.

Examples at 2 decimal places: 2.341 → 2.35, 2.349 → 2.35. For negative amounts: -2.341 → -2.35.

Use Up when amounts must never be understated — for example, when calculating a fee that must cover the full cost.

Down

Truncates toward zero. The fractional part is discarded.

Examples: 2.349 → 2.34, -2.341 → -2.34.

Use Down in conservative contexts where overstating an amount would be the more serious error — for example, when reporting a liability that should not be exaggerated.

Closest

Rounds to the nearest representable value, with halves rounded away from zero. This is the most common rounding mode for financial amounts and is the default for most fiat currencies.

Examples: 2.344 → 2.34, 2.345 → 2.35, -2.345 → -2.35.

Floor

Always rounds toward negative infinity — i.e., to the next lower value regardless of sign. Unlike Down, which rounds toward zero, Floor produces different results for negative amounts.

Examples: 2.349 → 2.34, -2.341 → -2.35.

Use Floor when rounding must never produce a value higher than the unrounded input, even for negative amounts.

Ceiling

Always rounds toward positive infinity — i.e., to the next higher value regardless of sign.

Examples: 2.341 → 2.35, -2.349 → -2.34.

Use Ceiling when rounding must never produce a value lower than the unrounded input.

Market Tiers

Market tiers classify currencies by liquidity profile and market accessibility. The classification feeds into margin calculations, settlement conventions, and risk limits in downstream analytics.

Open the Currency Market Tiers window from Reference Data → Classifications.

currency_market_tiers_main_window.png

Figure 9: The Currency Market Tiers list showing all five standard tiers — historical, g10, frontier, exotic, and emerging — with their display order and provenance.

currency_market_tier_details.png

Figure 10: The detail dialog for the historical tier, showing the code, name, and description.

There are five standard tiers:

G10 / Majors

The ten most liquid and widely traded global currencies: USD, EUR, GBP, JPY, CHF, AUD, NZD, CAD, SEK, and NOK. G10 currencies have deep interbank markets, tight bid/offer spreads, and continuous 24-hour liquidity. They are the primary currencies for derivatives trading and the dominant funding and collateral currencies in global finance.

Emerging

Currencies from developing economies with growing but still maturing financial markets. They typically have moderate liquidity, wider spreads than G10, and may be subject to capital controls or central bank intervention. Examples include BRL (Brazilian Real), MXN (Mexican Peso), ZAR (South African Rand), INR (Indian Rupee), and CNY (Chinese Renminbi).

Exotic

Thinly traded currencies with wide bid/offer spreads and limited liquidity outside their domestic market. Forward markets may be shallow or absent. Examples include currencies of smaller African, Central Asian, or Pacific island nations.

Frontier

Currencies from frontier markets with limited or restricted convertibility. These may be pegged to a major currency, subject to official exchange rates, or carry transfer restrictions that make them impractical for cross-border settlement. Examples include currencies from markets classified as frontier by MSCI or FTSE Russell.

Historical

Currencies no longer in active use. This includes legacy eurozone currencies superseded by the Euro (DEM, FRF, ITL, ESP, and others), as well as currencies from defunct states or monetary unions. Historical currencies are retained in the system for back-office reconciliation and historical analytics on older trade populations.

Monetary Natures

Monetary nature classifies currencies by the underlying economic mechanism that gives them value. The classification matters for collateral eligibility, regulatory capital treatment, and the applicability of pricing models.

Open the Monetary Natures window from Reference Data → Classifications.

monetary_natures_main_window.png

Figure 11: The Monetary Natures list showing all four standard values — synthetic, supranational, fiat, and commodity — with their display order and provenance.

monetary_natures_details.png

Figure 12: The detail dialog for the synthetic monetary nature, showing the code, name, and description.

There are four standard values:

Fiat

Government-issued currency that derives its value from legal tender status rather than from a physical commodity. The issuing central bank or treasury manages supply through monetary policy. The overwhelming majority of currencies in the ISO 4217 standard are fiat — USD, EUR, GBP, JPY, and so on.

Commodity

Currency backed by or representing a claim on a physical commodity. In practice this covers the ISO 4217 commodity codes: XAU (gold), XAG (silver), XPT (platinum), and XPD (palladium). Pricing is driven by spot commodity markets rather than interest rate differentials.

Synthetic

Artificially constructed currency or index that does not correspond to any single government or commodity. Examples include basket currencies and internal transfer pricing units used within large financial institutions.

Supranational

Currency issued by a multi-national authority rather than a single sovereign. The primary example is XDR (Special Drawing Rights), issued by the International Monetary Fund as an international reserve asset and valued as a basket of USD, EUR, CNY, JPY, and GBP — reviewed and revised by the IMF every five years.

Shell commands

The ORE Studio interactive shell provides quick currency access without opening the Qt UI:

# List all currencies (paginated)
currencies get

# Add a new currency:
#   <iso_code> <name> <numeric_code> <symbol> <fractions_per_unit>
#   <change_reason_code> <change_commentary>
currencies add XTS "Test Currency" 963 T$ 100 system.test "manual example"

# Delete a currency by ISO code
currencies delete XTS

# Show history for a currency
currencies history USD

CLI commands

The ores.cli command-line tool provides a richer interface for automation. All currency commands live under ores.cli refdata currencies:

# List all currencies as a table
ores.cli refdata currencies list --format table

# List a specific currency as JSON
ores.cli refdata currencies list --format json --key EUR

# Add a new currency
ores.cli refdata currencies add \
  --iso-code XTS --name "Test Currency" \
  --numeric-code 963 --modified-by operator \
  --currency-type fiat

# Delete a currency by ISO code
ores.cli refdata currencies delete --iso-code XTS

# Export all currencies to a file
ores.cli refdata currencies export --output currencies.json

Summary

This chapter documented the currency entity end to end. ISO 4217 provides the standard identity — code, numeric code, name, minor units — and OreStudio's extensions cover what the standard leaves out: market tiers, monetary natures for digital assets, display formatting, and rounding conventions. The Qt windows manage the records under the full data quality regime of the previous chapter, the three auxiliary classification tables govern the values a currency may reference, and the shell and CLI expose the same operations for scripted use. Currencies are the template: subsequent entity chapters follow this same shape.

See also

Emacs 29.1 (Org mode 9.6.6)