> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.fynapse.app/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.fynapse.app/_mcp/server.

# Multiple Currencies Configuration

> Learn how to configure multiple currencies in Fynapse.

## Overview

Multiple currencies can be configured either via the UI or by uploading a properly configured JSON file.

## How to Configure Multiple Currencies in the UI?

To configure multiple currencies capability, you have to perform the following steps:

> **Warning**
>
> Note that the multiple currencies capability can only be enabled on a clean Fynapse instance prior to creating a Journal Line Definition.
> After you configure the Journal Line Definition, the capability to enable support for multiple currencies will be permanently disabled.
> Once support for multiple currencies is enabled, it cannot be disabled.

#### System Settings

You begin by enabling the support for multiple currencies in Fynapse.

1. Go to **System Configurations > System Settings**.
2. Click the **Edit** button.
3. In the Multiple currencies support section, select the **Enable functional and reporting currencies** checkbox.
4. Click **Save** to enable multiple currencies support or **Cancel** to discard your changes.
   > **Warning**
   >
   > If you cancel, then remember you can only enable multiple currencies capability before you start creating the Journal Line Definition.

#### Currency Configuration

After you enable support for multiple currencies, you can configure the reporting currencies.

Currently, this is an optional step. You can skip configuring reporting currencies if you only want to have functional amounts on Journals.

> **Info**
>
> The **Currencies Configuration** screen will appear in the **Configuration** menu after support for multiple currencies is enabled.

1. Go to **System Configurations > Currencies Configuration**.
2. Click the **Edit** button.
3. In the **Operations section**, you have to select which conversion mode for FX you want to use:
   1. **Always perform FX conversion** - the conversion will always be performed, regardless of whether any values are provided from upstream systems
   2. **Values from upstream only** - no conversion is performed, only values provided from upstream systems are passed on to Journals
   3. **Prioritise values from upstream** - a mixed conversion mode where if a value is provided from an upstream system it is passed on to Journals, if no value is provided Fynapse performs the conversion
      > **Info**
      >
      > If no conversion mode is selected, the system will use the default, i.e., prioritize values from upstream.
      > **Warning**
      >
      > Remember that if you select **Values from upstream only**, you have to map all Functional and Reporting Amount fields for all Posting Patterns on the **Accounting Rules Navigator** screen.
      > If you select **Prioritise values from upstream**, the Functional and Reporting Amount fields are not mandatory, but you have to map them for the Posting Patterns which will be propagating the values provided from upstream. Posting Patterns without this mapping will be performing conversion.
4. In the **Currencies section** you have to select the functional currencies and, optionally reporting currencies:
   1. Select the currency code for the functional currency from the **Functional currencies** drop-down list. Add as many functional currencies as you need.
   2. Select the currency code for the reporting currency from the **Reporting currencies** drop-down list. Add as many reporting currencies as you need.
5. In the **Rate sets** section you have to define the rate sets:
   1. Add a rate set by typing in the **Rate sets** field. You can add as many as you need.
      > **Warning**
      >
      > This name has to exactly correspond to the name in the CSV file used to load data for the Exchange Rates Entity.
6. Click **Save** to save your reporting currencies or **Cancel** to discard your changes.
   > **Warning**
   >
   > If you cancel, then remember you can only add reporting currencies before you start creating the Journal Line Definition.

> **Tip**
>
> Fynapse is using the list of currency codes published by Six Group, which is available here:
> [Visit SIX Group Data Standards](#)
> in the ISO 4217 - Currency Code Maintenance section.

#### Journal Line Definition

Once you enabled the multiple currencies capability, you can start creating your Journal Line Definition. Enabling multiple currencies requires you to configure two additional Systemic Fields, Functional Currency and Functional Amount, apart from a regular non-multiple currencies definition.

1. Go to **Accounting Configurations > Journals > Journal Line Definition**.
2. Click the **Edit** button.
3. Follow the instructions for Journal Line Definition and remember to configure the multiple currencies-specific Systemic Fields:
   1. Functional Currency
   2. Functional Amount
   3. Reporting Amount Currency
      > **Info**
      >
      > You have to define the same number of Reporting Amount Currency fields to correspond to the number of reporting currencies defined on the **Currency Configuration** screen, e.g., if you define two currencies on the **Currency Configuration** screen - PLN and USD, you have to configure Systemic Fields for these two reporting currencies in the Journal Line Definition.
4. Finish creating the Journal Line Definition.

> **Info**
>
> If you are extending the Primary Key in your Journal Line Definition beyond the default systemic fields, Journal ID and Journal Line ID, you need to ensure to add this additional Primary Key field to the Dimension Sets you define. Otherwise, Fynapse will throw an error and processing of the records will not be successful.

#### Accounting Base

On the **Accounting Bases** screen, select the source for reporting currency in the **Settings** section. You can choose either Transaction Currency or Functional Currency.

This will determine whether Reporting Amounts are calculated from Transaction Amounts or Functional Amounts.

> **Info**
>
> This step is not required if no Reporting Currencies are configured.

#### Subledger Node

The next step is to configure the Functional Currency, Reporting Currency, and Rate Set on the Subledger Node. You can do this by either:

* Going to the **Node Configurations** screen where in the Accounting Bases section you:
* Type the Functional Currency (mandatory)
* Select the Rate Set for the Functional Currency from the drop-down list (mandatory)
* Select the Reporting Currency from the drop-down list (optional)
* Select the Rate Set for each defined Reporting Currency from the drop-down list (mandatory if Reporting Currency is enabled)

or

* Going to the **Accounting Bases** screen where in the **Used in Nodes** section you:
* Type the Functional Currency (mandatory)
* Select the Rate Set for the Functional Currency from the drop-down list (mandatory)
* Select the Reporting Currency from the drop-down list (optional)
* Select the Rate Set for each defined Reporting Currency from the drop-down list (mandatory if Reporting Currency is enabled)

> **Tip**
>
> Fynapse is using the list of currency codes published by Six Group, which is available here:\
> [https://www.six-group.com/en/products-services/financial-information/data-standards.html#scrollTo=section-maintenance-agency](https://www.six-group.com/en/products-services/financial-information/data-standards.html#scrolltosection-maintenance-agency) in the ISO 4217 - Currency Code Maintenance section.

Because the Accounting Bases and Node Configurations link to each other, if you configure the Functional and Reporting Currencies on one screen it will be populated on the other.

> **Info**
>
> Remember, the number of Reporting Currencies defined for a Subledger Node will have to correspond to the number of Reporting Currencies defined on the relevant Posting Pattern in the Accounting Rules Navigator.

#### Accounting Rules Navigator

The final step is to configure the Functional Amount on the relevant DR/CR Posting Patterns.

> **Info**
>
> Note that the Functional Currencies have to balance within a Journal, i.e., the total amount of Debit records must equal the total amount of Credit records.

1. Go to **Accounting Rules Navigator**.
2. Click the **Edit** button.
3. Follow the instructions for creating accounting rules and remember to configure the multiple currencies-specific Functional Amount field on the DR/CR Posting Patterns relevant for a given Business Event. Then:
   1. If you provide the Functional Amount on the Business Event, the amount will be populated in the Journal
   2. If you do not provide the Functional Amount on the Business Event, the amount will be calculated based on the Transaction Amount and the applicable exchange rate, and then populated in the Journal
      > **Warning**
      >
      > If a Business Event triggers two or more Posting Components, where one has Functional Amount configured in Posting Patterns and another one does not have the Functional Amount configured, this Business Event will be errored.
4. If you do not configure the **Functional Amount** field, Fynapse will automatically calculate the Functional Amount based on the Transaction Amount and the applicable exchange rate.
   > **Error**
   >
   > If you configure the Functional Amount only on some of the Posting Patterns, an error will be thrown.
5. If you defined Reporting Currencies for a Subledger Node, remember to configure the same Reporting Currencies for the DR/CR Posting Patterns relevant for a given Business Event. Then, if you provide the Reporting Amount on the Business Event, the amount will be populated in the Journal.
6. If you do not configure the **Reporting Amount** field, Fynapse will not populate the Reporting Amount in the generated Journal.
   > **Error**
   >
   > If you configure the Reporting Amount only on some of the Posting Patterns, an error will be thrown.
7. Finish creating the accounting rules.

#### FX Revaluation Configuration

> **Tip**
>
> For more details about the FX revaluation process, go to [FX Revaluation](/documentation/processing-configuration/multiple-currencies/fx-revaluation).

*How to Configure FX Revaluation Configuration?*

1. Go to **Accounting Configurations > FX Revaluation configurations**.
2. Click **Add**.
3. In the **Details** section:
   1. Type a unique name for the FX revaluation configuration.
   2. You can optionally add a description.
4. In the **Account mapping** section:
   1. Select if you want to define the GL Account by typing the Account numbers (**Define by account numbers**) or by selecting several GL Accounts grouped with a tag (**Define by account tags**). The tag grouping is defined in the [Chart of Accounts](/documentation/accounting-engine/chart-of-accounts).
      1. If you chose **Define by account numbers**, type the ID of the GL Account(s) for which you want to perform FX revaluation. To configure more than one GL account, press either the Enter or Return key to create a list.
         > **Tip**
         >
         > When you type the Accounts by hand, the field provides real-time validation against the Chart of Accounts.
      2. If you chose **Define by account tags**, select the grouping tag from the drop-down list.
   2. Select the **Offset account** from the Chart of Accounts in the drop-down list. This is the account which will be used to balance any offsets from the GL Account(s) you defined in the previous step.
      > **Warning**
      >
      > You cannot use the account that you configured as a GL Account.
   3. Select the **Journal Code** from the drop-down list, select the Journal type of the Journal generated to account the difference to be accounted on the Offset account.
      > **Info**
      >
      > Journal Types are defined on the [Journal Types](/documentation/processing-configuration/journal-configuration/journal-types) screen.
   4. Use the radio button to choose whether you want to assign **One rate set** all configured currencies or **Multiple rate sets** which allows you define a different rate set for each defined currency.
      > **Warning**
      >
      > If you select **Multiple rate sets**, you need to define a rate set for each defined currency.
   5. If you want to create a more complex FX revaluation configuration, click **Add if case** to add another GL Account/Offset account mapping. To remove a mapping, use the trash icon.
      > **Info**
      >
      > You can add as many mappings as you need.
5. Click **Save** to save your configuration, or **Cancel** to discard.
6. You will be prompted to write a comment for the version history. Click **Save new version** to save your configuration or **Cancel** to return to the editing mode.

*How to Edit FX Revaluation Configuration?*

1. Go to **Accounting Configurations > FX Revaluation configurations**.
2. From the grid, select the configuration you want to edit and click the chevron in the **Details** column.
3. Click **Edit**.
4. Make any changes to the configuration you need.
5. Click **Save** to save your changes, or **Cancel** to discard your changes.
6. You will be prompted to write a comment for the version history. Click **Save new version** to save your configuration or **Cancel** to return to the editing mode.

*How to Configure Scheduler?*

> **Info**
>
> Considerations:
>
> 1. The scheduler functionality is equipped with smart validations to ensure if you configure multiple runs they are not in conflict.
> 2. If you enable **Eligible days** as **Working days only**, the labels for Reclassification date will change to **Previous working day** and **Last working day of previous period**

1. Go to **Accounting Configurations > Reclassification > Reclassification Configuration**.
2. You can configure Scheduler:
   1. When you are creating a new FX revaluation configuration. In this case click the **Create new configuration** button, configure the FX revaluation rules and then click the **+ Add recurrence schedule** button in the **Schedule** section.
   2. You can add it later to an existing configuration. Select the configuration from the grid, go to the **Details** screen and click the **Edit configuration** button. Then click the **+ Add recurrence schedule** button in the **Schedule** section.
3. The **+ Add recurrence schedule** button is a drop-down list where you select the frequency of the recurrence of FX revaluation runs:
   1. **Each day** - one or more FX revaluation runs every day
   2. **Each period** - FX revaluation occurs on any day near the first or last day of each fiscal period
   3. **Each fiscal year** - FX revaluation occurs on any day near the first or last day of the selected fiscal year
   4. **Each week** - FX revaluation occurs on selected days of the week
   5. **Each month** - FX revaluation occurs on any day near the first or last day of the selected month
   6. **Each year** - FX revaluation occurs on any day near the first or last day of the selected calendar year
4. Depending on the type of recurrence you select, the configuration will look differently. You can choose multiple different recurrences for one configuration.
5. The **Eligible days** are effective for all types of selected recurrences, you cannot define them for individual recurrences.
   Choose the **Eligible days** - select if you want the FX revaluation runs to occur on:
   1. **Working days only**
   2. **Working and non-working days**
      The working and non-working days are determined based on the Business Calendar assigned to the configuration in Reclassification assignments.
6. **Each day**
   1. **Each day** - select the time for the FX revaluation run; please note that the time is determined by the Subledger Node defined in the Reclassification assignments.
   2. Use **+ Add run** to add more runs per day.
   3. Reclassification date - the date for which FX revaluation run will occur and Journals will be posted
      1. **Current day** - the day on which the FX revaluation run is scheduled
      2. **Previous day** - the day before the FX revaluation run is scheduled
      3. **Last day of previous period** - the last day of the previous period before the FX revaluation run is scheduled, e.g. if FX revaluation run occurs on November 3rd, the Reclassification date will be October 31st.
7. **Each period**
   1. Select when the FX revaluation run occurs **Counted from**:
      1. Start of the period
      2. End of the period
   2. Set a day between 1-26 counting from the start or the end of the period, e.g. if set to **Start of the period** + **Day** = 1, the FX revaluation will run on the first day of the period.
   3. Choose the **Runs time** - select the time for the FX revaluation run; please note that the time is determined by the Subledger Node defined in the Reclassification assignments.
   4. Use **+ Add run** to add more runs.
   5. Reclassification date - the date on which
      1. **Current day** - the day on which the FX revaluation run is scheduled
      2. **Previous day** - the day before the FX revaluation run is scheduled
      3. **Last day of previous period** - the last day of the previous period before the FX revaluation run is scheduled, e.g. if FX revaluation run occurs on November 3rd, the Reclassification date will be October 31st.
8. **Each fiscal year**
   1. Select when the FX revaluation run occurs **Counted from**:
      1. Start of the firscal year
      2. End of the fiscal year
   2. Set a day between 1-26 counting from the start or the end of the fiscal year, e.g. if set to **Start of the fiscal year** + **Day** = 1, the FX revaluation will run on the first day of the fiscal year.
   3. Choose the **Run time** - select the time for the FX revaluation run; please note that the time is determined by the Subledger Node defined in the Reclassification assignments.
   4. Use **+ Add run** to add more runs.
   5. Reclassification date - the date on which
      1. **Current day** - the day on which the FX revaluation run is scheduled
      2. **Previous day** - the day before the FX revaluation run is scheduled
      3. **Last day of previous period** - the last day of the previous period before the FX revaluation run is scheduled, e.g. if FX revaluation run occurs on January 3rd, the Reclassification date will be December 31st.
9. **Each week**
   1. Select the days of the week when you want the FX revaluation to run.
   2. Use **+ Add run** to add more runs.
   3. Choose the **Run time** - select the time for the FX revaluation run; please note that the time is determined by the Subledger Node defined in the Reclassification assignments.
   4. Reclassification date - the date on which
      1. **Current day** - the day on which the FX revaluation run is scheduled
      2. **Previous day** - the day before the FX revaluation run is scheduled
      3. **Last day of previous period** - the last day of the previous period before the FX revaluation run is scheduled, e.g. if FX revaluation run occurs on Monday November 3rd, the Reclassification date will be October 31st.
10. **Each month**
    1. Select when the FX revaluation run occurs **Counted from**:
       1. Start of the month
       2. End of the month
    2. Set a day between 1-26 counting from the start or the end of the month, e.g. if set to **Start of the month** + **Day** = 1, the FX revaluation will run on the first day of the month.
    3. Choose the **Run time** - select the time for the FX revaluation run; please note that the time is determined by the Subledger Node defined in the Reclassification assignments.
    4. Use **+ Add run** to add more runs.
    5. Reclassification date - the date on which
       1. **Current day** - the day on which the FX revaluation run is scheduled
       2. **Previous day** - the day before the FX revaluation run is scheduled
       3. **Last day of previous period** - the last day of the previous period before the FX revaluation run is scheduled, e.g. if FX revaluation run occurs on November 3rd, the Reclassification date will be October 31st.
11. **Each year**
    1. Select when the FX revaluation run occurs **Counted from**:
       1. First day of the year
       2. Last day of the year
    2. Set a day between 1-26 counting from the start or the end of the year, e.g. if set to **Start of the year** + **Day** = 1, the FX revaluation will run on the first day of the year.
    3. Choose the **Run time** - select the time for the FX revaluation run; please note that the time is determined by the Subledger Node defined in the Reclassification assignments.
    4. Use **+ Add run** to add more runs.
    5. Reclassification date - the date on which
       1. **Current day** - the day on which the FX revaluation run is scheduled
       2. **Previous day** - the day before the FX revaluation run is scheduled
       3. **Last day of previous period** - the last day of the previous period before the FX revaluation run is scheduled, e.g. for a configuration using standard Gregorian calendar, if FX revaluation run occurs on January 3rd, the Reclassification date will be December 31st.

*How to Assign FX Revaluation Configuration?*

> **Info**
>
> Once you have defined FX revaluation configurations, you need to assign them to an Accounting Base for revaluation to work.

1. Go to **Accounting Configurations > FX Revaluation assignment**.
2. Click **Edit**.
3. Select the Accounting Bases/Subledger Node combination for which you want to assign a revaluation configuration, then select the configuration from the drop-down list. You can select multiple configurations.
   > **Warning**
   >
   > You cannot assign two configurations which operate on the same accounts to one Accounting Bases/Subledger Node combination. This will cause an error to be thrown.
4. Multiple selection
   1. You can also select multiple Accounting Base/Subledger Node combinations using the check list in the first column on the left.
   2. From the drop-down list at the top of the screen, select the FX revaluation configuration. You can select multiple configurations.
   3. Click the **Assign for selected** button.
5. From the drop-down list at the top of the screen, select the revaluation configuration.
6. Click the **Apply for selected** button.
7. Click **Save** to save your changes, or **Cancel** to discard your changes.

> **Tip**
>
> On the **FX Revaluation assignment** screen you can click the configuration in the **Revaluation Configuration** column, which will redirect you to the details of the given revaluation configuration.
> You can also view the history of changes by clicking the **View History** button.

## How to Configure Multiple Currencies with the JSON File?

You can configure support for multiple currencies by uploading a JSON file with additional properties into Fynapse.

> **Warning**
>
> If you upload a JSON file enabling support for multiple currencies to a system that did not have this capability enabled before, you will be effectively changing the configuration and will lose all processing data.

You need to add the following sections to the Configuration Data JSON file:

#### Enabling Support for Multiple Currencies and Selecting the Conversion Mode

To enable support for multiple currencies and select one of the three available FX conversion modes:

```json
"foreignExchangeSettings": {
    "enabled": true,
    "conversionMode": "UPSTREAM_PRIORITY"
}
```

There are three FX conversion modes:

* UPSTREAM_PRIORITY - the default; a mixed conversion mode where if a value is provided from an upstream system it is passed on to Journals, if no value is provided Fynapse performs the conversion
* CONVERSION - the conversion will always be performed, regardless of whether any values are provided from upstream systems
* UPSTREAM - no conversion is performed, only values provided from upstream systems are passed on to Journals

> **Info**
>
> If no conversion mode is selected, the system will use the default, i.e., prioritize values from upstream.

> **Warning**
>
> Remember that if you select UPSTREAM, you have to map all Functional and Reporting Amount fields for all Posting Patterns on the **Accounting Rules Navigator** screen.\
> If you select UPSTREAM_PRIORITY, the Functional and Reporting Amount fields are not mandatory and Posting Patterns without this mapping will always perform conversion.

#### Functional Currencies Definition

```json
"functionalCurrencies": {
          "currencyCodes": [
              "PLN",
              "GBP",
              "EUR"
          ]
      }
```

#### Reporting Currencies Definition

```json
"reportingCurrencies": {
        "currencyCodes": [
            "PLN",
            "USD"
        ]
    }
```

#### Rate Sets Definition

```json
"rateSets": [
        {
            "name": "London Close"
        },
        {
            "name": "New York Close"
        }
    ]
```

#### Journal Line Definition

```json
{
"label": "Custom Functional Amount Label",
"name": "customFunctionalAmount",
"type": "amount", 
"role": "functionalAmount",
"source": "input"
},
{
"label": "Custom Functional Currency Label",
"name": "customFunctionalCurrency",
"type": "text",
"role": "functionalCurrency",
"source": "input"
}
```

Sample Reporting Amount properties for Journal Line Definition:

```json
{
"label": "Custom Reporting USD Amount Label",
"name": "customReportingUsdAmount",
"type": "amount",
"role": "reportingAmount",
"currency": "USD",
"source": "input"
},
{
"label": "Custom Reporting PLN Amount Label",
"name": "customReportingPlnAmount",
"type": "amount",
"role": "reportingAmount",
"currency": "PLN",
"source": "input"
}
```

#### Business Event Definition

```json
{
"label": "Functional Amount Label",
"name": "functionalAmount",
"type": "decimal", 
"role": "attribute",
"source": "input"
}
```

Sample Reporting Amount properties for Business Event Definition:

```json
{
"label": "Reporting Amount USD Label",
"name": "reportingAmountUsd",
"type": "decimal",
"role": "attribute",
"source": "input"
},
{
"label": "Reporting Amount PLN Label",
"name": "reportingAmountPln",
"type": "decimal",
"role": "attribute",
"source": "input"
}
```

#### Accounting Base

```json
"accountingConfigurations": [
    {
        "name": "IFRS",
        "description": "IFRS description",
        "fiscalCalendarName": "Test Fiscal Calendar",
        "businessCalendarName": "Test Business Calendar",
        "dimensionSetName": "Test Dimension Set",
        "sourceCurrency": "TRANSACTION_CURRENCY"
    },
    {
            "name": "US GAAP",
            "description": "US GAAP description",
            "fiscalCalendarName": "Test Fiscal Calendar",
            "businessCalendarName": "Test Business Calendar",
            "dimensionSetName": "Test Dimension Set",
            "sourceCurrency": "FUNCTIONAL_CURRENCY"
    }
]
```

#### Node Configuration

```json
"nodeConfigs": [
  {
      "graceDays": 0,
      "graceHours": 0,
      "accountingConfigName": "IFRS",
      "overridePostingDate": "none",
      "functionalCurrency": "GBP",
      "reportingCurrencies": [
          "USD",
          "PLN"
      ],
      "functionalRateSetName": "London Close",
      "reportingRateSetsNames": {
          "USD": "New York Close",
          "PLN": "New York Close"
          }
      }
                  ]
```

#### Accounting Rules Navigator

```json
"postingPatterns": [
{
        "postingCode": "test posting code CR",
        "amountField": "transactionAmountName",
        "currencyField": "transactionCurrencyName",
        "postingDateField": "effectiveDateName",
        "amountSignage": "AUTO",
        "debitCredit": "CR",
        "functionalAmountField": "functionalAmount",
        "reportingAmountFields": {
            "PLN": "reportingAmountPln",
            "USD": "reportingAmountUsd"
        }
    },
    {
        "postingCode": "test posting code DR",
        "amountField": "transactionAmountName",
        "currencyField": "transactionCurrencyName",
        "postingDateField": "effectiveDateName",
        "amountSignage": "AUTO",
        "debitCredit": "DR",
        "functionalAmountField": "functionalAmount",
        "reportingAmountFields": {
            "PLN": "reportingAmountPln",
            "USD": "reportingAmountUsd"
        }
    }
]
```

> **Info**
>
> This step is mandatory to ensure Business Events with Functional Amount values are processed.
> If you configure support for multiple currencies in the JSON file, you do not have to add the Functional Amount property in the file, but you will have to add it in the screen, on the **Accounting Rules Navigator** screen. Otherwise, Business Events with Functional Amount values will not be processed.

\


#### FX Revaluation Configuration

\


> **Tip**
>
> For more details about the FX revaluation process, go to [FX Revaluation](/documentation/processing-configuration/multiple-currencies/fx-revaluation).

```json
"balanceProcessing": {
    "revaluationConfigs": [
        {
            "name": "RevalConfig1",
            "description": "Revaluation Configuration 1",
            "accountMappings": [
                {
                    "accounts": [
                        "1111"
                    ],
                    "offsetAccount": "1111_rev1",
                    "journalTypeCode": "REV_NBP",
                    "rateSets": {
                        "globalRateSet": "London Close"
                    },
                    "accountsSelector": {}
                }
            ]
        },
        {
            "name": "RevalConfig2",
            "description": "Revaluation Configuration 2",
            "accountMappings": [
                {
                    "accounts": [
                        "2222"
                    ],
                    "offsetAccount": "2222_rev2",
                    "journalTypeCode": "REV_NBP",
                    "rateSets": {
                        "rateSetForCurrency": {
                            "EUR": "London Close",
                            "GBP": "London Close",
                            "PLN": "London Close",
                            "USD": "New York Close"
                        }
                    },
                    "accountsSelector": {}
                }
            ]
        }
    ],
    "revaluationConfigurationAssignmentDefinition": {
        "configurationAssignments": [
            {
                "accountingConfigName": "IFRS",
                "nodeFields": {
                    "customSubledgerNodeName": "Custom Subledger Node Label element 1"
                },
                "configurationName": "RevalConfig1"
            },
            {
                "accountingConfigName": "US GAAP",
                "nodeFields": {
                    "customSubledgerNodeName": "Custom Subledger Node Label element 1"
                },
                "configurationName": "RevalConfig2"
            }
        ]
    }
} 
```

#### Sample JSON file with Attributes for Multiple Currencies Support

For a detailed placement of these attributes, refer to the sample JSON below:

> **Warning**
>
> Remember to check if the “version” attribute is referring to a version number currently supported by Fynapse.
> If you are not sure about the current version number, download the JSON file from your Fynapse instance to verify prior to uploading your configuration.

#### Sample JSON File

```json
{
    "version": "v20230211",
    "configuration": {
        "businessCalendars": [
            {
                "name": "Test Business Calendar",
                "status": "ACTIVE",
                "effectiveFrom": "1900-01-01",
                "effectiveTo": "2099-12-31"
            }
        ],
        "fiscalCalendars": [
            {
                "name": "Test Fiscal Calendar",
                "type": "gregorian",
                "active": true,
                "effectiveFrom": "2025-10-02",
                "endOfFirstYear": "2019-12-31",
                "startYear": 2019
            }
        ],
        "journalDefinition": {
            "active": true,
            "effectiveFrom": "2024-01-03",
            "fields": [
                {
                    "label": "Custom Core Date Label",
                    "name": "customCoreDate",
                    "type": "date",
                    "role": "coreDate",
                    "source": "input"
                },
                {
                    "label": "Custom Journal Type Label",
                    "name": "customJournalType",
                    "type": "text",
                    "role": "journalType",
                    "source": "input"
                },
                {
                    "label": "Description",
                    "name": "description",
                    "type": "text",
                    "role": "attribute",
                    "source": "input"
                },
                {
                    "label": "Custom Accounting Config Label",
                    "name": "customAccountingConfig",
                    "type": "text",
                    "role": "accountingConfig",
                    "source": "input"
                },
                {
                    "label": "Custom Account Label",
                    "name": "customAccount",
                    "type": "text",
                    "role": "account",
                    "source": "input"
                },
                {
                    "label": "Custom Transaction Amount Label",
                    "name": "customTransactionAmount",
                    "type": "amount",
                    "role": "transactionAmount",
                    "source": "input"
                },
                {
                    "label": "Custom Transaction Currency Label",
                    "name": "customTransactionCurrency",
                    "type": "text",
                    "role": "transactionCurrency",
                    "source": "input"
                },
                {
                    "label": "Custom Functional Amount Label",
                    "name": "customFunctionalAmount",
                    "type": "amount",
                    "role": "functionalAmount",
                    "source": "input"
                },
                {
                    "label": "Custom Functional Currency Label",
                    "name": "customFunctionalCurrency",
                    "type": "text",
                    "role": "functionalCurrency",
                    "source": "input"
                },
                {
                    "label": "Custom Reporting PLN Amount Label",
                    "name": "customReportingPlnAmount",
                    "type": "amount",
                    "role": "reportingAmount",
                    "currency": "PLN",
                    "source": "input"
                },
                {
                    "label": "Custom Reporting USD Amount Label",
                    "name": "customReportingUsdAmount",
                    "type": "amount",
                    "role": "reportingAmount",
                    "currency": "USD",
                    "source": "input"
                },
                {
                    "label": "Journal Id",
                    "name": "journalId",
                    "type": "uuid",
                    "role": "journalId",
                    "source": "input"
                },
                {
                    "label": "Custom Journal Line Id Label",
                    "name": "customJournalLineId",
                    "type": "uuid",
                    "role": "lineId",
                    "source": "input"
                },
                {
                    "label": "Custom Reverses Label",
                    "name": "customReverses",
                    "type": "uuid",
                    "role": "reverses",
                    "source": "input"
                },
                {
                    "label": "Custom Reversed by Label",
                    "name": "customReversedBy",
                    "type": "uuid",
                    "role": "reversedBy",
                    "source": "input"
                },
                {
                    "label": "Custom Journal Line No",
                    "name": "customJournalLineNo",
                    "type": "integer",
                    "role": "journalLineNo",
                    "source": "input"
                },
                {
                    "label": "Custom Ingestion Id Label",
                    "name": "customIngestionId",
                    "type": "text",
                    "role": "ingestionId",
                    "source": "input"
                },
                {
                    "label": "Custom Subledger Node Label",
                    "name": "customSubledgerNodeName",
                    "type": "text",
                    "role": "node",
                    "source": "input"
                }
            ],
            "primaryKeys": [
                "journalId",
                "customJournalLineId"
            ]
        },
        "businessEventDefinition": {
            "active": true,
            "effectiveFrom": "2024-01-03",
            "attributes": [
                {
                    "label": "Event Type Label",
                    "name": "eventTypeName",
                    "type": "text",
                    "role": "event_type",
                    "source": "input"
                },
                {
                    "label": "Effective Date Label",
                    "name": "effectiveDateName",
                    "type": "date",
                    "role": "effective_date",
                    "source": "input"
                },
                {
                    "label": "Amount Type Label",
                    "name": "transactionAmountName",
                    "type": "decimal",
                    "role": "attribute",
                    "source": "input"
                },
                {
                    "label": "Currency Label",
                    "name": "transactionCurrencyName",
                    "type": "text",
                    "role": "attribute",
                    "source": "input"
                },
                {
                    "label": "Custom Subledger Node Label",
                    "name": "customSubledgerNodeName",
                    "type": "text",
                    "role": "node",
                    "source": "input"
                },
                {
                    "label": "Functional Amount Label",
                    "name": "functionalAmount",
                    "type": "decimal",
                    "role": "attribute",
                    "source": "input"
                },
                {
                    "label": "Reporting Amount USD Label",
                    "name": "reportingAmountUsd",
                    "type": "decimal",
                    "role": "attribute",
                    "source": "input"
                },
                {
                    "label": "Reporting Amount PLN Label",
                    "name": "reportingAmountPln",
                    "type": "decimal",
                    "role": "attribute",
                    "source": "input"
                },
                {
                    "label": "Description",
                    "name": "description",
                    "type": "text",
                    "role": "attribute",
                    "source": "input"
                }
            ]
        },
        "businessEventTypes": [
            {
                "name": "ABC",
                "description": "ABC description"
            }
        ],
        "nodeValues": [
            {
                "fieldName": "customSubledgerNodeName",
                "values": [
                    "Custom Subledger Node Label element 1",
                    "Custom Subledger Node Label element 2"
                ]
            }
        ],
        "dimensionSets": [
            {
                "name": "Test Dimension Set",
                "description": "Test Dimension Set description",
                "attributes": [
                    "customAccountingConfig",
                    "customAccount",
                    "customTransactionCurrency",
                    "customSubledgerNodeName"
                ]
            }
        ],
        "accountingConfigurations": [
            {
                "name": "IFRS",
                "description": "IFRS description",
                "fiscalCalendarName": "Test Fiscal Calendar",
                "businessCalendarName": "Test Business Calendar",
                "dimensionSetName": "Test Dimension Set",
                "sourceCurrency": "TRANSACTION_CURRENCY"
            },
            {
                "name": "US GAAP",
                "description": "US GAAP description",
                "fiscalCalendarName": "Test Fiscal Calendar",
                "businessCalendarName": "Test Business Calendar",
                "dimensionSetName": "Test Dimension Set",
                "sourceCurrency": "FUNCTIONAL_CURRENCY"
            }
        ],
        "nodes": [
            {
                "fields": {
                    "customSubledgerNodeName": "Custom Subledger Node Label element 1"
                },
                "nodeConfigs": [
                    {
                        "graceDays": 0,
                        "graceHours": 0,
                        "overridePostingDate": "none",
                        "accountingConfigName": "US GAAP",
                        "functionalCurrency": "PLN",
                        "functionalRateSetName": "New York Close"
                    },
                    {
                        "graceDays": 0,
                        "graceHours": 0,
                        "overridePostingDate": "none",
                        "accountingConfigName": "IFRS",
                        "functionalCurrency": "GBP",
                        "reportingCurrencies": [
                            "USD",
                            "PLN"
                        ],
                        "functionalRateSetName": "London Close",
                        "reportingRateSetsNames": {
                            "PLN": "New York Close",
                            "USD": "New York Close"
                        }
                    }
                ],
                "timeZone": "Europe/Warsaw"
            }
        ],
        "postingComponents": [
            {
                "code": "PLFEES",
                "journalType": "Test Permanent Journal Type",
                "description": "PLFEES description",
                "accountingConfigName": "IFRS",
                "postingPatterns": [
                    {
                        "postingCode": "test posting code CR",
                        "amountField": "transactionAmountName",
                        "currencyField": "transactionCurrencyName",
                        "postingDateField": "effectiveDateName",
                        "amountSignage": "AUTO",
                        "debitCredit": "CR",
                        "functionalAmountField": "functionalAmount",
                        "reportingAmountFields": {
                            "PLN": "reportingAmountPln",
                            "USD": "reportingAmountUsd"
                        }
                    },
                    {
                        "postingCode": "test posting code DR",
                        "amountField": "transactionAmountName",
                        "currencyField": "transactionCurrencyName",
                        "postingDateField": "effectiveDateName",
                        "amountSignage": "AUTO",
                        "debitCredit": "DR",
                        "functionalAmountField": "functionalAmount",
                        "reportingAmountFields": {
                            "PLN": "reportingAmountPln",
                            "USD": "reportingAmountUsd"
                        }
                    }
                ]
            }
        ],
        "postingComponentIdentifications": [
            {
                "businessEventTypeName": "ABC",
                "postingComponents": [
                    {
                        "postingComponentCode": "PLFEES"
                    }
                ]
            }
        ],
        "accountLookups": [
            {
                "postingCode": "test posting code CR",
                "accountLookupPatterns": [
                    {
                        "account": "000002"
                    }
                ]
            },
            {
                "postingCode": "test posting code DR",
                "accountLookupPatterns": [
                    {
                        "account": "000001"
                    }
                ]
            }
        ],
        "journalMapping": {
            "fieldsMapping": [
                {
                    "journalField": "description",
                    "mappingType": "FIELD",
                    "field": "description"
                }
            ]
        },
        "journalTypes": [
            {
                "code": "Test Permanent Journal Type",
                "description": "Test Permanent Journal Type description",
                "behavior": "PERMANENT"
            },
            {
                "code": "REV_NBP",
                "description": "Reversal Next BD",
                "behavior": "REVERSING",
                "reversingDate": "NEXT_BUSINESS_DAY"
            }
        ],
        "unpostedJournalsFeatureFlag": {
            "unpostedJournalsEnabled": true
        },
        "foreignExchangeSettings": {
            "enabled": true,
            "conversionMode": "UPSTREAM"
        },
        "functionalCurrencies": {
            "currencyCodes": [
                "PLN",
                "GBP",
                "EUR"
            ]
        },
        "reportingCurrencies": {
            "currencyCodes": [
                "PLN",
                "USD"
            ]
        },
        "rateSets": [
            {
                "name": "London Close"
            },
            {
                "name": "New York Close"
            }
        ],
        "featureFlags": {
            "posting-date-override": false,
            "flow-assistant": false,
            "new-ingest-id-format": false,
            "workflow": false,
            "retry-on-connection-issues": false,
            "extracts-in-bulk": false,
            "extract-file-download": false,
            "flow": false
        },
        "balanceProcessing": {
            "revaluationConfigs": [
                {
                    "name": "RevalConfig1",
                    "description": "Revaluation Configuration 1",
                    "accountMappings": [
                        {
                            "accounts": [
                                "1111"
                            ],
                            "offsetAccount": "1111_rev1",
                            "journalTypeCode": "REV_NBP",
                            "rateSets": {
                                "globalRateSet": "London Close"
                            },
                            "accountsSelector": {}
                        }
                    ]
                },
                {
                    "name": "RevalConfig2",
                    "description": "Revaluation Configuration 2",
                    "accountMappings": [
                        {
                            "accounts": [
                                "2222"
                            ],
                            "offsetAccount": "2222_rev2",
                            "journalTypeCode": "REV_NBP",
                            "rateSets": {
                                "rateSetForCurrency": {
                                    "EUR": "London Close",
                                    "GBP": "London Close",
                                    "PLN": "London Close",
                                    "USD": "New York Close"
                                }
                            },
                            "accountsSelector": {}
                        }
                    ]
                }
            ]
        },
        "accounts": [
            {
                "number": "000002",
                "name": "Account_000002"
            },
            {
                "number": "000001",
                "name": "Account_000001"
            },
            {
                "number": "1111",
                "name": "Account_1111"
            },
            {
                "number": "2222",
                "name": "Account_2222"
            },
            {
                "number": "1111_rev1",
                "name": "Account_1111_rev1"
            },
            {
                "number": "2222_rev2",
                "name": "Account_2222_rev2"
            }
        ]
    }
}
```

## How to Create the Exchange Rate Entity?

When you switch on support for multiple currencies in Fynapse, the Exchange Rate Entity is created in the Data Structure.

The Entity consists of the following attributes:

* Source Currency - the currency of the Transaction Amount/Functional Amount
  * Data constraint: string
* Target Currency - the currency of the Functional Amount/Reporting Amount
  * Data constraint: string
* Date - the date for which the rate for the given Source Currency/Target Currency combination is applied
  * Data constraint: date
  * Date format: yyyy-mm-dd; e.g. 2023-09-03
* Rate - the exchange rate for the given Source Currency/Target Currency combination on a specific date
  * Data constraint: decimal, two decimal digits; e.g. 4.15 NOT 4.156
* Rate Set - defines to which set of rates the given exchange rate is assigned. Each rate set can include only one exchange rate per a given currency pair.

### How to Input Data into the Exchange Rate Entity?

Data is input into the Exchange Rate Entity by uploading a properly structured CSV file via the **File** **Ingestion** screen.

For more details on ingesting files into Fynapse, refer to [Data Input File Ingestion](/documentation/data-integration/data-input-file-ingestion/overview).

The CSV file should consist of:

* A header
* Data

Below is a sample CSV file for the Exchange Rate Entity:

The Exchange Rate Entity is a reference data Entity, which means the data do not undergo deduplication, but rather all versions are stored in the system and the latest is used for processing.

For example, if you upload two exchange rates for a given currency combination for the same date:

| **Source Currency** | **Target Currency** | **Rate Set** | **Date**   | **Rate** | **CSV File Input Date** |
| ------------------- | ------------------- | ------------ | ---------- | -------- | ----------------------- |
| PLN                 | GBP                 | RateSet1     | 2023-09-03 | 0.19     | 2023-08-29              |
| PLN                 | GBP                 | RateSet1     | 2023-09-03 | 0.20     | 2023-08-21              |

Then the rate from August 29th will be used, because this CSV file is the latest.