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

# Configuration properties

> Reference for the common Spring Boot properties under atoti.solution.model controlling cubes, currencies, confidence levels, scenarios, rounding, and feature flags.

Common configuration properties are shared across all Atoti Enterprise Risk Suite solutions. These properties are found under the prefix `atoti.solution.model`.
Cube specific properties are separated by its own prefix: `atoti.solution.model.cubes.<cube-name>.*`. For example, the VaR cube in Market Risk (Enterprise Risk) uses the prefix `atoti.solution.model.cubes.var.*`.

This page documents all common properties organized by category. Default values are applied when a property is omitted.

**Prerequisites:** Familiarity with Spring Boot externalized configuration (`application.yml` or `application.properties`).

## Enable cubes

Every cube is enabled by default. The Ratings cube of Counterparty Credit Risk (Enterprise Risk) also needs rating components, and fails startup without them unless it is disabled. To disable a cube, use the following property:

| Property | Type | Default | Description |
| - | - | - | - |
| `atoti.solution.model.cubes.<cube-name>.enabled` | `boolean` | `true` | Enables or disables the cube. Set to `false` to exclude the cube from the application context. |

## Currencies

Prefix: `atoti.solution.model.cubes.<cube-name>.currencies`

Currency properties control the members of the Display Currency simulation dimension.

| Property | Type | Default | Description |
| - | - | - | - |
| `currencies` | `Set\<String\>` | `[EUR, GBP, USD, JPY, CHF]` | Set of available display currencies. Each value becomes a member of the Display Currency hierarchy. |
| `default-currency` | `String` | `EUR` | Default display currency applied when no member is explicitly selected. |

## Confidence levels

Prefix: `atoti.solution.model.cubes.<cube-name>.confidence-levels`

Confidence level properties control the members of the confidence levels simulation dimension.

| Property | Type | Default | Description |
| - | - | - | - |
| `levels` | `Set\<Double\>` | `[95.0, 97.5, 99.0, 99.9]` | Set of confidence level percentages. Each value becomes a member of the confidence levels hierarchy. |
| `default-level` | `Double` | `95.0` | Default confidence level applied when no member is explicitly selected. |

## Scenarios

Prefix: `atoti.solution.model.cubes.<cube-name>.scenarios`

Scenario properties control the size and naming of the P\&L vector dimension. The scenario count must match the length of the `pnl_vector` column in the Trade P\&L input file.

| Property | Type | Default | Description |
| - | - | - | - |
| `count` | `int` | `5` | Number of P\&L scenarios. Determines the length of the P\&L vector stored per trade. |
| `name-expression` | `String` | `'Scenario '.concat(T(java.lang.Integer).toString(#index + #indexOffset))` | SpEL expression for generating scenario names. Available variables: `#index` (zero-based position) and `#indexOffset`. |
| `override-names` | `Map\<Integer, String\>` | `{}` | Map of index to custom name. Overrides the generated name for specific scenario indices. |
| `index-offset` | `int` | `1` | Offset added to `#index` in the name expression. With the default expression, scenarios are named "Scenario 1", "Scenario 2", and so on. |

## Rounding

Prefix: `atoti.solution.model.cubes.<cube-name>`

The rounding method controls how the fractional quantile rank is resolved to an integer index when computing quantile-based measures such as VaR, ES, and PFE.

| Property | Type | Default | Description |
| - | - | - | - |
| `rounding-method` | `RoundingMethod` | `ROUND_EVEN` | Rounding method applied to the floating-point quantile rank. |

The following rounding method values are available. The example column shows how each method resolves a fractional rank of `2.5`:

| Value | Behavior | Example (`2.5`) |
| - | - | - |
| `ROUND_EVEN` | Rounds to the nearest even integer (banker's rounding). Equivalent to `Math.rint`. Default. | `2` |
| `ROUND` | Rounds to the nearest integer, with ties rounding up. Equivalent to `Math.round`. | `3` |
| `FLOOR` | Rounds down towards negative infinity. Equivalent to `Math.floor`. | `2` |
| `CEIL` | Rounds up towards positive infinity. Equivalent to `Math.ceil`. | `3` |

## Feature flags

Prefix: `atoti.solution.model.cubes.<cube-name>`

The common layer provides the following features as reusable building blocks. Each solution decides independently which features to include and whether to expose a toggle for them. Not all solutions support all features, and default values vary by solution.

| Property | Type | Description |
| - | - | - |
| `counterparties.enabled` | `Boolean` | Enables the Counterparties dimension and the counterparty data loading topic. |
| `organization.enabled` | `Boolean` | Enables the Organization dimension and the organization data loading topic. |
| `books.enabled` | `Boolean` | Enables the Books dimension and the book data loading topic. |

Each feature toggle is a nested object directly under the cube prefix. Set the `enabled` sub-property to `false` to disable a feature. Omitting the property leaves it at its default value (typically `true`).

When a feature is disabled, the corresponding dimension is excluded from the cube schema and the associated data loading topic is not registered. Input files for disabled features are ignored even if present. The documentation for each solution lists the default values and which features are supported.

## Multi-level structure

Some features support a multi-level hierarchical structure, such as book, counterparty, and organization. These features expose additional sub-properties under their respective feature prefix.

Prefix: `atoti.solution.features.<feature-name>`

| Property | Type | Default | Description |
| - | - | - | - |
| `multi-level-hierarchy` | `boolean` | `true` | When `true`, the hierarchy is built as a multi-level structure. When `false`, each level is a single-level hierarchy. |
| `structure-depth` | `int` | varies by feature | Number of levels in the hierarchy. The default is feature-specific (for example, book defaults to `4`). |

### Counterparty structure display

The counterparty structure additionally chooses what its members display. Book and organization always display identifiers. An organization has no name to show in their place.

Prefix: `atoti.solution.features.counterparties`

| Property | Type | Default | Description |
| - | - | - | - |
| `structure-display` | `ID` \| `NAME` | `ID` | What the members of the Counterparty Structure hierarchy display: their `CounterpartyId`, or the `CounterpartyName` that identifier resolves to. |

Whichever is set, the members themselves carry the counterparty identifier: only their caption changes. Filters, saved dashboards and anything else holding a member coordinate keep resolving when the setting is switched.

Counterparty names need not be unique. Counterparties sharing a name with one of their siblings are displayed as `Name (Identifier)`, and one with no name is displayed by its identifier. Because a name is only a caption, a counterparty arriving later and colliding with an existing one re-captions it without moving it.

A caption is keyed by counterparty identifier alone, not by date. Where a counterparty is loaded under different names at different as-of dates, the latest as-of date's name wins. A cube that keeps one effective counterparty set rather than a dated history, such as the Ratings cube of Counterparty Credit Risk (Enterprise Risk), names only the counterparties no loaded date names, so an application showing names from both kinds of cube displays the dated name in both. Unloading a date withdraws exactly that date's captions: a counterparty no other loaded date names then displays the effective set's name if it has one, and its identifier otherwise.

Members keep their position: a formatter decides what a member displays, not where it sits, so the
hierarchy stays ordered by counterparty identifier. Where those identifiers are opaque, names
therefore appear in an order that looks arbitrary, and the sort control in Atoti UI does not correct
it: sorting a level there ranks members by their position in the hierarchy's own order, so ascending
reproduces identifier order and descending reverses it.

Order by what is displayed in the query instead. Atoti UI recognises such a sort and shows it as an
alphabetical sort of the level, provided the calculated measure is named after the level and ends
`_for_order`:

```
WITH Member [Measures].[[Counterparties]].[Counterparty Structure]].[Counterparty Structure Level 2]]_for_order]
       AS [Counterparties].[Counterparty Structure].CurrentMember.MEMBER_CAPTION
SELECT NON EMPTY Order(Hierarchize(...), [Measures].[…_for_order], BASC) ON ROWS
```

A saved widget carrying that sort keeps working and displays its sort state correctly; a hierarchy
browsed without one comes back in identifier order.

Counterparties sharing a name are only disambiguated against their own siblings. Two on the same
level under different parents keep the same caption, so a lookup by caption can match more than one
member.

Changing this setting takes effect on restart.

## Query results limit

Prefix: `atoti.solution.model.cubes.<cube-name>.query-results-limit`

Query result limit properties cap the number of results returned by cube queries to prevent out-of-memory conditions.

| Property | Type | Default | Description |
| - | - | - | - |
| `intermediate-limit` | `int` | `Integer.MAX_VALUE` | Maximum number of intermediate results retained during query execution. |
| `transient-limit` | `long` | `Long.MAX_VALUE` | Maximum number of transient results retained during streaming query execution. |

## As-of-date data load

Controls what an application loads and unloads for a single as-of date, and which dates it loads on startup. Available to an application that imports `AsOfDateDataLoadConfiguration`. See [Data loading](../developer-guide/data-loading#how-does-an-application-request-a-load) for how the load itself runs.

Prefix: `atoti.solution.data-load.as-of-date`

| Property | Type | Default | Description |
| - | - | - | - |
| `topics` | `List\<String\>` | `[]` | Topics loaded for each as-of date. Each entry is a data-loading topic or an alias over several of them; a solution publishes its alias name through its topics bean (`I[Cube name]CubeTopics`). A name nothing declares is skipped with a warning rather than failing the request, so a disabled cube needs no change here. |
| `unload-topics` | `List\<String\>` | unset | What to unload for each as-of date, when it differs from `topics`. Add each solution's unload alias, which leaves alone data that is not scoped on the as-of date and is reloaded wholesale. A name nothing declares is skipped with a warning, so a disabled cube needs no change here. Unset unloads the same names that are loaded; an empty list unloads nothing at all. |
| `initial-dates.enabled` | `Boolean` | `true` | When `true`, the application triggers a data load for each date in `initial-dates.dates` once the database is available. |
| `initial-dates.dates` | `Set\<LocalDate\>` | `[]` | Set of as-of dates to load on startup (ISO format, e.g. `2024-01-15`). Application-wide: one request per date covers every cube deployed. |
| `controller.enabled` | `Boolean` | `true` | When `false`, the `/activeviam/as-of-date/rest/v1` REST endpoints are not registered. The startup load is unaffected. |

## Example configuration

The following example shows a minimal `application.yml` configuration using `<cube-name>` as a placeholder. Replace `<cube-name>` with the actual cube prefix for the solution (for example, `var` for the Market Risk (Enterprise Risk) VaR cube).

```yaml theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
atoti:
  solution:
    model:
      cubes:
        <cube-name>:
          currencies:
            currencies: [EUR, USD, GBP]
            default-currency: USD
          confidence-levels:
            levels: [95.0, 99.0]
            default-level: 99.0
          scenarios:
            count: 250
          counterparties:
            enabled: false
          organization:
            enabled: true
```

## Related pages

* [Dimensions and hierarchies](./dimensions-and-hierarchies)
* [Input file formats](./input-file-formats)
