> ## 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

This page explains the changes required to migrate to the stated version
of Atoti Market Risk.

## Migrate to 6.0.8

Atoti Market Risk uses Atoti Server 6.1.19 and Atoti UI 5.2.x.
For new features and fixes included in these releases, please see the [Atoti UI documentation](https://docs.activeviam.com/products/atoti/ui/5.2/)
and [Atoti UI Migration Notes](https://docs.activeviam.com/products/atoti/ui/5.2/docs/changelog), and the [release notes for Atoti Server](https://docs.activeviam.com/products/atoti/server/6.1/docs/release/changelog/index.html).

### Migration Helper REST endpoint

The new `MRMigrationHelperRestController` is automatically registered when running in in-memory mode via `InMemoryDatastoreExtractionMigratorConfig` (`com.activeviam.mr.migration.config`), which is imported by the default `MarketRiskConfig`. If you maintain your own copy of `MarketRiskConfig`, add `InMemoryDatastoreExtractionMigratorConfig.class` to your `@Import` list to pick up the new controller.

<Note>
  The migration helper **requires in-memory data cubes**: it reads rows directly from the in-memory `IDatastore` to produce the CSV exports and the DDL. It therefore does not apply to DirectQuery deployments (`starter.deployment.type=direct-query`) or to query-only nodes (`starter.deployment.type=query-node`) — the controller is skipped on both. See the [Migration helper](../dev-direct-query/customization-and-internals/migration-helper) page in the DirectQuery section for the intended workflow (extract an in-memory dataset, then start the application in DirectQuery mode).
</Note>

CSV file exports (`POST /extract` and `POST /extractForDatabase/{database}`) are restricted to a configurable base directory via `mr.migration.export.base-dir` (defaults to the JVM temp directory). To allow exports to a custom path, set this property:

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
mr:
  migration:
    export:
      base-dir: /data/mr-exports
```

To disable the endpoint entirely (for example, in production deployments where the extraction helper is not needed), set `mr.migration.export.enabled` to `false` (defaults to `true`):

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
mr:
  migration:
    export:
      enabled: false
```

If your project implements a custom `ISideStoresToMigrate` bean or sets the `storesToMigrate` field on `DirectQueryActivePivotConfig`, note that both are now deprecated. The migration helper controller manages store selection through its `getDefaultExtractionBuilder()` method. You can continue using the deprecated APIs, but they will be removed in a future release.

#### Deprecated APIs

| Deprecated API                                 | Replacement                                                                                      |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| `ISideStoresToMigrate`                         | Store selection is configured in `MRMigrationHelperRestController.getDefaultExtractionBuilder()` |
| `DirectQueryActivePivotConfig.storesToMigrate` | Store selection is configured in `MRMigrationHelperRestController.getDefaultExtractionBuilder()` |

### Atoti Server upgrade to 6.1.19

Atoti Market Risk 6.0.8 upgrades to Atoti Server 6.1.19 (from 6.1.17).

**PIVOT-12863 patch files removed.** The patch files for PIVOT-12863 (`CompositeVersionAccessor` and `SqlVersionAccessorWithCache`) that were introduced in 6.0.5 have been removed, as the fix is now included in core. If your project overrides or references these classes, remove those overrides.

**`QueryCubeSync` test utility relocated.** The `QueryCubeSync` test utility class has been relocated from `com.activeviam.activepivot.dist.test.internal.cube` to `com.activeviam.activepivot.dist.querynode.test.internal.cube`. If your test code imports this class, update the import accordingly.

**Distributed messaging API rework.** Atoti Server 6.1.19 also reworks the distributed messaging API. The legacy broadcast-message types (`ABroadcastMessageV2`, `IMessageAnswer`, `IMessageHandler`, `IMessageHandlerRegistrar`, `SyncMessageHandler`, `IBroadcastResult`) have been replaced with the new `Request` / `Answer` / `ProcessedOutput` records and the `CommunicationRegistration` builder.

<Note>
  Atoti Market Risk does not reference any of the distributed messaging classes affected by this change. **No code change is required in projects that build on top of the standard Atoti Market Risk configuration.** The sections below describe the underlying changes for projects that extend the distributed messaging or Snowflake integration directly.
</Note>

**Removed helper types.** The following helper types are no longer available because their Atoti Server base classes were removed in 6.1.19:

| Removed type                                                                           | Replacement / notes                                                          |
| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| `com.activeviam.accelerator.common.utils.AUniqueBroadcastMessage`                      | No replacement — base class `ABroadcastMessageV2` removed from Atoti Server. |
| `com.activeviam.accelerator.common.utils.AUniqueSyncBroadcastMessageHandler`           | No replacement — base class `SyncMessageHandler` removed.                    |
| `com.activeviam.accelerator.common.distribution.SharedMessageHandlerRegistrar`         | `DistributedParametersRetriever` registers its handler itself.               |
| `com.activeviam.services.ServicesMessageHandlerRegistrar`                              | `EndPointFinderService` registers its handler itself.                        |
| `com.activeviam.accelerator.common.parameter.impl.DistributedParametersMessageHandler` | Logic moved into `DistributedParametersRetriever`.                           |
| `com.activeviam.services.endpointfinder.EndPointFinderMessageHandler`                  | Logic moved into `EndPointFinderService`.                                    |

If a `Registry.RegistryContributions` setup listed `SharedMessageHandlerRegistrar` or `ServicesMessageHandlerRegistrar`, simply drop those entries.

**Message types are now records.** `DistributedParametersMessage` and `EndPointFinderMessage` are now `record` types implementing `com.activeviam.activepivot.dist.impl.avinternal.communication.Request`. `DistributedParametersData` and `EndPointFinderMessage.EndPointFinderMessageAnswer` now implement `Answer` (the latter also `ProcessedOutput`). Replace getter calls with record accessors (`message.getBranch()` → `message.branch()`, etc.).

**`DistributedParametersRetriever` constructor change.** The retriever now registers its own message handler at construction time via `CommunicationRegistration`, so it needs the `IActivePivotManager`:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
// Before
new DistributedParametersRetriever(parameterSetSelector, epochCacheManager);

// After
new DistributedParametersRetriever(parameterSetSelector, epochCacheManager, activePivotManager);
```

**Snowflake JDBC driver package moves.** The Snowflake JDBC driver bundled with Atoti Server 6.1.19 relocates several public classes. If you reference them in Java imports, update them:

| Class                | Old package                 | New package                          |
| -------------------- | --------------------------- | ------------------------------------ |
| `SFSessionProperty`  | `net.snowflake.client.core` | `net.snowflake.client.internal.core` |
| `SnowflakeStatement` | `net.snowflake.client.jdbc` | `net.snowflake.client.api.statement` |

If you have custom JGroups protocol XML files and are upgrading from 6.0.5 (or earlier), also apply the `auth_class` change described in [SharedSecretAuthToken replaces AtotiAuthToken](#sharedsecretauthtoken-replaces-atotiauthtoken) in the 6.0.6 → 6.0.7 section.

### POM file changes

The upgrade bumps the `activepivot.version` and `common-lib.version` properties in the root `pom.xml` — see the [Dependencies](./dependencies) page for the resolved versions per release.

A new `com.activeviam.apps:services` library dependency is also introduced. It contains REST endpoint services (such as `EndPointFinderService` and `LevelPathService`) that were previously bundled inside `com.activeviam.apps:shared` and the Atoti Server core.

**Managed entry to add in the root `pom.xml` `<dependencyManagement>` block:**

```xml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
<dependency>
    <groupId>com.activeviam.apps</groupId>
    <artifactId>services</artifactId>
    <version>${common-lib.version}</version>
</dependency>
```

**Direct dependency to add in `mr-application/pom.xml`:**

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

If your project repackages `mr-application` or maintains a `pom.xml` derived from Atoti Market Risk, add the `services` dependency (no `<version>` needed if you import the Atoti Market Risk BOM or copy the managed entry above).

### FX shift factor moved to IFxShift service

The FX shift factor (`mr.fx.shift-factor`) was previously applied within the measure chain, which caused incorrect results for inverse and cross-currency pairs. The shift factor is now applied directly inside the `IFxShift` service before any pair inversion or cross-currency computation.

<Warning>
  If your project uses a non-unit shift factor (`mr.fx.shift-factor` != 1.0), results for inverse and cross-currency FX pairs will change after upgrading. The previous behavior applied the shift factor incorrectly for these pairs, so the new results are mathematically correct. Review your FX risk outputs after migration to confirm the expected values.
</Warning>

**If you use the default `FXShift` implementation** (provided by `FXShiftsServiceConfig`), no action is required. The shift factor is automatically read from `IFxProperties.getShiftFactor()`.

**If you have a custom `IFxShift` implementation**, ensure the shift factor is applied to the raw shift vectors before any inversion or cross-currency resolution.

### FX relative sensitivity formula fix

The `FX_RELATIVE` sensitivity formula in `ASensiFormulaProvider.fxRelativeShiftFormula()` applied the `priceFactor` **after** the non-linear FX inversion, which is mathematically incorrect. The formula has been corrected to apply the `priceFactor` **before** the inversion:

```
// Before (incorrect): invert first, then scale
sensitivity × [(1 - 1/(1 + shift)) × priceFactor]^order / order!

// After (correct): scale first, then invert
sensitivity × [1 - 1/(1 + shift × priceFactor)]^order / order!
```

<Warning>
  If your project uses `FX_RELATIVE` sensitivity rules with a `priceFactor` other than 1.0, Taylor VaR and PnL Explain results for FX sensitivities will change after upgrading. The new results are mathematically correct. This fix is consistent with the FX shift factor fix in the `IFxShift` service described above.
</Warning>

### Stable names for hidden technical measures

Hidden intermediate technical measures in the `MTM`, `Notional`, and `OriginalNotional` chains have been renamed. Previously their names were generated automatically by Copper (for example `MTM.SUM__#__0__#__VaR`). These names are now stable, explicit, and include the cube name (for example `MTMVaR-ES Cube.TECHNICAL`).

**Impact on DirectQuery aggregate tables.** If your DirectQuery aggregate table configuration references any of the old auto-generated names, update those references to the new names:

| Cube                | Old auto-generated name pattern | New stable name                              |
| ------------------- | ------------------------------- | -------------------------------------------- |
| VaR-ES Cube         | `MTM.SUM__#__…`                 | `MTMVaR-ES Cube.TECHNICAL`                   |
| VaR-ES Cube         | `Notional.SUM__#__…`            | `NotionalVaR-ES Cube.TECHNICAL`              |
| VaR-ES Cube         | `OriginalNotional.SUM__#__…`    | `OriginalNotionalVaR-ES Cube.TECHNICAL`      |
| VaR-ES Summary Cube | `MTM.SUM__#__…`                 | `MTMVaR-ES Summary Cube.TECHNICAL`           |
| Sensitivity Cube    | `Notional.SUM__#__…`            | `NotionalSensitivity Cube.TECHNICAL`         |
| Sensitivity Cube    | `OriginalNotional.SUM__#__…`    | `OriginalNotionalSensitivity Cube.TECHNICAL` |
| PLCube              | `Notional.SUM__#__…`            | `NotionalPLCube.TECHNICAL`                   |
| PLCube              | `OriginalNotional.SUM__#__…`    | `OriginalNotionalPLCube.TECHNICAL`           |

**Impact on MDX queries.** If any MDX query targeted one of these technical measures by its auto-generated name, update the measure name accordingly.

**Extenders overriding the suffix.** The `nameTechnicalMeasure(String)` method is a default method on `IMeasureParameters`. If a custom suffix is needed, override it in your `IMeasureParameters` implementation.

**Clash risk for deprecated factory overloads.** The deprecated no-arg factory methods `INotionalMeasures.notional()`, `INotionalMeasures.originalNotional()`, and `IVaRESMeasures.mtmNative()` produce unqualified names such as `Notional.TECHNICAL`. If an extender calls a deprecated overload from more than one cube, startup will fail with a duplicate-measure-name error. Migrate to the cube-aware overloads (`notional(String cube)`, `originalNotional(String cube)`, `mtmNative(String cube)`) without delay.

### Deprecated APIs

The following APIs have been deprecated for removal in a future version:

| Deprecated API                                                                      | Replacement                                                                             |
| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| `IMeasureParameters.getFxShiftFactor()`                                             | Configure `mr.fx.shift-factor` — now applied in the `IFxShift` service                  |
| `FxRiskPostProcessorBuilder.withShiftFactor(double)`                                | No replacement needed — shift factor is applied in the `IFxShift` service               |
| `ApplyShiftPostProcessorBuilder.withShiftFactor(double)`                            | No replacement needed — shift factor is applied in the `IFxShift` service               |
| `FXShift(String, IMarketDataRetrievalService, String, IRiskFactorFXPairTranslator)` | `FXShift(IFxProperties, IMarketDataRetrievalService, IRiskFactorFXPairTranslator)`      |
| `INotionalMeasures.notional()`                                                      | `INotionalMeasures.notional(String cube)` — pass the cube name to avoid clashes         |
| `INotionalMeasures.originalNotional()`                                              | `INotionalMeasures.originalNotional(String cube)` — pass the cube name to avoid clashes |
| `IVaRESMeasures.mtmNative()`                                                        | `IVaRESMeasures.mtmNative(String cube)` — pass the cube name to avoid clashes           |

### FXShift constructor change

The `FXShift` class now accepts `IFxProperties` instead of individual `String` parameters for the common currency. The new constructor also reads the shift factor from `IFxProperties.getShiftFactor()`.

If you instantiate `FXShift` directly, update your code:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
// Before (deprecated)
new FXShift("EUR", marketDataRetrievalService, "FX", riskFactorFXPairTranslator);

// After
new FXShift(fxProperties, marketDataRetrievalService, riskFactorFXPairTranslator);
```

### Properties added

[mr-common-config module](../../properties/config-properties/mr-common-config):

| Property                           | Default value    | Description                                                                                                                                                                                     |
| ---------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mr.migration.export.enabled`      | `true`           | Whether the `MRMigrationHelperRestController` (the `/migrationHelper` REST endpoints) is registered. Set to `false` to remove the migration helper from deployments that don't need it.         |
| `mr.migration.export.base-dir`     | `java.io.tmpdir` | Allowed base directory for CSV file exports. Any `outputDirectory` requested by `POST /migrationHelper/extract*` that resolves outside this path after normalization is rejected.               |
| `mr.fx.enable-fx-risk-on-var-cube` | `true`           | Whether FX risk is included in the VaR cube computation. Set to `false` to exclude FX risk from both the complete and summary VaR chains, and to suppress synthetic `*_FX` Risk Factor members. |

### Exclude FX risk from the VaR cube

The new property `mr.fx.enable-fx-risk-on-var-cube` defaults to `true`. No action is required to preserve the current behavior.

To opt in and exclude FX risk from the VaR cube, set the property to `false`:

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
mr:
  fx:
    enable-fx-risk-on-var-cube: false
```

Setting this property to `false` is incompatible with `mr.fx.enable-var-base-currency-dimension=true`. The application will fail at startup if both properties are set together.

In distributed deployments, set this property on each data node that hosts the VaR cube. Keep the value consistent across all data nodes to avoid schema reconciliation failures at startup. Setting the property on a query node alone has no effect.

## 6.0.6 to 6.0.7

Upgrading from version 6.0.6, see [Atoti Market Risk 6.0.7 Release Notes](./release-notes#607).

Atoti Market Risk uses Atoti Server 6.1.17 and Atoti UI 5.2.x.
For new features and fixes included in these releases, please see the [Atoti UI documentation](https://docs.activeviam.com/products/atoti/ui/5.2/)
and [Atoti UI Migration Notes](https://docs.activeviam.com/products/atoti/ui/5.2/docs/changelog), and the [release notes for Atoti Server](https://docs.activeviam.com/products/atoti/server/6.1/docs/release/changelog/index.).

### Summary

* **Atoti Server upgrade**: Atoti Server has been upgraded to 6.1.17.
* **Base Currency dimension extracted to conditional beans**: The Base Currency dimension is now registered as a conditional Spring bean in each cube’s dimension config, replacing inline static method calls. Action required if you override dimension config classes or call `BaseCurrencyDimensionConfig.fxEffectDimension()` directly in custom dimension builders.
* **Sensitivity cube configuration refactoring**: Taylor-specific dimensions have been extracted into a separate configuration class. Action required if you have custom extensions.
* **New CubeMoveKind date members available**: `Previous=CUB+1` and `Next=CUB-1` can now be configured in `mr.taylor.market-shift-date-specific` and `mr.cubes.levels.day-to-day-members` to enable cube-relative date shifting. These are opt-in features that must be explicitly added to your configuration.
* **JGroups authentication class changed**: The JGroups `AUTH` protocol class has been changed from `AtotiAuthToken` to `SharedSecretAuthToken`. Action required if you have custom JGroups protocol XML files.

### Base Currency dimension extracted to conditional beans

The Base Currency dimension was previously added to each cube via inline calls to `BaseCurrencyDimensionConfig.fxEffectDimension()` inside dimension builder lambdas. These inline calls have been removed. The dimension is now registered as a separate conditional Spring bean in each cube’s dimension config class.

The affected classes are:

* `VarESCubeDimensionsConfig`: new bean `varFxEffectDimension`, annotated with `@ConditionalOnVarFxDimensionEnabled`
* `VarESSummaryCubeDimensionsConfig`: new bean `varSummaryFxEffectDimension`, annotated with `@ConditionalOnVarFxDimensionEnabled`
* `SensiCubeDimensionsConfig`: new bean `sensiFxEffectDimension`, annotated with `@ConditionalOnSensiFxDimensionEnabled`
* `SensiSummaryCubeDimensionsConfig`: new bean `sensiSummaryFxEffectDimension`, annotated with `@ConditionalOnSensiFxDimensionEnabled`
* `BaseCurrencyDimensionConfig`: the common `fxEffectDimension` bean is now annotated with `@ConditionalOnSensiFxDimensionEnabled`

**Impact on custom projects**:

If you override any of the above dimension config classes, remove any remaining inline calls to `BaseCurrencyDimensionConfig.fxEffectDimension()` from dimension builder lambdas and define a dedicated conditional bean instead.

If you call `BaseCurrencyDimensionConfig.fxEffectDimension()` directly in a custom dimension builder, replace that call with a bean definition annotated with the appropriate condition annotation, or use the static overload that accepts individual parameters such as `displayCurrencies` and `localRiskMember`.

**No action required if**:

* You use the standard Market Risk configuration without custom extensions
* You do not override any of the dimension config classes listed above

### Configuration changes

#### Taylor dimensions extraction

The following three dimensions have been moved from `SensiCubeDimensionsConfig` to a new configuration class `TaylorDimensionsConfig`:

* Scenario Analysis Hierarchy
* Liquidity Horizon Hierarchy
* Scenario Set Hierarchy

These dimensions are now imported via `TaylorMeasuresConfig`.

**Impact on custom projects**:

If you have custom configuration that extends or overrides `SensiCubeDimensionsConfig`, you may need to update your imports.

If you have custom configuration that directly references these dimension beans, ensure your configuration imports `TaylorDimensionsConfig` or has a dependency on `TaylorMeasuresConfig`.

**No action required if**:

* You use the standard Market Risk configuration without custom extensions
* You do not override Sensitivity cube dimension configuration

#### New CubeMoveKind date members available

The `CUB` prefix is now supported for date shifting in the following properties. The `CUB` prefix stands for **Cube-relative shift**: it resolves to the nearest date that actually exists in the cube (dates are sorted in the cube’s natural descending order, from most recent to oldest), as opposed to `DAY` which shifts by a fixed number of business days.

* `mr.taylor.market-shift-date-specific` (MarketShiftDate hierarchy)
* `mr.cubes.levels.day-to-day-members` (Day-to-Day hierarchy)

**To enable CubeMoveKind** add `Previous=CUB+1` and/or `Next=CUB-1` to your configuration:

```yaml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
mr:
  taylor:
    market-shift-date-specific:
      - TODAY=DAY0
      - YESTERDAY=DAY-1
      - PREVIOUS=CUB+1
      - NEXT=CUB-1
  cubes:
    levels:
      day-to-day-members:
        - Yesterday=DAY-1
        - Day-2=DAY-2
        - Tomorrow=DAY+1
        - End Of Month=EOM-1
        - End Of Quarter=EOQ-1
        - End Of Year=EOY-1
        - Previous=CUB+1
        - Next=CUB-1
```

Note that the **first entry** in each list becomes the default member of the hierarchy. To make `Previous` the default member, place it first in the list.

### Dependency upgrades

#### JGroups authentication class change

##### SharedSecretAuthToken replaces AtotiAuthToken

The JGroups `AUTH` protocol class has been changed from `com.activeviam.activepivot.dist.impl.internal.distribution.security.impl.AtotiAuthToken` to `com.activeviam.common.distribution.security.SharedSecretAuthToken`.

If you have custom JGroups protocol XML files (`protocol-tcp.xml` or `protocol-udp.xml`), update the `AUTH` element:

```xml theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
<!-- Before (6.0.6) -->
<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 (6.0.7) -->
<AUTH auth_class="com.activeviam.common.distribution.security.SharedSecretAuthToken"
      auth_token.auth_value="distribution_password"
      auth_token.token_hash="SHA"/>
```

**No action required if** you use the standard JGroups protocol files shipped with the accelerator.

## 6.0.5 to 6.0.6

Upgrading from version 6.0.5, see [Atoti Market Risk 6.0.6 Release Notes](./release-notes#606).

Atoti Market Risk uses Atoti Server 6.1.15 and Atoti UI 5.2.x.
For new features and fixes included in these releases, please see the [Atoti UI documentation](https://docs.activeviam.com/products/atoti/ui/5.2/)
and [Atoti UI Migration Notes](https://docs.activeviam.com/products/atoti/ui/5.2/docs/changelog), and the [release notes for Atoti Server](https://docs.activeviam.com/products/atoti/server/6.1/docs/release/changelog/index.).

### Summary

* **Atoti Server upgrade**: Atoti Server has been upgraded from 6.1.13 to 6.1.15.
* **Atoti What-If upgrade**: Atoti What-If has been upgraded to 4.1.6-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.).
* **Common-lib upgrade**: Common-lib has been upgraded from 2.1.11-AS6.1 to 2.1.12-AS6.1.
* **Scenario handling rework**: Scenario index decoding now uses a join-based approach via `ScenarioNameFromJoinPostProcessor`, replacing the old store-based `ScenarioNamePostProcessor`.
* **DirectQuery incremental refresh**: The `IRefreshTask` interface has a new method signature accepting a `ChangeDescription` parameter.
* **Branch permissions config moved**: `ActivePivotBranchPermissionsManagerConfig` has moved from `mr-common-config` to `mr-application`.
* **Measure parameter constructors updated**: `VaRMeasureParameters` and `PnLMeasureParameters` constructors now accept an `IFxProperties` object instead of separate FX parameters.

### API updates

#### `IRefreshTask` interface change

The `IRefreshTask` functional interface has been updated. The old `refresh()` method is now deprecated and replaced by `refresh(@Nullable ChangeDescription changeDescription)`. If you have custom implementations of `IRefreshTask`, update them to accept the new `ChangeDescription` parameter:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
// Before (6.0.5)
IRefreshTask task = () -> { /* refresh logic */ };

// After (6.0.6)
IRefreshTask task = (changeDescription) -> { /* refresh logic, optionally using changeDescription */ };
```

The `ChangeDescription` parameter allows incremental refresh operations. Pass `null` if a full refresh is desired.

#### `VaRMeasureParameters` constructor change

The `VaRMeasureParameters` constructor that accepted separate `String fxRiskClass` and `Double defaultFxRate` parameters has been deprecated. The new constructor accepts an `IFxProperties` object instead:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
// Before (6.0.5)
new VaRMeasureParameters(..., fxProperties.getRiskClassMember(), ..., fxProperties.getDefaultFxRate(), ...);

// After (6.0.6)
new VaRMeasureParameters(..., fxProperties, ..., ...);
```

The same change applies to `PnLMeasureParameters`. If you have custom measure parameter beans (e.g. in classes extending `VarMeasureParametersBeans` or `PnlMeasureParametersBeans`), update the constructor calls accordingly.

#### `RiskDimension.getRiskClassesHierarchyWithNA()` deprecated

The method `RiskDimension.getRiskClassesHierarchyWithNA()` has been deprecated. Its behaviour (contributing unknown members with `AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS`) has been merged into `getRiskClassesHierarchy()`. Replace any calls to `getRiskClassesHierarchyWithNA()` with `getRiskClassesHierarchy()`.

### Deprecated classes and methods

The following deprecations have been introduced in 6.0.6. These will be removed in a future release.

#### `ActivePivotBranchPermissionsManagerConfig` in `mr-common-config`

The class `com.activeviam.mr.common.datastore.permissions.ActivePivotBranchPermissionsManagerConfig` in the `mr-common-config` module has been deprecated (`@Deprecated(forRemoval = true, since = "6.0.6")`). The replacement class is `com.activeviam.mr.application.config.security.ActivePivotBranchPermissionsManagerConfig` in the `mr-application` module. The new implementation uses `AtotiSecurityProperties` to dynamically resolve admin roles instead of a hardcoded list.

If you have a custom implementation of branch permissions, migrate to extend or replace the new `mr-application` version.

#### Scenario measure methods

Several scenario-related methods have been deprecated in favour of new “Ex” variants that use the `ScenarioNameFromJoinPostProcessor` (join-based) instead of the old `ScenarioNamePostProcessor` (store-based):

<table><thead><tr><th>Interface</th><th>Deprecated method</th><th>Replacement</th></tr></thead><tbody><tr><td><code>IVaRESMeasures</code></td><td><code>worstScenario()</code></td><td><code>worstScenarioEx()</code></td></tr><tr><td><code>IVaRESMeasures</code></td><td><code>bestScenario()</code></td><td><code>bestScenarioEx()</code></td></tr><tr><td><code>IFixedConfidenceMeasures</code></td><td><code>scenariosConfidence(String)</code></td><td><code>scenariosConfidenceEx(String)</code></td></tr><tr><td><code>IRiskClassFixedConfidenceMeasures</code></td><td><code>scenariosConfidence(String, String)</code></td><td><code>scenariosConfidenceEx(String, String)</code></td></tr><tr><td><code>IContextualMeasures</code></td><td><code>contextScenarios()</code></td><td><code>contextScenariosEx()</code></td></tr><tr><td><code>IContextualMeasures</code></td><td><code>contextScenarios(String, String)</code></td><td><code>contextScenariosEx(String, String)</code></td></tr></tbody></table>

The new methods require an additional underlier for the scenario index measure. If you override any of these methods, update your implementations to use the new variants.

#### `IMeasureResolver.getMeasureBeans()`

The method `getMeasureBeans()` has been deprecated (since 6.0.5). Use `getCopperBeans()` instead, which returns `Publishable<?>` beans (a broader scope including both measures and non-measure copper elements).

### Scenario join-based configuration

Scenario hierarchies and scenario name decoding have been reworked to use a left-join approach. This is the most significant architectural change in 6.0.6.

#### New classes

* `JoinScenarioHierarchy` (`mr-common-config`): Provides base left-join configurations for scenario analysis, liquidity horizon, and scenario set hierarchies.
* `JoinScenarioHierarchyVaR` (`mr-var-config`): VaR cube-specific scenario join configuration.
* `JoinScenarioHierarchySensi` (`mr-sensi-config`): Sensitivity cube-specific scenario join configuration.
* `ScenarioNameFromJoinPostProcessor` (`mr-common-lib`): New post-processor that decodes scenario indices using the join rather than direct store lookups. Implements `IDistributedPostProcessor` for distributed cube support.

#### New Spring qualifier constants

New qualifier constants have been added to `SpringConstants` for injecting scenario store joins and hierarchies:

<table><thead><tr><th>Constant</th><th>Description</th></tr></thead><tbody><tr><td><code>SP\_QUALIFIER\_\_SCENARIO\_STORE\_NAME\_JOIN\_VAR</code></td><td>Scenario store join for VaR cube</td></tr><tr><td><code>SP\_QUALIFIER\_\_SCENARIO\_STORE\_NAME\_JOIN\_VAR\_SUMMARY</code></td><td>Scenario store join for VaR Summary cube</td></tr><tr><td><code>SP\_QUALIFIER\_\_SCENARIO\_STORE\_NAME\_JOIN\_SENSI</code></td><td>Scenario store join for Sensitivity cube</td></tr><tr><td><code>SP\_QUALIFIER\_\_SCENARIO\_STORE\_NAME\_JOIN\_SENSI\_SUMMARY</code></td><td>Scenario store join for Sensitivity Summary cube</td></tr><tr><td><code>SP\_QUALIFIER\_\_SCENARIO\_ANALYSIS\_HIERARCHY\_\*</code></td><td>Scenario analysis hierarchy for each cube</td></tr><tr><td><code>SP\_QUALIFIER\_\_LIQUIDITY\_HORIZONS\_HIERARCHY\_\*</code></td><td>Liquidity horizon hierarchy for each cube</td></tr></tbody></table>

If you have custom cube dimension configurations, update them to use the new join-based hierarchy builders and Spring qualifiers.

### Cube dimension configuration changes

The dimension configuration classes for all cubes have been updated to use the new join-based scenario hierarchies:

* `VarESCubeDimensionsConfig`: New beans `scenarioAnalysisHierarchyVaR()` and `liquidityHorizonHierarchyVaR()` using `JoinScenarioHierarchyVaR`. The deprecated method `scenarioSetLeftJoinVaR()` will be removed in a future release.
* `VarESSummaryCubeDimensionsConfig`: Updated to use `JoinScenarioHierarchyVaR` for summary cube.
* `SensiCubeDimensionsConfig`: Updated to use `JoinScenarioHierarchySensi`.
* `SensiSummaryCubeDimensionsConfig`: Updated to use `JoinScenarioHierarchySensi` for summary cube.

If you maintain custom copies of these configuration classes, align them with the new join-based approach.

The Base Currency and FX Effect hierarchies are added to the VaR cube when `mr.fx.enable-var-base-currency-dimension=true`.

### `EsVaRMetricLevelsProperties` interface extension

The `EsVaRMetricLevelsProperties` interface has four new default methods:

<table><thead><tr><th>Method</th><th>Default return</th></tr></thead><tbody><tr><td><code>getRiskFactor()</code></td><td><code>null</code></td></tr><tr><td><code>getRiskClass()</code></td><td><code>null</code></td></tr><tr><td><code>getSensitivityName()</code></td><td><code>null</code></td></tr><tr><td><code>getSensitivityTypeLevel()</code></td><td><code>null</code></td></tr></tbody></table>

These are used by the multi-jurisdiction FX improvements. If you have custom implementations of this interface, these defaults ensure backward compatibility, but you may want to provide actual level identifiers if you use FX risk features.

### DirectQuery incremental refresh

This release introduces support for incremental refresh of DirectQuery data sources. The `MRDirectQueryRestServices` class now propagates `ChangeDescription` objects through to all `IRefreshTask` instances.

If you have custom refresh tasks or extend the DirectQuery REST services, update your implementations to handle the new `ChangeDescription` parameter. See the [incremental refresh documentation](../dev-direct-query/customization-and-internals/directquery-rest-service#refresh-endpoint) for details.

### Dependency version changes

<table><thead><tr><th>Dependency</th><th>6.0.5</th><th>6.0.6</th></tr></thead><tbody><tr><td>Atoti Server</td><td>6.1.13</td><td>6.1.15</td></tr><tr><td>Atoti What-If</td><td>4.0.4-AS6.1</td><td>4.1.6-AS6.1</td></tr><tr><td>Common-lib</td><td>2.1.11-AS6.1</td><td>2.1.12-AS6.1</td></tr></tbody></table>

## 6.0.4 to 6.0.5

### Apply patched Atoti Server 6.1.13 classes.

Atoti Server 6.1.13 has a few issues which require the application of patched classes to every project using DirectQuery features.

We provide these patched classes in the `mr-application` module. If you are not using this module as-is, please copy the following classes to the application module of your project:

`mr-application/src/main/java/com/activeviam/database/composite/internal/version/CompositeVersionAccessor.java`

`mr-application/src/main/java/com/activeviam/databasecache/private_/database/SqlVersionAccessorWithCache.java`

### `SensitivityType` hierarchy

The new property named `mr.sensi.display-taylor-var-by-sensitivity` is by default set to `true`.
If set to `false`, the Taylor VaR by Sensitivity measures are not displayed in the Sensitivity cube.
The [SensitivityType](../../cube/dimensions/sensitivity-kind) hierarchy is created to replace this set of measures.
Set the property `mr.sensi.display-sensitivity-type-hierarchy` to `false` to hide this new hierarchy.
For instance `Delta Taylor VaR` measure is replaced by `Taylor VaR` with filter on `sensitivityType = Delta`.

If the FX effect is categorized as “Delta FX”, it is important to hide the original `[Sensitivity] Taylor VaR` measures by setting `mr.sensi.display-taylor-var-by-sensitivity=false`.
The FX effect is only moved on the `[Sensitivities].[SensitivityType]` hierarchy but not on the sensitivities specific measures.

If the hierarchies used to translate the FX effect must contain the desired location or be virtual.
To do so, the Risk Class hierarchy has ‘N/A’ as default parameter that is used when the ‘FX’ member is absent.

More precisely, when `mr.fx.enable-fx-risk-location-shift=true`, a location can only be displayed if the respective hierarchies contains the correct members, or are declared as virtual. Otherwise, the FX risk may not be visible in the cube.
To do so, the following analysis hierarchy `HierarchyWithFxRiskFactors` can be used to add the FX risk factor members to the
`Risk Factors@Risk hierarchy`. In the event that the member is not present on the hierarchy and this one is not declared as virtual, the default member will be used.
To display the default member, the property `AUTO_CONTRIBUTE_UNKNOWN_MEMBER_PROPERTY=AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS` must be set on the hierarchy.

The translation between the currency pair and the risk factor is done by the `IRiskFactorFXPairTranslator` bean. It may be customized to fit your risk factor naming convention.
Please see the [Relation between RiskFactor and currency pair](../../calculations/exchange-rate-and-market-data-api#relation-between-riskfactor-and-currency-pair) chapter for more details.

### Properties added

[Sensitivities module properties](../../properties/config-properties/mr-sensi-config):

<table><thead><tr><th>Property</th><th>Default value</th><th>Description</th></tr></thead><tbody><tr><td>mr.cubes.levels.base-currency</td><td>Base Currency\@Base Currency\@Base Currency</td><td>The name of the <a href="../../cube/dimensions/base-currency">Base Currency</a> hierarchy.</td></tr><tr><td>mr.cubes.levels.fx-effect</td><td>FX Attribution\@FX Effect\@Base Currency</td><td>The name of the <a href="../../cube/dimensions/base-currency">FX Effect</a> hierarchy.</td></tr><tr><td>mr.cubes.levels.sensitivity-type-level</td><td>SensitivityType\@SensitivityType\@Sensitivities</td><td>The name of the <a href="../../cube/dimensions/sensitivity-kind">SensitivityType</a> hierarchy.</td></tr><tr><td>mr.fx.enable-fx-risk-location-shift</td><td>true</td><td>The forex conversion of the VaR generates a specific risk; if true, this risk is classified under Delta/FX, if false, it stays at the current location.</td></tr><tr><td>mr.fx.enable-var-base-currency-dimension</td><td>false</td><td>If true, the <a href="../../cube/dimensions/base-currency">Base Currency</a> and the <a href="../../cube/dimensions/base-currency">FX Effect</a> hierarchies are created.</td></tr><tr><td>mr.fx.fx-risk-member</td><td>FX Effect</td><td>Name of the member of <a href="../../cube/dimensions/base-currency">FX Effect</a> that holds the forex conversion risk.</td></tr><tr><td>mr.fx.local-risk-member</td><td>Local Risk</td><td>Name of the member of <a href="../../cube/dimensions/base-currency">FX Effect</a> that holds the local specific risk.</td></tr><tr><td>mr.fx.risk-disable-member</td><td>Local Risk</td><td>Name of the member of <a href="../../cube/dimensions/base-currency">Base Currency</a> used to turn off the forex risk.</td></tr><tr><td>mr.fx.risk-display-member</td><td>Display Ccy</td><td>Name of the member of <a href="../../cube/dimensions/base-currency">Base Currency</a> used to link the forex risk with the display currency.</td></tr><tr><td>mr.fx.sensitivity-name-member</td><td>Delta</td><td>Name of the <a href="../../cube/dimensions/sensitivities">Sensitivity</a> member that holds the forex risk.</td></tr><tr><td>mr.sensi.display-sensitivity-type-hierarchy</td><td>true</td><td>The <a href="../../cube/dimensions/sensitivity-kind">SensitivityType</a> hierarchy is visible on the UI.</td></tr><tr><td>mr.sensi.display-taylor-var-by-sensitivity</td><td>true</td><td>The Taylor VaR by sensitivity type metrics are displayed, filtering by <a href="../../cube/dimensions/sensitivity-kind">SensitivityType</a> should replace them.</td></tr><tr><td>mr.fx.shift-factor</td><td>1.0</td><td>The scale factor applied to FX shift when computing FX Effect of Taylor VaR.</td></tr></tbody></table>

In addition:

* The Spring properties `mr.data-load.csv` have been removed, and the default Data Connector properties are now used instead.
* The source definition is described in the [`application.yaml`](../../properties/property-files/application-yaml) configuration file. For convenience, the content specific to Data Connectors is set in the `application-dlc-local-csv.yaml` and `application-dlc-azure-csv.yaml` file.
* The topics used by Atoti Market Risk are defined via Java beans of type `ILoadingTopicDescription` or `IUnloadTopicDescription`. The topics defined as `ILoadingTopicDescription` are still using the `file-patterns` [Configuration Properties](../../properties/config-properties/mr-common-config), which you can override in the [`application.yaml`](../../properties/property-files/application-yaml) configuration file.

### Migration to Atoti Market Data

The Market Data API, introduced in Atoti Market Risk 5.3, is now an external dependency called Atoti Market Data, using version
1.3.1
.

The market data artifacts (`market-data-lib`, `market-data-config`, and `market-data-spring-boot-starter`) are versioned independently, and the source code is no longer provided alongside the Atoti Market Risk source code.

For more information, see the [Atoti Market Data Documentation](/products/modules/market-data/1.3/online-help/).

As part of this migration, several changes have been made:

<table><thead><tr><th>Property name</th></tr></thead><tbody><tr><td><code>directquery.cache.max-slice-count</code></td></tr><tr><td><code>directquery.cache.max-slice-count-default</code></td></tr></tbody></table>

[mr-common-config module](../../properties/config-properties/mr-common-config):

<table><thead><tr><th>Property</th><th>Default value</th><th>Description</th></tr></thead><tbody><tr><td>mr.enable.cubes.combined</td><td>true</td><td>Enables the <code>MRCombinedCube</code> when set to true. This property has been created to rename and in a future release replace the now deprecated property <code>mr.enable.cubes.common</code>. In this release either property can be used and will have the same effect.</td></tr><tr><td>mr.enable.dtd-absolute-increase</td><td>false</td><td>If true, the day to day increase formula uses an abolute value.</td></tr></tbody></table>

[mr-common-config module](../../properties/config-properties/mr-common-config):

<table><thead><tr><th>Property</th><th>Description</th></tr></thead><tbody><tr><td>mr.enable.cubes.common</td><td>This has been replaced by <code>mr.enable.cubes.combined</code> as this is more consistent with the name of the <code>MRCombinedCube</code>. In this release either property can be used and will have the same effect.</td></tr></tbody></table>

<table><thead><tr><th>Cube</th><th>Measure</th><th>Details</th></tr></thead><tbody><tr><td>PLCube, MRCombinedCube</td><td><a href="../../cube/measures/pnl/pnl-values">DTD PnL</a></td><td>This measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.</td></tr><tr><td>PLCube, MRCombinedCube</td><td><a href="../../cube/measures/pnl/pnl-values">LTD PnL</a></td><td>This measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.</td></tr><tr><td>PLCube, MRCombinedCube</td><td><a href="../../cube/measures/pnl/pnl-values">MTD PnL</a></td><td>This measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.</td></tr><tr><td>PLCube, MRCombinedCube</td><td><a href="../../cube/measures/pnl/pnl-values">YTD PnL</a></td><td>This measure has returned to the PnL Values folder. It was unintentionally removed in Atoti Market Risk 6.0.0.</td></tr></tbody></table>

[mr-common-config](../../properties/config-properties/mr-common-config):

<table><thead><tr><th>Module</th><th>Class name</th></tr></thead><tbody><tr><td>mr-application</td><td><code>DataLoadControllerConfig</code></td></tr><tr><td>mr-application</td><td><code>DataLoadControllerFileConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CSVProperties</code></td></tr><tr><td>mr-common-config</td><td><code>ACSVSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>AdjustmentAzureCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>AdjustmentCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>AdjustmentCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CommonCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CubeMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CurveMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>FxRateMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>SpotMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>SurfaceMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-common-config</td><td><code>AdjustmentLocalCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CommonAzureCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CommonCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CommonLocalCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>AzureSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>ChannelParameters</code></td></tr><tr><td>mr-common-config</td><td><code>ChannelParametersHolder</code></td></tr><tr><td>mr-common-config</td><td><code>ChannelParametersHolderOperator</code></td></tr><tr><td>mr-common-config</td><td><code>Glob</code></td></tr><tr><td>mr-common-config</td><td><code>LocalSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>MessageChannelCreator</code></td></tr><tr><td>mr-common-config</td><td><code>SimpleCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>SimpleJdbcSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>SimpleSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>TopicConfig</code></td></tr><tr><td>mr-common-config</td><td><code>DataLoadControllerConfigurator</code></td></tr><tr><td>mr-common-config</td><td><code>IAzureCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>ICsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>IJdbcSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>ILocalCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>ISourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>ISourceConfiguration</code></td></tr><tr><td>mr-common-config</td><td><code>ITupleFieldsAware</code></td></tr><tr><td>mr-common-config</td><td><code>StoreAndScopeToConditionConverter</code></td></tr><tr><td>mr-common-config</td><td><code>TopicAliasDefines</code></td></tr><tr><td>mr-common-config</td><td><code>TopicToScopeToLoadConverter</code></td></tr><tr><td>mr-common-config</td><td><code>TopicToScopeToRemoveWhereConditionConverter</code></td></tr><tr><td>mr-common-config</td><td><code>ACsvSourceParametersProvider</code></td></tr><tr><td>mr-common-config</td><td><code>ATopicParameters</code></td></tr><tr><td>mr-common-config</td><td><code>CsvColumnsProvider</code></td></tr><tr><td>mr-common-config</td><td><code>CsvColumnsProviderFunction</code></td></tr><tr><td>mr-common-config</td><td><code>CsvPublisherProvider</code></td></tr><tr><td>mr-common-config</td><td><code>CsvPublisherProviderFunction</code></td></tr><tr><td>mr-common-config</td><td><code>CsvTopicColumns</code></td></tr><tr><td>mr-common-config</td><td><code>CsvTopicPublisher</code></td></tr><tr><td>mr-common-config</td><td><code>@ConditionalOnAzureData</code></td></tr><tr><td>mr-common-config</td><td><code>@ConditionalOnAzureSource</code></td></tr><tr><td>mr-common-config</td><td><code>@ConfigurationDirectQueryWithAzureSource</code></td></tr><tr><td>mr-common-config</td><td><code>@ConditionalOnLocalData</code></td></tr><tr><td>mr-common-config</td><td><code>@ConditionalOnLocalSource</code></td></tr><tr><td>mr-common-config</td><td><code>@ConditionalOnDirectQueryWithLocalSource</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLAzureCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLLocalCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLSummaryAzureCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLSummaryCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLSummaryLocalCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>SignoffSummaryPnlPublisher</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLSummaryCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>ASensiCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiAzureCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiLocalCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>ASensiPnLCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiPnLAzureCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiPnLLocalCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>ASensiImportCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiImportAzureCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiImportLocalCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>ScalarSensiCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SignoffSummarySensiPublisher</code></td></tr><tr><td>mr-sensi-config</td><td><code>BCCubeMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>BCCurveMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>BCFxRateMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>BCSpotMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>BCSurfaceMarketDataCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>DirectQuerySensiCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiSummaryCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SourceParametersProviderConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiSummaryOnMainCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VaRAzureCsvSourceConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VaRCsvSourceConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VaRLocalCsvSourceConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VaRSummaryAzureCsvSourceConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VaRSummaryLocalCsvSourceConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VarSummarySourceConfiguration</code></td></tr><tr><td>mr-var-config</td><td><code>SignoffSummaryVarPublisher</code></td></tr><tr><td>mr-var-config</td><td><code>VaRCsvSourceParametersProviderConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VaRSummaryCsvSourceParametersProviderConfig</code></td></tr></tbody></table>

[mr-sensi-config](../../properties/config-properties/mr-sensi-config):

<table><thead><tr><th>Module</th><th>Old name</th><th>New Name</th></tr></thead><tbody><tr><td>mr-common-config</td><td><code>AdjustmentSourceConfiguration</code></td><td><code>AdjustmentCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>CommonSourceConfiguration</code></td><td><code>CommonCsvSourceConfig</code></td></tr><tr><td>mr-common-config</td><td><code>MarketDataSourceConfig</code></td><td><code>MarketDataCsvSourceConfig</code></td></tr><tr><td>mr-pnl-config</td><td><code>PnLSourceConfiguration</code></td><td><code>PnLCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiSourceConfiguration</code></td><td><code>SensiCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiSummarySourceConfiguration</code></td><td><code>SensiSummaryCsvSourceConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>AllBackwardsCompatibleMarketDataSources</code></td><td><code>AllBackwardsCompatibleMarketDataCsvLoadConfig</code></td></tr><tr><td>mr-sensi-config</td><td><code>SensiCsvSourceParametersProviderConfig</code></td><td><code>SourceParametersProviderConfig</code></td></tr><tr><td>mr-var-config</td><td><code>VarSourceConfiguration</code></td><td><code>VarCsvSourceConfig</code></td></tr></tbody></table>

#### Refactor of `SensiMeasureParameters`

With the removal of the vector data model, the `SensiMeasureParameters` constructor has been refactored to remove the `boolean isVector` field.

#### DirectQuery configuration

The `DirectQueryActivePivotConfig` class no longer extends the `ADirectQueryApplicationConfig` class from Atoti Server. Atoti Server 6.1.2 introduced some bean name changes in this class that cause bean resolution issues. These will be resolved in a following Atoti Server release, at which time this change can be reversed.

#### Schema rebuild

In the `MarketRiskConfig` class in `mr-application` we create a bean to schedule an Atoti schema rebuild. Previously this would run after 5 minutes and every 30 minutes thereafter. This was more frequent than necessary and may impact performance. We have increased the default to 1,440 minutes (24 hours) so the rebuild occurs once a day. We have also added new properties (`mr.application.rebuild...`) to customize this for your requirements.

#### Sign-Off REST services

The implementation of the Sign-Off REST services now has a Boolean to enable/disable them.
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.

Atoti core 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`.

#### Webservices

The following outdated dependency has been removed from the POM file of the `mr-common-lib` module:

```
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
    <scope>compile</scope>
</dependency>
```

The String constant for the `"application/json"` media type from the Spring class `org.springframework.http.MediaType` is used instead of the corresponding
constant from the`javax.ws.rs.core.MediaType` class.

#### Sorting order of beans

The class `StartupSpringBeanOrder` has been added with constants used to define the order in which some of the beans are loaded:
In increasing order:

* `START_MANAGER`: Starts the Atoti Server manager.
* `REGISTER_DATABASE_LISTENERS`: Registers the parent/child listeners.
* `INITIAL_CONFIGURATION_DATA_LOAD`: Starts the initial data load.
* `INITIAL_DATA_LOAD`: Instantiates beans after the initial data load is completed.
* `START_DISTRIBUTED_MESSENGERS`: Starts the distribution messengers.

#### Fix for trailing white space incorrectly added with empty string suffix

The methods `*Suffix` in the class `VaRMetricParametersAndNames` now trim the generated measure names to avoid the incorrect addition of a trailing white space.

#### DirectQuery Cache

This release includes a new DirectQuery caching mechanism that dynamically loads slices of data into memory to improve the performance of retrievals from external stores (stores not joined to the base store).

Currently, this only supports market data stores - those from Atoti Market Data and the additional stores from the `mr-sensi-config` module. Additionally, this is a preview feature that is disabled by default. To enable the feature, set the property: `mr.enable.preview.directquery-cache=true`.

When you are using the cache, a “slice” of market data will be stored in memory when it is required for a query. A slice corresponds to all the market data for a given combination of `asOfDate` and `marketDataSet`. These slices will be added and removed from the cache based on the maximum number of slices that can be held at any one time. You can configure the maximum number of slices for a particular table with the `directquery.cache.max-slice-count` property, otherwise the value set in the `directquery.cache.max-slice-count-default` property will be used.

#### Scalar reference data

The reference dataset that is provided in `mr-application/src/main/resources/data` has been updated so that sensitivities are now in a [scalar format](../../input-files/sensitivities) rather than vectorized. This is primarily for clarity now that the Sensitivities Cube no longer supports a vectorized model. It is still possible to provide [sensitivity vectors](../../input-files/sensitivities) as input, but be aware that these will be converted and stored as scalar values in the application.

#### Distribution and measures

Atoti Market Risk cubes and their summary variants (for example the `VaR-ES Cube` and the `VaR-ES Summary Cube`) are created as a horizontal distribution. This enables Atoti Market Risk to show a single measure (for example `VaR`) with some dates coming from the full cube and other date contributions from the summary cube. This is a useful feature, but it comes with a warning. Atoti Server expects that all cubes in a horizontal distribution have exactly identical measure chains. If they do not, this can lead to errors or incorrect results when queries are executed on a query cube with both cubes. The measure chains in Atoti Market Risk are not identical between main and summary cubes but, in this release, we have made changes to avoid these failure scenarios. We strongly recommend that, if you are using summary cubes, you add any new measures both to the main and summary cubes.
