> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Migration guide

export const uiProductName = "Atoti UI";

export const productName = "Atoti FRTB";

export const coreProductName = "Atoti Server";

This guide explains the changes required to migrate to the stated version
of the {productName}.

## 6.0.8 to 6.0.9

### Summary

* [SACubeRRAOExport column header rename](#sacuberraoexport-column-header-rename): `OtherResidualRiskType` renamed to `RRAOCategory`.
* [Distributed messaging API](#distributed-messaging-api-1): Messaging classes replaced with `CommunicationRegistration` API.

### SACubeRRAOExport column header rename

The `SACubeRRAOExport` DEE template now exports the `RRAO Category` column under the header `RRAOCategory` instead of `OtherResidualRiskType`. Downstream consumers that parse the export by header name must be updated from `OtherResidualRiskType` to `RRAOCategory`.

### Distributed messaging API (if customized)

This section applies only if your project customizes distributed messaging classes.

The `IMessageHandlerRegistrar` pattern introduced in 6.0.8 has been replaced. The following classes have been removed:

* `BusinessDayCalendarMessageHandler`
* `FrtbCoreMessageHandlerRegistrar`
* `DatastoreMetadataMessenger`

`BusinessDayCalendarMessage` is now a Java `record` implementing `Request` (from `com.activeviam.activepivot.dist.impl.avinternal.communication`). Its answer is a nested `record` implementing `Answer` and `ProcessedOutput`.

Handler registration is done inline using the `CommunicationRegistration` fluent API instead of the `@AtotiExtendedPluginValue` annotation.

Before (6.0.8):

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@AtotiExtendedPluginValue(intf = IMessageHandlerRegistrar.class, key = "FrtbCoreMessageHandlerRegistrar")
public class FrtbCoreMessageHandlerRegistrar implements IMessageHandlerRegistrar {
    @Override
    public void registerHandlers(IDistributedMessenger messenger, IMultiVersionActivePivot pivot) {
        IMessageHandlerRepository repository = messenger.getMessageHandlerRepository();
        repository.setMessageHandler(BusinessDayCalendarMessage.class, new BusinessDayCalendarMessageHandler());
    }
}
```

After (6.0.9):

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
this.messageSender = CommunicationRegistration.startRegistering(BusinessDayCalendarMessage.class)
        .onMessageReceived((message, cubeIdentifier) -> {
            // handler logic inline
            return result;
        })
        .processOutput((message, pairs) -> {
            // merge results
            return mergedAnswer;
        })
        .registerOrReplace(manager);
```

The `DistributedParametersRetriever` constructor now requires an additional `IActivePivotManager` parameter. Update any custom instantiations accordingly.

## 6.0.7 to 6.0.8

### Summary

* [New DLC Unload Topic Aliases](#new-dlc-unload-topic-aliases): Purely additive — no migration required.
* [OpenTelemetry configuration changes](#opentelemetry-configuration-changes): `tracing.enabled` property removed; exporters now disabled by default.
* [JGroups protocol files](#jgroups-protocol-files): `AtotiAuthToken` replaced with `SharedSecretAuthToken`.
* [Distributed messaging API](#distributed-messaging-api-if-customized): New `IMessageHandlerRegistrar` pattern for custom message handlers.
* [Import changes](#import-changes): Constants moved from `AxisHierarchyBase` to `IAxisHierarchyDescription`.

### New DLC Unload Topic Aliases

Eight new unload topic aliases have been added to allow selective, per-cube data unloading via DLC: `UnloadSA`, `UnloadIMA`, `UnloadIMADRC`, `UnloadPL`, `UnloadStressCalibration`, `UnloadCommon`, `UnloadParameters`, and `UnloadAllData`. No migration is required; these are purely additive. See [Unload Topic Aliases](../dev-ref-impl/dev-dlc/dlc-frtb-config#unload-topic-aliases) for details.

### OpenTelemetry configuration changes

OpenTelemetry has been upgraded and simplified:

* SDK: 1.49.0 → 1.56.0
* Instrumentation: 1.33.0-alpha → 2.22.0 (stable)

**Breaking changes:**

1. **`tracing.enabled` property removed** — The `OpenTelemetryTracingConfig` class has been removed. Tracing is now configured entirely through OpenTelemetry Spring Boot auto-configuration.

2. **Exporters disabled by default** — OpenTelemetry exporters (`traces`, `metrics`, `logs`) are now set to `none` by default. Previously, tracing was enabled by default when `tracing.enabled=true`.

**Migration steps:**

* The `tracing.enabled` property can be removed from your configuration as it is no longer used.
* If you were using `tracing.enabled=false` to disable tracing: No action needed (tracing is now off by default).
* If you were using `tracing.enabled=true` with `-Dotel.java.global-autoconfigure.enabled=true`, replace with the new VM flags:

Before:

```bash theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
-Dotel.java.global-autoconfigure.enabled=true
```

After:

```bash theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
-Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -Dotel.logs.exporter=otlp
```

### JGroups protocol files

The `AtotiAuthToken` class has been replaced with `SharedSecretAuthToken`. Update all JGroups protocol XML files to use the new class name.

Before:

```xml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
<AUTH auth_class="com.activeviam.activepivot.dist.impl.internal.distribution.security.impl.AtotiAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>
```

After:

```xml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
<AUTH auth_class="com.activeviam.common.distribution.security.SharedSecretAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>
```

### Distributed messaging API (if customized)

This section applies only if your project customizes distributed messaging classes.

The following API changes have been made:

* `IAuthenticatedBroadcastMessage` now takes 1 type parameter instead of 3. Update any class that implements or references this interface.
* `BusinessDayCalendarMessage` has been simplified to `AUniqueBroadcastMessage<BusinessDayCalendarMessageAnswer>`. Handler logic previously embedded in the message class now lives in `BusinessDayCalendarMessageHandler`.
* `DatastoreMetadataMessenger` is deprecated for removal. Its third type parameter has changed from `IDistributedHierarchyManager` to `Void`.
* Custom message handlers should now implement `IMessageHandlerRegistrar` and register using `@AtotiExtendedPluginValue(intf = IMessageHandlerRegistrar.class)`, rather than embedding logic in the message class itself.

### Import changes

The constants `AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS` and `AUTO_CONTRIBUTE_UNKNOWN_MEMBER_PROPERTY` have moved from `AxisHierarchyBase` to `IAxisHierarchyDescription`. Update any imports or references in your project.

Before:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
import static com.activeviam.activepivot.core.impl.internal.cube.hierarchy.axis.impl.AxisHierarchyBase.AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS;
import static com.activeviam.activepivot.core.impl.internal.cube.hierarchy.axis.impl.AxisHierarchyBase.AUTO_CONTRIBUTE_UNKNOWN_MEMBER_PROPERTY;
```

After:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
import static com.activeviam.activepivot.core.intf.api.description.IAxisHierarchyDescription.AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS;
import static com.activeviam.activepivot.core.intf.api.description.IAxisHierarchyDescription.AUTO_CONTRIBUTE_UNKNOWN_MEMBER_PROPERTY;
```

## 6.0.6 to 6.0.7

No migration needed.

## 6.0.5 to 6.0.6

### Summary

* [Changes to the frtb-starter](#changes-to-the-frtb-starter): Updates to the frtb-starter to allow file uploads to be run without executing simulations.

#### Changes to the frtb-starter

* The `IFileUploadDataNodeClient` interface has been updated in the `frtb-starter` module, the method `createBranchForUIWithoutSimulation` has been added to it.

* The class `FileUploadQueryNodeService` has been changed extensively. It needs to be copied as is to your upgraded project.

* In the class `FileUploadQueryNodeRestController`, the method `resetDataNodeFiles` does not throw an exception in its signature any more:

6.0.5:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  protected Map<String, FileUploadPayload> resetDataNodeFiles() throws Exception {...}
```

6.0.6:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  protected Map<String, FileUploadPayload> resetDataNodeFiles() {...}
```

* The method `createBranchForUI` has been updated:

6.0.5:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@PostMapping(value = "/upload/{branch}")
@DependsOn(value = { "dataLoadController" })
public boolean createBranchForUI(
        @PathVariable("branch") String branch,
        @RequestParam("files") String[] files
) {
    if (files == null || files.length == 0) {
        return false;
    }
    try {
        Map<String, FileUploadPayload> dataNodeFiles = getDataNodeFiles();
        var branchCreated = fileUploadQueryNodeService.createBranchForUI(branch, files, dataNodeFiles);
        if (branchCreated) {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            String userName = authentication.getName();
            IDatabaseSimulationDefinition definition = new FileUploadSimulationDefinition(files);
            var permissions = new BranchPermissions(Set.of(userName), IBranchPermissions.ALL_USERS_ALLOWED);
            branchPermissionsManager.setBranchPermissions(branch, permissions);
            workflow.execute(new DatabaseSimulation(FILE_UPLOAD_WHATIF_NAME, definition, userName, branch));
        }
        return branchCreated;
    } catch (Exception e) {
        throw new FRTBServiceException(
                HttpStatus.INTERNAL_SERVER_ERROR,
                "Unable to copy the files from stage folder to what-if folder.",
                "Ensure that the files being requested are available to copy via the retrieveStagedFile endpoint",
                e
        );
    }
}
```

6.0.6:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@PostMapping(value = "/upload/{branch}")
  @DependsOn(value = { "dataLoadController" })
  public boolean createBranchForUI(
  		@PathVariable("branch") String branch,
  		@RequestParam("files") String[] files
  ) {
  	if (files == null || files.length == 0) {
  		return false;
  	}
  	try {
  		Map<String, FileUploadPayload> dataNodeFiles = getDataNodeFiles();
  		Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  		String userName = authentication.getName();
  		IDatabaseSimulationDefinition definition = new FileUploadSimulationDefinition(files);
  		var sim = new DatabaseSimulation(FILE_UPLOAD_WHATIF_NAME, definition, userName, branch);
  		var status = workflow.execute(sim).getStatus();
  		if (!status.equals(DatabaseSimulationStatus.COMPLETED)) {
  			switch (status) {
  				case FAILED -> throw new ActiveViamSimulationException(sim);
  				case UNAUTHORISED -> throw new ActiveViamUnauthorizedException();
  				case UNKNOWN -> throw new ActiveViamUnknownSimulationException(sim.getSimulationId());
  				default -> {
  					return false;
  				}
  			}
  		} else {
  			return fileUploadQueryNodeService.createBranchForUI(branch, files, dataNodeFiles).equals(DatabaseSimulationStatus.COMPLETED);
  		}
  	} catch (Exception e) {
  		switch (e) {
  			case ActiveViamSimulationException activeViamSimulationException -> throw activeViamSimulationException;
  			case ActiveViamUnauthorizedException activeViamUnauthorizedException -> throw activeViamUnauthorizedException;
  			case ActiveViamUnknownSimulationException activeViamUnknownSimulationException -> throw activeViamUnknownSimulationException;
  			default -> throw new FRTBServiceException(
  					HttpStatus.INTERNAL_SERVER_ERROR,
  					"Unable to execute file-upload what-if simulation. Please check the logs for more information.",
  					"Ensure that the files being requested are available to copy via the retrieveStagedFile endpoint",
  					e
  			);
  		}

  	}
  }
```

* In the class `FileUploadPayload`, the Lombok `@EqualsAndHashCode` annotation has been added, the `topics` attribute is now a set instead of a list,
  and the visibility of the `topics` and `filePathSeparator` attributes has been changed:

6.0.5:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@Data
@NoArgsConstructor
public class FileUploadPayload implements Serializable {
public String filePathSeparator;
public List<FileUploadTopic> topics;
private static final long serialVersionUID = 4349458336474922225L;

  /**
   * Constructor
     *
     * @param topics A List of {@link FileUploadTopic}s.
     */
  public FileUploadPayload(List<FileUploadTopic> topics) {
        this.topics = topics;
        this.filePathSeparator = File.separator;
  }
```

6.0.6:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@Data
@NoArgsConstructor
@EqualsAndHashCode
public class FileUploadPayload implements Serializable {
private String filePathSeparator;
private Set<FileUploadTopic> topics;

  private static final long serialVersionUID = 4349458336474922225L;

  /**
   * Constructor
     *
     * @param topics A Set of {@link FileUploadTopic}s.
     */
  public FileUploadPayload(Set<FileUploadTopic> topics) {
        this.topics = topics;
        this.filePathSeparator = File.separator;
  }
```

* The class `FileUploadRestServiceController` has been changed extensively. It needs to be copied as is to your upgraded project.
* In the class `FileUploadTopic`, the Lombok `@EqualsAndHashCode` annotation has been added, the `files` attribute is now a set instead of a list,
  and the visibility of the `files` and `name` attributes has been changed:

6.0.5:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@Data
@NoArgsConstructor
public class FileUploadTopic implements Serializable {
  public String name;
  public List<String> files;
  private static final long serialVersionUID = 4349474967374902823L;

  /**
   * Constructor
   *
   * @param name  Topic Name.
   * @param files List of file paths.
   */
  public FileUploadTopic(String name, List<String> files) {
    this.name = name;
    this.files = files;
  }
```

6.0.6:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@Data
@NoArgsConstructor
@EqualsAndHashCode
public class FileUploadTopic implements Serializable {
  private String name;
  private Set<String> files;
  private static final long serialVersionUID = 4349474967374902823L;

  /**
   * Constructor
   *
   * @param name  Topic Name.
   * @param files Set of file paths.
   */
  public FileUploadTopic(String name, Set<String> files) {
    this.name = name;
    this.files = files;
  }
```

* In the `CommonDimensionsConfig` class, hard-coded strings have been replaced by constants:

6.0.5:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
 public static ICanBuildCubeDescription<IActivePivotInstanceDescription> getHiMedLowDimension(ICanStartBuildingDimensions builder) {
 	//@formatter:off
 	var hierarchy = ConstantHierarchy
 				.hierarchy(CORRELATION_SCENARIO_HIERARCHY)
 				.withLevel(CORRELATION_SCENARIO_LVL)
 					.withComparator(new CustomComparator<>(List.of("High", "Medium", "Low", "Reference"), List.of()))
 				.withLevelPath(null, "High")
 				.withLevelPath(null, "Medium")
 				.withLevelPath(null, "Low")
 				.withLevelPath(null, "Reference")
 				.build();
 	return builder
 			.withDimension(CORRELATION_SCENARIO_DIM)
 			.withAnalysisHierarchy(hierarchy)
 			.withAggregationProcedure(AnalysisHierarchyExpansionProcedure.PLUGIN_KEY)
 			.end();
 	//@formatter:on
 }
```

6.0.6:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
public static ICanBuildCubeDescription<IActivePivotInstanceDescription> getHiMedLowDimension(ICanStartBuildingDimensions builder) {
  	//@formatter:off
  	var hierarchy = ConstantHierarchy
  				.hierarchy(CORRELATION_SCENARIO_HIERARCHY)
  				.withLevel(CORRELATION_SCENARIO_LVL)
  					.withComparator(new CustomComparator<>(List.of(
  							CORRELATION_SCENARIO_HIGH,
  							CORRELATION_SCENARIO_MED,
  							CORRELATION_SCENARIO_LOW,
  							CORRELATION_SCENARIO_REF), List.of()))
  				.withLevelPath(null, CORRELATION_SCENARIO_HIGH)
  				.withLevelPath(null, CORRELATION_SCENARIO_MED)
  				.withLevelPath(null, CORRELATION_SCENARIO_LOW)
  				.withLevelPath(null, CORRELATION_SCENARIO_REF)
  				.build();
  	return builder
  			.withDimension(CORRELATION_SCENARIO_DIM)
  			.withAnalysisHierarchy(hierarchy)
  			.withAggregationProcedure(AnalysisHierarchyExpansionProcedure.PLUGIN_KEY)
  			.end();
  	//@formatter:on
  }
```

## 6.0.4 to 6.0.5

### Summary

* **Crypto 2a Support**: Added configuration, cube dimensions, measures, and starter module components to support Group 2a cryptoassets.
* **SBM Correlation Scenarios**: Introduced a new cube dimension allowing user-defined correlation scenarios for enhanced control over SBM risk calculations.

### Configuration files

#### Parameters

The following parameters have been added to the file [FRTBParameters.csv](../../configuration/frtbparameters):

| Index | Vertex | FRTB Risk Class | Risk Measure | Date       | ParameterSet |
| ----- | ------ | --------------- | ------------ | ---------- | ------------ |
| 0     | 0.5    | Crypto 2a       | Vega         | 2016-01-01 |              |
| 1     | 1      | Crypto 2a       | Vega         | 2016-01-01 |              |
| 2     | 3      | Crypto 2a       | Vega         | 2016-01-01 |              |
| 3     | 5      | Crypto 2a       | Vega         | 2016-01-01 |              |
| 4     | 10     | Crypto 2a       | Vega         | 2016-01-01 |              |

### Configuration properties

#### Properties added

| Property                                | Default value | Description                                                                                                                                                                                                                                                                                                                                                                                          |
| --------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| frtb.crypto-2a.apply-correlation-stress | *false*       | If set to false, the stress scenarios are ignored, and we use the same correlation constants for the ‘high’, ‘medium’ and ‘low’ scenarios. If set to true, the correlations for the ‘high’, ‘medium’ and ‘low’ scenarios are calculated in alignment with [\[MAR21.6\]](https://www.bis.org/basel_framework/chapter/MAR/21.htm?inforce=20230101\&published=20200327#paragraph_MAR_21_20230101_21_6). |
| frtb.crypto-2a.exchange-stored          | *false*       | Enables the addition of the optional Crypto2aExchange field in the [UnderlyingDescription](../../datastore/standardisedapproach/underlying-desc) store.                                                                                                                                                                                                                                              |

### Datastores

#### Added stores

| Store                   | Details                                                                                           |
| ----------------------- | ------------------------------------------------------------------------------------------------- |
| Crypto2aDeltaDoubleSums | Crypto 2a Delta Double Sums store. This is a technical store used for the crypto 2a calculations. |
| Crypto2aVegaDoubleSums  | Crypto 2a Vega Double Sums store. This is a technical store used for the crypto 2a calculations.  |

#### Modified stores

| Modification | Store                                                                         | Field            | Type   | Description                                                                                                                                                                                                 |
| ------------ | ----------------------------------------------------------------------------- | ---------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Added        | [UnderlyingDescription](../../datastore/standardisedapproach/underlying-desc) | Crypto2aExchange | String | Optional field. The exchange where the crypto asset is traded. Disabled by default. See [Crypto 2a UnderlyingDescription](../../interpret-impl/acr/sa/sa-sbm/crypto-2a/datastore-ref-impl/underlying-desc). |

### Cube schema

#### Added

| Cube                 | Dimension            | Hierarchy                   | Levels                                                          | Datastore fields                                                                                                                                                      | Details                                                                                                                                             |
| -------------------- | -------------------- | --------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| StandardisedApproach | Correlation Scenario | Correlation Scenario        | [Scenario](../../cube/correlation-scenario)                     | The members do not come from the datastore, they are defined in the definition of the hierarchy directly. See [Correlation Scenario](../../cube/correlation-scenario) | Users can now directly influence which correlation scenario is applied in the [`SBM Risk Charge`](../../cube/sbm-risk-charge) and related measures. |
| StandardisedApproach | Double Sums          | Crypto 2a Delta Double Sums | [Crypto 2a Risk Factor](../../cube/crypto-2a-delta-double-sums) | Field Crypto2aRiskFactor in store Crypto2aDeltaDoubleSums (technical store)                                                                                           | This hierarchy is used to describe factors determining delta risk factor correlations for the Crypto 2a risk class.                                 |
| StandardisedApproach | Double Sums          | Crypto 2a Vega Double Sums  | [Crypto 2a Risk Factor](../../cube/crypto-2a-vega-double-sums)  | Field Crypto2aRiskFactor in store Crypto2aVegaDoubleSums (technical store)                                                                                            | This hierarchy is used to describe factors determining vega risk factor correlations for the Crypto 2a risk class.                                  |
| StandardisedApproach | Buckets              | Crypto 2a Buckets           | [Crypto 2a Bucket](../../cube/crypto-2a-buckets)                | Field Bucket in store [UnderlyingDescription](../../datastore/standardisedapproach/underlying-desc)                                                                   | Sensitivity buckets for the Crypto 2a risk class.                                                                                                   |
| StandardisedApproach | Risk                 | Crypto 2a Exchange          | [Crypto 2a Exchange](../../cube/crypto-2a-exchange)             | Field Crypto2aExchange in store [UnderlyingDescription](../../datastore/standardisedapproach/underlying-desc)                                                         | The exchange where the crypto asset is traded. This hierarchy is only added if the `frtb.crypto-2a.exchange-stored` property is set to true.        |

### Measures

#### Added

| Cube                 | Measure                                                         | Details                           |
| -------------------- | --------------------------------------------------------------- | --------------------------------- |
| StandardisedApproach | [Crypto 2a](../../cube/measures/standardisedapproach/crypto-2a) | Support for Cryptoassets Group 2a |

### Integration of Crypto 2a into the frtb-starter module

The following classes have been added to the `frtb-starter` module:

* `Crypto2aService`
* `Crypto2aConfig`

and are imported in the `FRTBConfig` class:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}

  // Crypto 2a Configuration
  Crypto2aConfig.class,
  Crypto2aService.class
```

The `Crypto2aConfigurationProperties` is now included in the list of configuration properties classes in the class `FRTBConfig`:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
@EnableConfigurationProperties({
        ...
		Crypto2aConfigurationProperties.class
})
```

The following classes have been modified to take into account the datastore and cube dimensions modifications needed:

* `CommonDimensionsConfig`
  * In the `getSARiskDimension` method, the argument `Crypto2aConfigurationProperties crypto2aProp` has been added.

    Before:

    ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    public static ICanBuildCubeDescription<IActivePivotInstanceDescription> getSARiskDimension(ICanStartBuildingDimensions builder) {
    ```

    Now:

    ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    public static ICanBuildCubeDescription<IActivePivotInstanceDescription> getSARiskDimension(ICanStartBuildingDimensions builder,
    		Crypto2aConfigurationProperties crypto2aProp) {
    ```
  * The implementation of that method has been changed to add the [Crypto 2a Exchange](../../cube/crypto-2a-exchange) hierarchy:

    Before:

    ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    return builder
        .withDimension(RISK_DIM)
            .withHierarchy(RISK_CLASSES_HIERARCHY)
                .withLevel(RISK_CLASS_LVL)

     ...

            .withLevel(CRYPTO_2B_DIRECTION_LVL, DRC_DIRECTION_HIERARCHY);
    ```

    Now:

    ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    var riskDimension = builder
            .withDimension(RISK_DIM)
                .withHierarchy(RISK_CLASSES_HIERARCHY)
                    .withLevel(RISK_CLASS_LVL)

         ...

    		if(crypto2aProp.isExchangeStored()){
    		riskDimension = riskDimension
    				.withHierarchy(CRYPTO_2A_EXCHANGE_LVL)
    					.withLevel(CRYPTO_2A_EXCHANGE_LVL,CRYPTO_2A_EXCHANGE);
    	}

        return riskDimension;
    ```

* The following method has been added:
  ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  public static ICanBuildCubeDescription<IActivePivotInstanceDescription> getHiMedLowDimension(ICanStartBuildingDimensions builder) {
  	//@formatter:off
  	var hierarchy = ConstantHierarchy
  				.hierarchy(CORRELATION_SCENARIO_HIERARCHY)
  				.withLevel(CORRELATION_SCENARIO_LVL)
  					.withComparator(new CustomComparator<>(List.of("High", "Medium", "Low", "Reference"), List.of()))
  				.withLevelPath(null, "High")
  				.withLevelPath(null, "Medium")
  				.withLevelPath(null, "Low")
  				.withLevelPath(null, "Reference")
  				.build();
  	return builder
  			.withDimension(CORRELATION_SCENARIO_DIM)
  			.withAnalysisHierarchy(hierarchy)
  			.withAggregationProcedure(AnalysisHierarchyExpansionProcedure.PLUGIN_KEY)
  			.end();
  	//@formatter:on
  }
  ```

* `CubesDimensionsConfig`

  The `Crypto2aConfigurationProperties crypto2aProp` configuration properties are now used in the `standardisedApproachCubeDimensions` bean,
  and the new  [Correlation Scenario](../../cube/correlation-scenario) dimension has been added to that bean.

  Before:

  ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    @Qualifier("DimensionsStandardisedApproachCube")
  @Order(20)
  @Bean
  public DimensionsAdder standardisedApproachCubeDimensions(
          ParentChildProperties parentChildProperties,
          ParameterSetConfig parameterSetConfig
  ) {
      return merge(
              builder -> CommonDimensionsConfig.getBookingDimension(builder, irtDeskGroupsEnabled),
              builder -> CommonDimensionsConfig.getOrganizationDimension(builder, parentChildProperties),
              castToDimensionsAdder(categoriesHierarchyAdder),
              CommonDimensionsConfig::getSARiskDimension,

              ...

              CommonDimensionsConfig::getSaDefaultRiskChargeDimension,
              b -> CommonDimensionsConfig.getParameterSetsDimension(b, parameterSetConfig.root()),
              this::getDisplayCurrencyDimension);
  }
  ```

  Now:

  ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  @Qualifier("DimensionsStandardisedApproachCube")
  @Order(20)
  @Bean
  public DimensionsAdder standardisedApproachCubeDimensions(
          ParentChildProperties parentChildProperties,
          ParameterSetConfig parameterSetConfig,
          Crypto2aConfigurationProperties crypto2aProp
  ) {
      return merge(
              builder -> CommonDimensionsConfig.getBookingDimension(builder, irtDeskGroupsEnabled),
              builder -> CommonDimensionsConfig.getOrganizationDimension(builder, parentChildProperties),
              castToDimensionsAdder(categoriesHierarchyAdder),
              b -> CommonDimensionsConfig.getSARiskDimension(b, crypto2aProp),
              CommonDimensionsConfig::getMarketDataDimension,

              ...

              CommonDimensionsConfig::getSaDefaultRiskChargeDimension
  			CommonDimensionsConfig::getHiMedLowDimension,
              b -> CommonDimensionsConfig.getParameterSetsDimension(b, parameterSetConfig.root()),
              this::getDisplayCurrencyDimension);
  }
  ```

* `DatastoreCustomisationsConfig`

  The following bean has been added:

  ```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  @Qualifier(SP_QUALIFIER__CUSTOMISATIONS)
  @Bean
  @ConditionalOnExchangeDatastoreFieldEnabled
  DatastoreConfiguratorConsumer addCrypto2aExchangeToUnderlyingStore() {
  	return this::addCrypto2aExchangeToUnderlyingStore;
  }

  private void addCrypto2aExchangeToUnderlyingStore(IDatastoreConfigurator configurator) {
  	configurator.appendField(UNDERLYING_DESCRIPTION_STORE_NAME, new CustomField(
  			FieldDescription.builder()
  					.name(UNDERLYING_DESCRIPTION_STORE_CRYPTO_EXCHANGE)
  					.dataType(STRING)
  					.build()));
  }
  ```

### Miscellaneous

The following dependency has been added to the `frtb-starter` POM file:

```xml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
<dependency>
    <groupId>com.activeviam</groupId>
    <artifactId>atoti-server-test</artifactId>
    <scope>test</scope>
</dependency>
```

## 6.0.3 to 6.0.4

### Summary

* **Atoti What-If upgrade**: Atoti What-If has been upgraded to 4.1.1-AS6.1. To migrate any custom What-If configuration, see the
  [migration guides for this release](https://docs.activeviam.com/products/modules/whatif/4.1/online-help/dev/dev-release/migration-guide.).

## 6.0.2 to 6.0.3

### Summary

* Virtual hierarchies can be set with the property `frtb.configuration.virtual-hierarchies`.
* The new `Curvature CVR` measure will be disabled by default in 6.0.x versions of {productName}. To enable it, set the property `frtb.curvature-cvr.enabled=true` in the `application.yaml` file.
* Cube distribution can now handle data overlap. This means it is possible to have several data cubes with duplicated data. you need to set `frtb.distribution.enable-data-duplication=true`.
* `HistoricalDatesProvider` no longer queries the base stores for the list of historical dates. This is achieved by using the database statistics to gather the set of unique dates. The `HistoricalDatesProvider` can be reverted to the previous behavior of executing distinct datastore queries by setting the property `frtb.historical-dates-provider.is-using-approximate-members=false`.
* The zero risk-weight can now be specified per obligor and jurisdiction, defaulting to 0%.

### Breaking changes

None.

### Deprecations

* **Cube distribution by field**: Distribution of data cubes across nodes by defining clustering fields is deprecated, it should be done with distribution levels.

### Input file formats

#### Added

| File                                                                                                           | Details                                                                             |
| -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [DRC\_Public\_Sector\_Obligor\_Risk\_Weights.csv](../../input-files/sa-drc-public-sector-obligor-risk-weights) | Use this file to configure specific zero risk-weights per obligor and jurisdiction. |

### Configuration properties

#### Properties added

| Property                                                    | Default value                                                                  | Description                                                                                                                                                                                                                          |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| frtb.configuration.virtual-hierarchies                      | *Empty*                                                                        | A list of hierarchies to set as virtual.                                                                                                                                                                                             |
| frtb.curvature-cvr.enabled                                  | *false*                                                                        | Enables the new Curvature CVR measures.                                                                                                                                                                                              |
| frtb.distribution.levels.sa-cube                            | *AsOfDate\@Date\@Dates*                                                        | The levels used for the *StandardisedApproachCube* distribution.                                                                                                                                                                     |
| frtb.distribution.levels.ima-cube                           | *AsOfDate\@Date\@Dates*                                                        | The levels used for the *InternalModelApproachCube* distribution.                                                                                                                                                                    |
| frtb.distribution.levels.ima-drc-cube                       | *AsOfDate\@Date\@Dates*                                                        | The levels used for the *IMADRCCube* distribution.                                                                                                                                                                                   |
| frtb.distribution.levels.pl-cube                            | *AsOfDate\@Date\@Dates*                                                        | The levels used for the *PLCube* distribution.                                                                                                                                                                                       |
| frtb.distribution.levels.stress-calibration-cube            | *AsOfDate\@Date\@Dates*                                                        | The levels used for the *StressCalibrationCube* distribution.                                                                                                                                                                        |
| frtb.distribution.priority.sa-cube                          | *Empty*                                                                        | The priority of the *StandardisedApproachCube* in cases of data overlap within a horizontal distribution.                                                                                                                            |
| frtb.distribution.priority.ima-cube                         | *Empty*                                                                        | The priority of the *InternalModelApproachCube* in cases of data overlap within a horizontal distribution.                                                                                                                           |
| frtb.distribution.priority.ima-drc-cube                     | *Empty*                                                                        | The priority of the *IMADRCCube* in cases of data overlap within a horizontal distribution.                                                                                                                                          |
| frtb.distribution.priority.pl-cube                          | *Empty*                                                                        | The priority of the *PLCube* in cases of data overlap within a horizontal distribution.                                                                                                                                              |
| frtb.distribution.priority.stress-calibration-cube          | *Empty*                                                                        | The priority of the *StressCalibrationCube* in cases of data overlap within a horizontal distribution.                                                                                                                               |
| frtb.distribution.enable-data-duplication                   | *false*                                                                        | Set to true to allow duplicate members in the distribution level of horizontally distributed data cubes.                                                                                                                             |
| directquery.incremental-refresh                             | *Empty*                                                                        | Configures [increment refresh templates](../dev-direct-query/customization-and-internals/incremental-refresh).                                                                                                                       |
| frtb.historical-dates-provider.is-using-approximate-members | *true*                                                                         | If true (default), the `HistoricalDatesProvider` will use the database statistics to gather the unique set of dates from the stores.<br />If false, it will revert to the previous behavior of executing distinct datastore queries. |
| frtb.historical-dates-provider.stores-to-scan               | *\[PLTrades, IMATrades, DRCIMABase, SASensitivities, StressCalibrationTrades]* | The list of stores to scan to collect the historical dates from.                                                                                                                                                                     |
| frtb.historical-dates-provider.as-of-date-field             | *AsOfDate*                                                                     | The name of the date field to use when querying the stores for historical dates.                                                                                                                                                     |

### Properties files

#### Files Modified

##### frtb-data-load.properties

New properties:

| Property Name                                       | Comment                                                                                                                                        | Value                                                  |
| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| drc.public-sector.obligor-risk-weights.file-pattern | File pattern used to load the [PublicSectorObligorRiskWeights](../../datastore/standardisedapproach/public-sector-obligor-risk-weights) store. | `**/DRC_Public_Sector_Obligor_Risk_Weights*.csv{,.gz}` |

### Datastores

#### Added stores

| Store                                                                                                     | Details                                                                                                                                                |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [PublicSectorObligorRiskWeights](../../datastore/standardisedapproach/public-sector-obligor-risk-weights) | This store contains optional risk-weights for public sector obligors applied to zero risk-weight exposures in the DRC non-securitisations calculation. |

### Databases

#### Added tables

| Table                                                                                       | Details                                                                                                                                                |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [PUBLIC\_SECTOR\_OBLIGOR\_RISK\_WEIGHTS](../../database/public_sector_obligor_risk_weights) | This store contains optional risk-weights for public sector obligors applied to zero risk-weight exposures in the DRC non-securitisations calculation. |

### Measures

#### Added

| Cube                 | Measure                           | Details                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| -------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| StandardisedApproach | Curvature CVR                     | This measure uses the underlying **Curvature CVR Up** or **Curvature CVR Down** measure depending on the “direction” of the **Risk Position Scenario** at the **Bucket** level. A new intermediate measure **Curvature Bucket Scenario** evaluates the **Risk Position Scenario** measure at the **Book** level.<br /> This measure has been added for the following **risk classes** within **sa-sbm**: <br />- [Commodity](../../interpret-impl/acr/sa/sa-sbm/commodity/calculations/query-time-core/curv-cvr)<br />- [CSR non-Sec](../../interpret-impl/acr/sa/sa-sbm/csr-non-sec/calculations/query-time-core/curv-cvr)<br />- [CSR Sec CTP](../../interpret-impl/acr/sa/sa-sbm/csr-sec-ctp/calculations/query-time-core/curv-cvr)<br />- [CSR Sec non-CTP](../../interpret-impl/acr/sa/sa-sbm/csr-sec-non-ctp/calculations/query-time-core/curv-cvr)<br />- [Equity](../../interpret-impl/acr/sa/sa-sbm/equity/calculations/query-time-core/curv-cvr)<br />- [FX](../../interpret-impl/acr/sa/sa-sbm/fx/calculations/query-time-core/curv-cvr)<br />- [GIRR](../../interpret-impl/acr/sa/sa-sbm/girr/calculations/query-time-core/curv-cvr) |
| StandardisedApproach | [Crypto 2b](../../cube/crypto-2b) | Support for Cryptoassets Group 2b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |

## 6.0.1 to 6.0.2

No migration needed.

## 6.0.0 to 6.0.1

No migration needed.

### Breaking changes

None

### Summary

* Upgraded to Data Connectors 5.0.4

## 5.3.0 to 6.0.0

Upgrading from version **5.3.0**, see [{productName} 6.0 Release Notes](./release-notes#600).

{productName} uses {coreProductName} 6.1.7 and {uiProductName} 5.2.x.
For new features and fixes included in these releases, please see the [{uiProductName} documentation](https://docs.activeviam.com/products/atoti/ui/5.2/)
and [{uiProductName} Migration Notes](https://docs.activeviam.com/products/atoti/ui/5.2/docs/changelog/), and the [release notes for {coreProductName}](/engine/java-sdk/6.1/release/changelog).

### Breaking changes

* **Measure Configuration**: The text replacement template for measure configuration now uses the pattern `#{_name_}` instead of `${_name_}`. See [Startup Properties](#startup-properties).
* **frtb-application module**: Some of the content of the `frtb-starter` module has been moved to the new `frtb-application` module.
* **DLC 5.0 Upgrade**: With the new version of the DLC, the configuration of the ETL has been simplified.
* **What-if endpoints**: The (undocumented) what-if REST endpoints used by the Switch Desk Model and Switch Book Desk what-if simulations have changed.
* **DoctorPivot endpoint**: DoctorPivot is now embedded within the AdminUI. See [Relocation of DoctorPivot](#relocation-of-doctorpivot) for more.

### Headline announcement

* **Upgraded to {coreProductName} 6.1.7** : Upgraded to the latest {coreProductName}.
* **Upgraded to JDK 21** : Upgraded from JDK 17 to JDK 21 to utilize the latest features.
* **Removed ActiveMonitor** : The Active-Monitor module and related features have been removed.
* **frtb-application module**: The `frtb-application` module replaces the `frtb-starter` module. All customizations should now be done in the
  `frtb-application` module, or in a new module based on the `frtb-application` module.
* **Sign-Off Service Availability**: The Sign-Off REST service now throws `ServiceUnavailableException`s until the initial data loading phase has been completed.
  The Sign-Off REST service now provides a GET `/enabled` endpoint to check if the service is currently enabled.
* **Simplified OpenTelemetry Configuration**: We now rely on OpenTelemetry's GlobalOpenTelemetry to configure the export of logs and metrics.
* **OpenRewrite recipes** As an experimental feature, we have added OpenRewrite recipes that you can use to automate some of the migration steps.

### OpenRewrite recipes

<Note>
  We have included these OpenRewrite recipes as **an experimental feature and would welcome your feedback** on their usefulness in your migration.
  We can then evaluate the feature for potential inclusion in future releases.
  Please report any issues you have through the normal Jira channels.
</Note>

To help with upgrades, we have created a set of OpenRewrite recipes that can be used to automatically
perform some of the migration steps from 5.3 to 6.0.

The recipes included in this release are:

| Recipe Name                                | Description                                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `com.activeviam.frtb.Migrate_6_0`          | Runs all 6.0 migration recipes.                                                                                                                                                                                                                                                                                                                           |
| `com.activeviam.frtb.FileUpload_6_0`       | Updates the properties for the file-upload what-if. This includes:Renames `csvSource.subdirectory.dataset.whatif` to `file-upload.csv-source-subdirectory`, Adds `file-upload.staging-directory` as the combination of `input.data.root.dir.path` (or `csv-source.dataset`) and `csvSource.subdirectory.dataset.stage` by referencing the old properties. |
| `com.activeviam.frtb.DQAutoVectorizer_6_0` | Deletes the old, unused `activeviam.directquery.enableAutoVectorizer` property.                                                                                                                                                                                                                                                                           |
| `com.activeviam.frtb.DataDirectories_6_0`  | Updates the properties configuring the data directories. This includes:Standardizes the case of `csv-source`., Adds `csv-source.dataset-historical=${csv-source.dataset}/historical`., Adds `csv-source.dataset-configuration=${csv-source.dataset}/configuration`.                                                                                       |

See [Using OpenRewrite in Atoti FRTB](../dev-getting-started/migration-open-rewrite) for instructions on how to run the recipes.

### `frtb-application` module

The new `frtb-application` Maven module has been split out of the `frtb-starter` Maven module.

#### Components moved

The following components have been moved into the new module:

* `FRTBApplication` class including the `main()` method.
* Spring security configuration
* OpenTelemetry configuration
* Logging configuration
* Content Service configuration
* Configuration files

#### Configuration classes moved

For the full list of configuration classes that have
been moved into the `frtb-application` module, see the [Moved Classes](#moved-classes) section.

#### Data & Test folders moved

The sample data located at `/frtb-starter/src/test/resources/` has been moved out of the `frtb-starter` module to the `/sample-data/` folder located at the root of the project.

The tests included in the `frtb-starter` module have been moved into the new `frtb-application-tests` module.

### OpenTelemetry Configuration

The previous OpenTelemetry configuration has been replaced with a simple `OpenTelemetry` bean.

To enable the autoconfiguration of this bean, set `-Dotel.java.global-autoconfigure.enabled=true` on the command line.

### FX Translation Risk

The field "Translation Risk Currency" has been added to support loading translation risk for different reporting currencies.
It is now possible to load different translation risks for different reporting currencies.

This field is only used if `FXComplexTrade=Y` (otherwise the translation risk is calculated automatically).

* If this field is empty, the sensitivity is not treated as translation risk but instead treated normally.
* If this field is set, then the sensitivity will be interpreted as translation risk for that currency.
  It will be filtered and only used if the translation risk currency is the same as the reporting currency.

### Alternative root parameter sets

The [property](../../configuration/startup-properties) `parameter-set.root` has been added to specify the root parameter set in the configuration and input files.

It is expected that input files are generated for the parameter set specified in this property.

Additionally, the configuration files containing parameters will need to be adapted to the new root parameter set.

* Previously, when no parameter set was specified in the configuration it was assumed to be "BCBS".
  Now, these parameters will default to the specified root parameter set.
* Parameter configuration will need to be modified for the new root parameter set.

For example, for the bucket used for CSR non-Sec covered bonds we have in [FRTBParameters.csv](../../configuration/frtbparameters):

| Name                                 | Value | Date       | ParameterSet |
| ------------------------------------ | ----- | ---------- | ------------ |
| `sa.csr-nonsec.bucket.covered-bonds` | 8     | 2016-01-01 |              |
| `sa.csr-nonsec.bucket.covered-bonds` | 10    | 2016-01-01 | CRR2         |

If you want to set CRR2 as the root parameter set, the above two lines can change to become:

| Name                                 | Value | Date       | ParameterSet |
| ------------------------------------ | ----- | ---------- | ------------ |
| `sa.csr-nonsec.bucket.covered-bonds` | 8     | 2016-01-01 | BCBS         |
| `sa.csr-nonsec.bucket.covered-bonds` | 10    | 2016-01-01 |              |

So that the value in the CRR2 parameter set is still "10", and the value for the BCBS parameter set is still "8".

### Summing Sensitivities

When multiple sensitivities with the same key fields are loaded, they are now summed.
Previously this was only done when processing a chunk within a file, now it is done across the whole transaction.

The following [configuration](../../configuration/startup-properties#summing-duplicate-sensitivities) has been added to `application.yaml` and will sum sensitivities and PVs for the `SASensitivities` store,
making sure that the currency and a few other fields are the same.

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
datastore-sum-duplicates:
  SASensitivities:
    matching: ["Ccy", "RiskWeight", "FXOtherCcy", "Direction"]
    summing: ["Sensitivity", "Shift_Up_PV", "Shift_Down_PV", "PresentValue", "Notional", "Adjustment"]
```

### FRTB Modules

#### Removed

| Module               | Details                                                                           |
| -------------------- | --------------------------------------------------------------------------------- |
| `frtb-activemonitor` | ActiveMonitor and associated configurations have been removed from {productName}. |

#### Added

| Module             | Details                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `frtb-application` | Provides an example Spring Boot Application for Atoti FRTB. <br />\* Contains simple configurations required to run Atoti FRTB.\* Is intended to be used as a reference for clients to build their own applications as this module is not production-ready.<br />\* Provides various Spring profiles outlining the properties required to run the application in different environments.<br /> For example, the profile `dist-query-node` activates the `application-dist-query-node.yaml` configuration file which defines the properties required to run the application as a distributed query node.<br />tipTo help ease upgrade efforts, move all customizations into your new module. |

### DLC 5.0 upgrade

The upgrade to DLC 5.0 has brought some significant changes to the ETL configuration.
For non-FRTB specific DLC migration,
please see the [DLC 5.0 Migration Guide](https://docs.activeviam.com/products/tools/data-connectors/latest/online-help/dev-release/migrate#dlc-500-migration).

DLC configurations for {productName} have now been organized into `FrtbDlcConfig`.

#### Loading Topic Configurations

Before the DLC redesign, `ChannelParameters` were being used to encapsulate DLC configurations into beans.
Now, configurations that were previously found as `ChannelParameters` beans can be found as Topic Descriptions in the following classes:

| Old Class                    | New Class                        |
| ---------------------------- | -------------------------------- |
| `AConfigurationSourceConfig` | `ConfigurationSourceDescription` |
| `ASourceConfig`              | `SourceDescription`              |
| `ASensiSourceConfig`         | `SensiSourceDescription`         |

**Column calculators** are now configured as DLC `CustomFieldDescription` beans and have been organized into `CustomFieldDescriptionConfig`.
The DLC implicitly adds `CSVColumnParser` column calculators based on the store being targeted,
so those have been removed from the topic configurations.
The new DLC also lets you configure [parser overrides](https://docs.activeviam.com/products/tools/data-connectors/latest/online-help/dlc-overview/configuration/parser-overrides).
In {productName} they can be found in `ColumnParserOverridesDescriptionConfig`.

**Tuple publishers** are now configured as DLC `TargetDescription` beans and have been organized into `TargetDescriptionsConfig`.

#### Unloading Topic Configurations

Unloading topics are now completely separate from loading topics. They are configured in `UnloadTopicDescriptionsConfig`.

#### Topic Aliases

| Old Class            | New Class                  |
| -------------------- | -------------------------- |
| `SourceTopicAliases` | `AliasesDescriptionConfig` |

#### ETL Extension Updates

See the following sections on how the ETL extensions have changed with the new DLC:

* [Adding and Populating a New Store](../dev-extensions/etl/creating-and-loading-a-custom-store)
* [Adding Columns to an Existing File and Store](../dev-extensions/etl/add-and-load-new-column-to-existing-file)
* [Enriching File Fields by Adding Column Calculators](../dev-extensions/etl/enriching-file-field-adding-column-calculators)

#### Removed classes

See the [list of classes removed as part of the DLC 5.0 upgrade](#dataloadcontroller).

#### Video overview

Check out our video on migrating to Data Connectors 5.0 in {productName} 6.0:

<Frame>
  <iframe src="https://fast.wistia.com/embed/iframe/faoz6lr367" width="100%" height="400" frameBorder="0" allowFullScreen />
</Frame>

### Input file formats

#### Modified

| Modification | File                                                                      | Field                | Optional | Description                                                                                                |
| ------------ | ------------------------------------------------------------------------- | -------------------- | -------- | ---------------------------------------------------------------------------------------------------------- |
| Added        | [SBM\_Delta\_Sensitivities.csv](../../input-files/delta-trade)            | Translation Risk Ccy | Y        | FX only. Indicates the sensitivity represents translation risk; set to the reporting currency.             |
| Added        | [SBM\_Summary\_Delta\_Sensitivities.csv](../../input-files/delta-summary) | Translation Risk Ccy | Y        | FX only. Indicates the sensitivity represents translation risk; set to the reporting currency.             |
| Added        | [Trade\_Attributes.csv](../../input-files/trade-attributes)               | Inclusion            | Y        | Indicates if the trade should be included ("Y") or not by default in the calculations.<br />Default is 'Y' |

### Startup properties

The file [frtb-config.properties](../../configuration/frtb-config_properties) is now loaded into the Spring Boot environment, so the properties in this file can be overridden on the command line.

The file `measures-config.json` is now also loaded into the Spring Boot environment.  The json file is converted to properties with the prefix "measures".

The text replacement template in these files now uses the pattern `#{_name_}` instead of `${_name_}`.
The `${_name_}` pattern can still be used for Spring Boot's property placeholders.

| Property Name                                                                                                                 | Comment                                                                                                                                                               | Value                                             | Default Definition in File |
| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | -------------------------- |
| `dlc.enabled`                                                                                                                 | Enables or disables the Data Load Controller.                                                                                                                         | `true` or `false`                                 | application.yaml           |
| `file-upload.staging-directory`                                                                                               | The staging directory for the File Upload.                                                                                                                            | `${csv-source.dataset}/stage`                     | application.properties     |
| `file-upload.csv-source-subdirectory`                                                                                         | The sub-directory of files on which the What-If is executed.                                                                                                          | `true` or `false`                                 | application.properties     |
| `csv-source.dataset-historical`                                                                                               | Path to the directory containing historical files to load.                                                                                                            | \$\{csv-source.dataset}/historical                | application.properties     |
| `csv-source.dataset-configuration`                                                                                            | Path to the directory containing the configuration files to load.                                                                                                     | sample-data/configuration                         | application.properties     |
| `parameter-set.root`                                                                                                          | Root parameter set.                                                                                                                                                   | Defaults to "BCBS"                                |                            |
| `datastore-sum-duplicates._store-name_.matching`                                                                              | List of names of fields that must match when summing duplicates for the store *store-name*.<br />If missing, all fields are matched; if empty, no fields are matched. |                                                   |                            |
| `datastore-sum-duplicates._store-name_.summing`                                                                               | List of names of fields that should be summed when there are duplicates for the store *store-name*.                                                                   |                                                   |                            |
| [`directquery.aggregate-tables`](../dev-direct-query/configuration-getting-started/configuration-properties#aggregate-tables) | Configuration of the [Aggregate Tables](../dev-direct-query/customization-and-internals/aggregate-tables) to be used when running with DirectQuery.                   | Mapping of aggregate tables per cube              | application.yaml           |
| `whatif.datastore..*`                                                                                                         | Simple datastore changes what-if simulations. See [Simple Datastore Changes](../../what-if/what-if-simple-datastore-changes).                                         | `inclusion-change` what-if simulation definition. | application.yaml           |

**Updated properties:** [changed values](#changed-values) or [renamed](#renamed)

Changed values: <span id="changed-values" />

| Old Property               | New Property                  | Comment                                                                                                              | Default Definition in File |
| -------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------- |
| `csv-source.parserThreads` | `csv-source.parser-threads`   | The naming convention has changed from camel case to kebab case, but the old property key will still work.           | application.properties     |
| `csv-source.bufferSize`    | `csv-source.buffer-size`      | The naming convention has changed from camel case to kebab case, but the old property key will still work.           | application.properties     |
| `aws.accessKeyId`          | `aws.accessKeyId`             | Previously managed by FRTB, now inheriting AWS SDK property `aws.accessKeyId` in `DefaultCredentialsProvider`        | frtb-cloud.properties      |
| `aws.secretKey`            | `aws.secretAccessKey`         | Previously managed by FRTB, now inheriting AWS SDK property `aws.secretAccessKey` in `DefaultCredentialsProvider`    | frtb-cloud.properties      |
| `azure.connection.string`  | `dlc.azure.connection-string` | Previously managed by FRTB, now inheriting DLC property `dlc.azure.connection-string` for `DefaultAzureClientConfig` | frtb-cloud.properties      |

**Deleted properties:**

| Property Name                                 | Comment                                                                                                                                     | Deleted from File      |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `activeviam.directquery.enableAutoVectorizer` | The property is no longer being used.                                                                                                       | application.properties |
| `input.data.root.dir.path`                    | This is now a part of `file-upload.staging-directory`                                                                                       | application.properties |
| `csvSource.subdirectory.dataset.stage`        | This is now a part of `file-upload.staging-directory`                                                                                       | application.properties |
| `csvSource.subdirectory.dataset.whatif`       | This is now `file-upload.csv-source-subdirectory`                                                                                           | application.properties |
| `cloudSource.dataset`                         | `csv-source.dataset-historical`, `csv-source.dataset-configuration` and `csv-source.dataset` are now shared between cloud sources and local | frtb-cloud.properties  |
| `cloud.fetch.thread`                          | No longer configurable                                                                                                                      | frtb-cloud.properties  |
| `dlc.audit-logging.enabled`                   | DLC event handlers are no longer a part of the new DLC                                                                                      | application.properties |

### Configuration files

#### Files Modified

##### [FRTBParameters.csv](../../configuration/frtbparameters)

| Modification             | Parameter                                  | Type    | Default | Description                                                                                                    |
| ------------------------ | ------------------------------------------ | ------- | ------- | -------------------------------------------------------------------------------------------------------------- |
| Deprecated (for removal) | `sa.drc.no-maturity-floor-when-offsetting` | boolean | `false` | Parameter is no longer needed [ref](https://www.eba.europa.eu/single-rule-book-qa/qna/view/publicId/2024_7129) |

### Datastores

#### Modified stores

| Modification | Store                                                                    | Field                | Type   | Description                                                                                    |
| ------------ | ------------------------------------------------------------------------ | -------------------- | ------ | ---------------------------------------------------------------------------------------------- |
| Added        | [Trade Mapping](../../datastore/global/trademapping)                     | Inclusion            | String | Indicates if the trade should be included (“Y”) or not by default in the calculations.         |
| Added        | [SaSensitivities](../../datastore/standardisedapproach/sa-sensitivities) | Translation Risk Ccy | STRING | FX only. Indicates the sensitivity represents translation risk; set to the reporting currency. |

### Databases

#### Modified tables

| Modification | Table                                             | Field                  | Type   | Description                                                                                    |
| ------------ | ------------------------------------------------- | ---------------------- | ------ | ---------------------------------------------------------------------------------------------- |
| Added        | [SASENSITIVITIES](../../database/sasensitivities) | TRANSLATION\_RISK\_CCY | String | FX only. Indicates the sensitivity represents translation risk; set to the reporting currency. |
| Added        | [TRADE\_MAPPING](../../database/trade_mapping)    | INCLUSION              | String | Indicates if the trade should be included (“Y”) or not by default in the calculations.         |

### Cube schema

#### Added

| Cube | Dimension | Hierarchy | Levels                            | Datastore fields                                              | Details                                                                                 |
| ---- | --------- | --------- | --------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| All  | Booking   | Inclusion | [Inclusion](../../cube/inclusion) | [TradeMapping](../../datastore/global/trademapping).Inclusion | This hierarchy is used to indicate which trades should be included in the calculations. |

### Modified Classes

The following classes have been added, removed or had their function replaced with new classes.

#### Added Classes

| Added                        | Rationale                                                                         |
| ---------------------------- | --------------------------------------------------------------------------------- |
| `DatastoreChangeSimulations` | WhatIf definitions have been restructured.                                        |
| `SummingDuplicateKeyHandler` | DuplicateKeyHandler that sums tuples.                                             |
| `TableSecurityConfig`        | Configures the security roles for the actions that can be taken on the datastore. |
| `OpenTelemetryTracingConfig` | Configures the OpenTelemetry service for the application.                         |

#### Removed Classes

##### DataLoadController

The following classes related to the DLC and data loading have been removed as part of the DLC 5.0 upgrade.

<Accordion title="Click to see the full list of removed classes.">
  | Removed                                | Replacement                      | Rationale                                                                                                                                              |
  | -------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
  | `ICsvSourceConfig`                     |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `IJdbcSourceConfig`                    |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `ISourceConfig`                        |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `ACSVSourceConfig`                     |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `AConfigurationSourceConfig`           | `ConfigurationSourceDescription` | The source itself is now configured as multiple a Source Descriptions. ChannelParameters found in this class are now configured as Topic Descriptions. |
  | `ASensiSourceConfig`                   | `SensiSourceDescription`         | The source itself is now configured as multiple a Source Descriptions. ChannelParameters found in this class are now configured as Topic Descriptions. |
  | `ASourceConfig`                        | `SourceDescription`              | The source itself is now configured as multiple a Source Descriptions. ChannelParameters found in this class are now configured as Topic Descriptions. |
  | `SensiSourceConfig`                    |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `ConfigurationSourceConfig`            |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `SourceConfig`                         |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `SourceTopicAliases`                   | `AliasesDescriptionConfig`       | Aliases are now configured as AliasesDescription.                                                                                                      |
  | `CompositeTopicConfig`                 |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `TopicConfig`                          |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `DataLoadControllerFileConfig`         |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `SimpleCsvSourceConfig`                |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `SimpleJdbcSourceConfig`               |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `SimpleSourceConfig`                   |                                  | DLC 5.0 reduces complexity.                                                                                                                            |
  | `ITuplePublisherDlcHealthEventHandler` |                                  | DLC 5.0 handles events itself.                                                                                                                         |
  | `TuplePublisherDlcHealthEventHandler`  |                                  | DLC 5.0 handles events itself.                                                                                                                         |
  | `TuplePublisherDlcTuplesAdded`         |                                  | DLC 5.0 handles events itself.                                                                                                                         |
</Accordion>

##### WhatIf

The following classes have been replaced with `DatastoreChangeSimulations` because the configuration of WhatIfs has changed.

| Removed                                |
| -------------------------------------- |
| `BookDeskSwitchSubmissionDTO`          |
| `DeskModelSwitchSubmissionDTO`         |
| `BookDeskSwitchRestServiceController`  |
| `DeskModelSwitchRestServiceController` |
| `BookDeskSwitchSimulationDefinition`   |
| `DeskModelSwitchSimulationDefinition`  |

#### Moved Classes

| Class                               | Previous Module & Package                                    | New Module & Package                                               |
| ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------ |
| `LocalContentServiceConfig`         | `frtb-starter/com.activeviam.frtb.starter.cfg.impl`          | `frtb-application/com.activeviam.frtb.application.config.content`  |
| `RemoteContentServiceConfig`        | `frtb-starter/com.activeviam.frtb.starter.cfg.impl`          | `frtb-application/com.activeviam.frtb.application.config.content`  |
| `BasicAuthenticationProviderConfig` | `frtb-accelerator/com.activeviam.frtb.ref.cfg.impl.security` | `frtb-application/com.activeviam.frtb.application.config.security` |
| `SecurityConfig`                    | `frtb-accelerator/com.activeviam.frtb.ref.cfg.impl`          | `frtb-application/com.activeviam.frtb.application.config.security` |
| `UserDetailsServiceConfig`          | `frtb-starter/com.activeviam.frtb.starter.cfg.impl.security` | `frtb-application/com.activeviam.frtb.application.config.security` |

### Migrating to using Atoti Starters

{coreProductName} now provides Spring Boot Starters to aid in application development. These starters will auto-configure some basic and required beans
for the application to run. {productName} has been updated to use these starters. The following changes have been made:

| Change                                       | Description                                                                                                                               |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Removal of `JMXEnabler` Beans                | The `JMXEnabler` beans have been removed from {productName} as the {coreProductName}'s Starters provide these beans automatically for us. |
| Removed `FRTBI18nConfig` Configuration Class | This class is now autoconfigured by {coreProductName}.                                                                                    |
| Removed `SameSiteConfig`                     | The SameSite config is handled by Spring.                                                                                                 |

### Historical Date Provider Service

The historical dates used for the `Lookback` hierarchy measures are now configurable via a `IHistoricalDatesProvider` bean. By default, a
`HistoricalDatesProvider` (configured in `HistoricalDatesProviderConfig`) will be created that provides all `AsOfDate`s available in all base stores.

### Sign-Off REST services

The implementation of the Sign-Off REST service now has a Boolean to enable state flag.
Out of the box, the Sign-Off REST services are disabled until the initial load is completed.
This prevents the Sign-Off server from sending requests on those services before the end of the initial load.
The status of the Sign-Off service can be retrieved through a GET request at `/enabled`.

{coreProductName} exceptions are now used instead of the previously used Javax exceptions.

Error messages and constants have been fixed. Their prefix and/or content was previously incorrect.In particular, the constant `ERROR_MESSAGE` has been
replaced by the constant `ERROR_MESSAGE_NO_VALID_DTO_PROVIDED`. The exception message prefix has been changed from `"[EXPORT]"` to `"[SIGN-OFF]"` in the
error message constants.

### Relocation of DoctorPivot

[DoctorPivot](../dev-core/frtb-dev-drpivot) has been moved from the endpoint `/frtb-starter/doctorpivot` to now being embedded within the AdminUI's **Measures dependencies** tab which is located
at: `/frtb-starter/admin/ui/index.html#/measures-dependencies`.
