Skip to main content

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.

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

Migrate to 5.4.2

Upgrading from version 5.4.1 - see Atoti Market Risk 5.4.2 Release Notes.

Headline announcement

  • Dependency upgrades : This release includes updates to Atoti Server (6.0.18-sb3) and DaSH (3.3.1-AS6.0). These updates contain a number of bug fixes and improvements. Please see the release notes for these products for further information.
  • DirectQuery table validation timeout : The timeout for DirectQuery table validation queries can now be configured with a property.
  • Cash market data measures : Market data measures for Cash now correctly return the FX rate instead of using the FX post-processor with dynamic aggregation.
  • Missing FX rates : Attempting to retrieve FX rates for missing currencies no longer causes an error or causes queries to fail.

Missing FX Rates

This release introduces a new behavior for FX conversion. When the application converts from the currency of a trade to the display currency, it attempts to retrieve an FX rate from the FxRateMarketData store. This is handled by the FXRate post-processor, utilizing the FXRateWrapper bean. Before this release, no FX rates relating to the currency of the trade resulted in an error, causing queries to fail. In this release, instead of throwing an exception, the FXRate post-processor returns null, so these trades are not included in the displayed results. Please take this into account. In this event a warning log is reported.

Configuration Properties

Properties added
PropertyDefault valueDescription
directquery.schema.validation.table-validation-query-timeout1 minuteThis property can be used to change the timeout that is used for table validation queries with DirectQuery.

Migrate to 5.4.1

Upgrading from version 5.4.0 - see Atoti Market Risk 5.4.1 Release Notes.

Headline announcement

  • Upgrade to Atoti 6.0.17-sb3 : This picks up the latest bug fixes and optimizations from Atoti.
  • Fix Swagger UI : Swagger UI is now accessible and documents the REST endpoints in Atoti Market Risk.
  • Fix Logback file configuration : The mr-application/src/main/resources/logback-spring-file.xml configuration has been fixed and writes logs to a local file.
  • Configurable parent child depth: You can now configure the maximum depth of parent-child hierarchies.
  • Market Data chain changes: Market data chain has been changed: it is now required to add the sensitivity name and risk class levels in the views to display market data.
  • Updated dashboards : A number of dashboards have been updated due to market data measure and context value changes. For details, see Updated dashboards.
  • Compatibility with Atoti Sign-off 5.3: This version of Atoti Market Risk is compatible with Atoti Sign-off 5.3.
  • Adjustment fixes: Cube level adjustments for the Sensitivity and VaR modules can now be executed and the adjusted values can be found in the UI by using the corresponding <measure>_adjusted measures. Deleting adjustments no longer fails when cubes are disabled.

Configurable parent child depth

You can now configure the maximum depth of the parent-child hierarchies (books, legal entities, counterparties) with new properties. To achieve this, the stores BookHierarchy, CounterpartyHierarchy, LegalEntityHierarchy now also have a variable number of fields to store the corresponding level entries. In addition, the summary flat stores (PnLBaseStore, SensiBaseStore, BaseStore) have a variable number of fields to be in line with the variable depth.

Market Data chain changes

xxx Current MD / xxx Previous MD

The following measures do not handle FX conversion anymore. They return the same value as the underlying xxx xxx MD Native metric.
  • Correlation Current MD
  • Correlation Previous MD
  • CrossGamma Current MD
  • CrossGamma Current MD 2
  • CrossGamma Previous MD
  • CrossGamma Previous MD 2
  • Delta Current MD
  • Delta Previous MD
  • Dividend Current
  • Dividend Previous
  • Gamma Current MD
  • Gamma Previous MD
  • Vanna Current MD
  • Vanna Current MD 2
  • Vanna Previous MD
  • Vanna Previous MD 2
  • Vega Current MD
  • Vega Previous MD
  • Volga Current MD
  • Volga Previous MD
In addition, the axes needed to fetch the underlying market data are now required: sensitivity name ([Sensitivities].[Sensitivity].[SensitivityName]), risk class ([Risk].[Risk Classes].[RiskClass]), risk factor, and other dimensional axes such as tenor/maturity/moneyness (for curve/surface/cubes market data). Even if two pieces of market data are the same, they can’t be merged for display anymore.

Hidden measures

The following measures are now hidden, since the notion of native currency is not applicable to market data. The value of a measure xxx MD Native value is now equal to the value of the corresponding xxx MD measure. In addition, the axes needed to fetch the underlying market data are now required: sensitivity name ([Sensitivities].[Sensitivity].[SensitivityName]), risk class ([Risk].[Risk Classes].[RiskClass]), risk factor, and other dimensional axes such as tenor/maturity/moneyness (for curve/surface/cubes market data). Even if two pieces of market data are the same, they can’t be merged for display anymore.
  • Correlation Current MD Native
  • Correlation Previous MD Native
  • CrossGamma Current MD 2 Native
  • CrossGamma Current MD Native
  • CrossGamma Previous MD 2 Native
  • CrossGamma Previous MD Native
  • Delta Current MD Native
  • Delta Previous MD Native
  • Dividend Previous Native
  • Dividend Current Native
  • Gamma Current MD Native
  • Gamma Previous MD Native
  • Vanna Current MD 2 Native
  • Vanna Current MD Native
  • Vanna Previous MD 2 Native
  • Vanna Previous MD Native
  • Vega Current MD Native
  • Vega Previous MD Native
  • Volga Current MD Native
  • Volga Previous MD Native

Updated dashboards

The following dashboards have have been updated with the levels [Sensitivities].[Sensitivity].[SensitivityName] and [Risk].[Risk Classes].[RiskClass] added to their MDX queries so that market data can be displayed:
  • Atoti MR & PL/Story-Telling Target Views/Delta and Gamma P&L Explain
  • Atoti MR & PL/Story-Telling Target Views/Vega P&L Explain
  • MR/03 - PnL Explain/02 - Example for one trade
  • MR/03 - PnL Explain/03 - Vega Market data
MR/01 - VaR-ES/03 - VaR Explain Dashboard has been fixed: a context value that was removed in a previous version was incorrectly used in the dashboard.

Configuration

Configuration properties
Properties added
mr-common-config module:
PropertyDefault valueDescription
mr.parent-child.book-depth15Maximum level of BookHierarchy.
mr.parent-child.counterparty-depth10Maximum level of LegalEntityHierarchy.
mr.parent-child.counterparty-depth5Maximum level of CounterpartyHierarchy.
Properties changed
mr-common-config module:
PropertyPrevious defaultNew defaultDescription
mr.sign-off.common.hierarchy.level2.approvedAPPROVEDEXPORT_SUCCEEDEDThis is for compatibility with Sign-off 5.3, ensuring the Official sign-off feed status is updated after export.
mr-sensi-config module:
PropertyPrevious defaultNew defaultDescription
mr.sign-off.sensi.sensi-cube-adjustments.hierarchies-to-excludeDate@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,DynamicMaturities@DynamicBucketing,DynamicMoneyness@DynamicBucketing,DynamicTenors@DynamicBucketing,DayToDay@DatesDate@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,DynamicMaturities@DynamicBucketing,DynamicMoneyness@DynamicBucketing,DynamicTenors@DynamicBucketing,MarketShiftDate@Dates,displayCurrency@Currencies,DayToDay@DatesAdded MarketShiftDate and DisplayCurrencies hierarchies to the list of excluded hierarchies as these are slicing hierarchies.
mr-var-config module:
PropertyPrevious defaultNew defaultDescription
mr.sign-off.var.var-cube-adjustments.hierarchies-to-excludeDate@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,CalculationIds@Risk,DayToDay@DatesDate@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,CalculationIds@Risk,MarketShiftDate@Dates,displayCurrency@Currencies,DayToDay@DatesAdded MarketShiftDate and DisplayCurrencies hierarchies to the list of excluded hierarchies as these are slicing hierarchies.

Other changes

Sign-Off 5.3 compatibility

In order to achieve compatibility with Atoti Sign-Off 5.3 the following REST endpoint was added to SignOffRestService: @PostMapping("/update-state"). Sign-off uses this endpoint to update the sign-off status in Atoti Market Risk.
If you have a custom implementation of ISignOffRestService you will need to add this endpoint to be compatible with Sign-off 5.3.

Migrate to 5.4.0

Upgrading from version 5.3.0 - see Atoti Market Risk 5.4 Release Notes.

Headline announcement

  • Market Data API: The new Market Data API has been significantly updated with new features. It has also been moved to dedicated modules, the market-data-api library module and the market-data-api-spring-boot-starter module for easy auto-configuration. The changes include:
    • Improved design: The design of the Market Data API has been refined to better reflect real-life usage and remove unintended complexity. For details about the design and implementation suggestions, see Market Data API.
    • MarketDataDateShift enum: Changed the MarketDataDateShift enum value TODAY to CURRENT_DAY to clarify its meaning.
    • Interpolators: New interpolators are now accessible from the IInterpolationService:
      • InterpolationMode.LINEAR on two axes lets you perform linear interpolation on a 2D surface of values.
      • InterpolationMode.VOL_TO_VARIANCE on two axes lets you perform linear interpolation on a 2D surface of values, with a volatility-to-variance transformation applied to the input data and a variance-to-volatility transformation applied to the results of interpolation.
      • InterpolationMode.LINEAR on three axes lets you perform linear interpolation on a 3D cube of values.
    • Changed new Market Data API data model: The MarketDataSet and ID fields in the new Market Data API data model have been swapped around.
    • Migrated scalar measures: The scalar sensitivities market data measures have been migrated to the new Market Data API.
    • Support for Corporate Actions: Corporate actions (splits and dividends) are now supported using the new Market Data API.
Important note for Taylor VaR: The Taylor VaR measure chains still use the deprecated market data API. Only the PnL Explain measure and market data chains have been updated to use the new market data API.
  • Atoti Server: Upgraded to Atoti Server 6.0.14-sb3.
  • Spring Boot 3: Upgraded to Spring Boot 3.2.0, which uses Spring Framework 6.
  • Hibernate: The application has been upgraded to Hibernate 6.3.1.Final.
  • H2: The application has been upgraded to H2 2.2.224.
  • Security configuration: Some classes related to security configuration have been moved from the mr-common-config project to the mr-application project.
  • Spring Profiles: Profile-based configuration has been replaced with properties (backwards compatible). For details, see Profile-based configuration.
  • Fluent post-processors: Post-processor metrics are now set up in a Fluent style. The levels and hierarchies use strong types. For more details, see Fluent post-processor setup.
  • Specific alias classes for lambda generics: Lambda generics have been replaced with specific alias classes (e.g. MeasurePublisher for Consumer intended for publishing measures).
  • Topic Aliases: The topic aliases used by the Data Load Controller (DLC) are now defined for each topic rather than in a single place during DLC initialization.
  • New moneyness default value: The default value of the moneyness field in the sensitivities and market data has been changed from ATM to N/A.
  • Catalog name: The catalog has been changed from MarketRiskAccelerator to MR.
  • Combined cube metrics: The metrics of the combined cube are now defined in the class MRCombinedCubeMeasuresConfig, their definition in pure Copper is also provided but should not be used. For details, see The MRCombinedCube metrics.
  • Property cleanup: The unused property SENSITIVITY_TYPE has been removed in the DynamicTenorsAndMaturitiesPostProcessor class.
  • Added a new abstract tuple publisher: Introduced new abstract tuple publisher (ATableFormatTuplePublisher) for publishers where the file format does not match the table data model. For details, see New abstract tuple publisher.
  • Admin UI: The Admin UI has been upgraded to version 5.1.5. For details, see Upgrade to Admin UI 5.1.5.
  • PnL Explain with DirectQuery: PnL Explain is now working across the transition between DirectQuery and in-memory sensitivity cubes. For details, see PnL Explain with DirectQuery.
  • UI Activation: An import of react-query is required when using mr-sdk. See UI activation for more details.
  • Databricks: Added support for DirectQuery with Databricks.
  • Removed Debug measures: The debug market data measures and subsequent classes have been removed from the product.
  • Scalar sensitivities default: The default data model for sensitivities changed from vector model to scalar model.
  • Vector sensitivities deprecated: The vector sensitivities data model is deprecated and planned for removal. If you need to switch from vectorized to scalar sensitivities, see Customizing Atoti Market Risk to use store-backed maturity conversion with scalar sensitivities.
  • Market Data bookmark removed: The Risk Factor History bookmark under Atoti MR & PL/Story-Telling Target Views has been removed.
  • Content server reset on start: The default behavior driven by the in-memory database properties in application.yaml has been changed to reset the content server on start with the bookmarks folder (mr-application/src/main/resources/mr-bookmarks).
  • Added topic alias AllMarketData: All the market data tables are regrouped under the new topic alias AllMarketData, used for loading the input files.

Breaking changes

  • A number of classes named ...Helper(s) have been renamed to ...Utils for naming consistency with similar classes.
  • All Utils and Constants classes, as well as other classes containing only static variables and/or methods, now have a private constructor.
  • com.activeviam.mr.common.calculations.adjustments.constants.AdjustmentsConstants has been removed and the two constants from this class added to com.activeviam.mr.common.constants.AdjustmentsConstants.
  • ASecurityConfig.PIVOT_USER_ROLES has changed from String[] to List<String>.
  • The METRIC variable on a number of measure chain classes is now a static constant in place of a final instance variable.
  • Fields on two What-If classes are now final, with corresponding getter/setter methods available.
  • The lambda generic classes have been replaced by specific classes.
  • Some classes related to security configuration have been moved from the mr-common-config project to the mr-application project.
  • In the mr-common-config project, the class UnsecuredDatabaseServiceConfig has been renamed to WhatIfAwareUnsecuredDatabaseServiceConfig.
  • The issue described in the ticket MR-1626 (trying to log in with a user that does not have admin rights throws a 403 HTTP error) has been fixed in the class MRSecurityFilterChainsConfig.
  • The NoOpPostProcessor is defined in the Common Library, the package is now com.activeviam.accelerator.common.postprocessor.impl.
  • The tuple publishers that target multiple stores, or stores with a data model distinct from the input file format now extend ATableFormatTuplePublisher.
  • The unused property SENSITIVITY_TYPE has been removed in the DynamicTenorsAndMaturitiesPostProcessor class.
  • The topic aliases used by the Data Load Controller (DLC) are now defined for each topic rather than in a single place during DLC initialization. The ChannelParametersHolder::addTopic now has a 4th parameter that holds the list of all topic aliases to which the topic belongs. The function DataLoadControllerConfig::registerTopicAliases computes the aliases based on this extension and shouldn’t be modified anymore. For details, see Step 3 in Data loading and unloading.
  • Replaced the Atoti Market Risk ReferenceLevelLocationShift post-processor with the Common Library ReferenceLevelLocationShiftLight. Any usage of the post-processor will have to be replaced, as will any usage of the mr.metrics.rlshift.post-processor property referring to the old plugin key. The default value of the property has been changed to ReferenceLevelLocationShiftLight.
  • The application has been upgraded to Hibernate 6.3.1.Final and H2 2.2.224. As a consequence, the content of the content server database has changed. See Migration of the content server database.
  • The catalog name has been renamed from “MarketRiskAccelerator” to “MR”.
  • The new configuration class ApplicationJwtConfig has been added to handle the configuration used for JWT authentication.
  • The constant VALUE_CCY in StoreFieldConstants has been removed and replaced by the constant CCY.
  • The MRCombinedCube metrics are now configured by beans with the qualifier SP_QUALIFIER__COMMON_MEASURE_BUILDERS and SP_QUALIFIER__COMMON_MEASURES.
  • The interface IAsyncTask has been replaced by IRefreshTaskthat is more specific and used to perform refresh action upon DirectQuery refresh request.
  • Vectorized sensitivities have been deprecated: scalar sensitivities should be used instead of vectorized sensitivities.
  • The default data model for sensitivities changed from vector model to scalar model.
  • The CorporateAction store has been removed for scalar sensitivities, and deprecated for vectorized sensitivities: it is still used to handle dividends for vectorized sensitivities, but is not used anymore for scalar sensitivities.
  • Stock splits are handled in a new store: the SplitRatioMarketData store is used for the handling of stock split ratios both for vectorized and scalar sensitivities.
  • New input files for Dividends and stock Split Ratios have been created.
  • New Market Data input files: spot, curve, surface, cube, and correlation market data files have been created to replace the previous market data input file.
  • The Market Data Cube has been deleted : Market data measures in the Sensitivities Cube need to be used to display market data instead of the Market Data Cube.
  • The debug market data measures have been removed.
  • The modules mr-market-data-lib and mr-market-data-config have been removed. They were used for the configuration of the Market Data Cube.
  • In the ThetaCopper class, some methods have been renamed. The marketDataPostProcessor and scalarMarketDataPostProcessor methods have been renamed.
  • The com.activeviam.accelerator.common.dates.IMaturityConverter interface has been removed from the module mr-common-lib and has been replaced by the interface com.activeviam.accelerator.common.dates.IMaturityConverter.
  • Some methods have been added to the ISensitivityMarketDataMeasures interface and the following methods have been changed:
    • scalarNativeIntermediateInterpolatedDividend
    • scalarNativeIntermediateInterpolatedTheta
    • vectorNativeIntermediateInterpolatedTheta
  • For the market data measure chains configuration: the class names *CurrentDateMarketDataChain, *NextDateMarketDataChain and *PreviousDateMarketDataChain have been changed to use the new Market Data API.
  • The SQL scripts to create and load data for DirectQuery with Microsoft SQL Server and Snowflake have been modified to match the schema of the new Market Data API.
  • Default content server startup settings changed to reset its content to the content in mr-application/src/main/resources/mr-bookmarks. No persistence upon restart with new default properties.
  • The MaturityDate & TradeDate fields of the TradeAttributes store, and the MaturityDates and TenorDates fields of the TradeSensitivities store are now typed as Date instead of String. Code that requires these to be Strings will need updating.
  • The constructor of the MraSimpleTenorConverter class in the mr-common-lib module has changed. In addition to a String-typed default for tenors and maturities, this class now also requires a Date-typed default. This change is due to the type change of the fields mentioned above.
  • The properties beginning mr.sensi.rules.<sensitivity-type>... have been renamed mr.sensi.rules.<sensitivity-type>.pnl-explain. This is to accommodate the new mr.sensi.rules.<sensitivity-type>.taylor-var properties that allow Taylor VaR and PnL Explain calculations to be configured independently.
  • The ISensiRuleConfigurationService interface has been replaced by the IPnlExplainRuleConfigurationService and ITaylorVarRuleConfigurationService interfaces.
  • The ISensiRuleConfigurationServicAware interface has been removed.
  • The method getVaRExplainFormula in IPnLExplainFormulaProvider has been renamed to getPnlExplainFormulaForShift as this method is now only used for PnL Explain calculations.
  • The constructor for the PnLExplainFormulaProvider class now requires an IPnlExplainRuleConfigurationService instead of an ISensiRuleConfigurationService.
  • The InputSelector class has been renamed to PnlExplainInputSelector. There is a corresponding TaylorVarInputSelector and they both implement IInputSelector. To autowire these beans you must now use the new qualifiers: SP_QUALIFIER__PNL_EXPLAIN_INPUT_SELECTOR and SP_QUALIFIER__TAYLOR_VAR_INPUT_SELECTOR.
  • The IInputSelectorAware interface has been replaced by the IPnlExplainInputSelectorAware and ITaylorVarInputSelectorAware interfaces.
  • The APnlVectorFromRiskSensiPostProcessor post-processor now implements the ITaylorVarFormulaProviderAware interface instead of the IPnLExplainFormulaProviderAware interface.
  • Tenor Converter / Maturity Converter: When a parsing error occurs, a null value (for object based return functions) or a NaN value (for double return functions) is returned.

Tenor Converter / Maturity Converter

When a parsing error occurs, a null value (for object based return functions) or a NaN value (for double return functions) is returned. The caller should take action to handle the error case correctly, for instance, by calling the error handler.

Profile-based configuration

The code in Atoti Market Risk will no longer change behavior based directly on Spring profiles. Instead, the behavior will be determined by properties. The properties can be set by profile-selected configuration files. Default property files are included to preserve backwards compatibility with the use of profiles. In particular, instead of the profiles dist-data-node, dist-query-node, and forceNetty (and the property directquery.enabled), we have the following properties:
PropertyDescriptionValues
starter.deployment.typeSpecifies the nature of the database used for the cube.It can take three values:
  • in-memory (default): The in-memory datastore is used.
  • direct-query: An external database is used. This replaces the directquery.enabled property.

    An in-memory datastore is still used for configuration data and caching.

  • query-node: No database is used.
starter.deployment.transportSpecifies the messenger to use for communication between cubes.It can take two values:
  • local (default): For communication only within a single machine. It cannot be used for distribution, but is faster if distribution isn’t needed.
  • netty: For jgroups communication between machines in a distributed deployment.
  • none: For no communication bus, when no query cube is used.
mr.enable.cubes.common=falseAn existing flag, which turns the MRCombinedCube polymorphic cube on or off.
The following configuration files have been added to match the behavior of the profiles:
Spring profileConfiguration filestarter.deployment.typestarter.deployment.transportcombined.disable
defaultin-memorylocalunset (false)
dist-data-nodeapplication-dist-data-node.yamlin-memorynettytrue
dist-query-nodeapplication-dist-query-node.yamlquery-nodenettyunset (false)
forceNettyapplication-forceNetty.yamlunset (in-memory)nettyunset (false)
See the Externalized Configuration section of the Spring Boot documentation for more information on profiles and property management.

The MRCombinedCube metrics

The polymorphic metrics of the combined cube (using metrics from several underlying data cubes) are now defined by beans. The configuration is located in MRCombinedCubeMeasuresConfig configuration class. The metrics could be defined in the legacy way under the qualifier @Qualifier(SP_QUALIFIER__COMMON_MEASURE_BUILDERS) that will be aggregated by the cube configuration. They can also be defined in Copper style with the qualifier @Qualifier(SP_QUALIFIER__COMMON_MEASURES). The Copper for polymorphic metrics is an alpha feature and is only present for demonstration. The Copper for polymorphic metrics is activated by the environment variable activeviam.feature.experimental.copper_in_distributed_cube.enabled=true. The Spring condition @ConditionalOnExperimentalCopperInDistributedCube checks that the environment variable is set. The Spring condition @ConditionalOnNotExperimentalCopperInDistributedCube checks that the environment variable is not set.

PnL Explain with DirectQuery

By setting up Atoti Market Risk using in-memory node and DirectQuery nodes, the transition between the two nodes is now correctly handled for the PnL Explain computation. As before, the dates defined in the property mr.data-load.initial-business-dates are loaded on the in-memory node and NOT loaded in the DirectQuery node. However, on the DirectQuery node, the FXRates and MarketData stores are now loaded from both DirectQuery for the non-defined dates and from the files for the defined dates in the property. By doing this, the Day PnL Explain computation can fetch the market data for Day-1 and Day on the DirectQuery node of Day-1. This is done by adding in-memory sources on DirectQuery setup:

Condition changes

Storage sourcePreviously used conditionCommon condition (DQ & in-memory)In-memory only conditionDirectQuery only condition
Local@ConditionalOnLocalData@ConditionalOnLocalSource@ConditionalOnLocalData@ConditionalOnDirectQueryWithLocalSource
Azure@ConditionalOnAzureData@ConditionalOnAzureSource@ConditionalOnAzureData@ConfigurationDirectQueryWithAzureSource

New Sources

A new source configuration dedicated to DirectQuery has been added by the configuration classes SensiPnLAzureCsvSourceConfig, SensiPnLLocalCsvSourceConfig, and DirectQuerySensiCsvSourceParametersProviderConfig. It loads the FX and market data on in-memory based for the dates defined by the property mr.data-load.initial-business-dates. It uses the same topics and aliases as the in-memory setup (Attributes/AllAttributes/FXRates for FX, DailySensiConfig/SensiConfig/AllSensi/AllAttributes/AllFacts/MarketData for Market Data). A refresh issued to DirectQuery will also reload the initial data.

New qualifiers

To handle this source, several qualifiers have been added:
ConstantQualifierTypeSource
SP_QUALIFIER__DQ_SENSI_TOPIC_PUBLISHERS“dq-sensi-topic-publishers”Publisher generator FunctionSensi for DirectQuery
SP_QUALIFIER__DQ_SENSI_TOPIC_COLUMNS“dq-sensi-topic-columns”Columns generator FunctionSensi for DirectQuery
SP_QUALIFIER__DQ_SENSI_TOPIC_TO_STORE_AND_FILE_MAP“dq-sensi-topic-to-store-and-file-map”Definition of the topicsSensi for DirectQuery

Configuration classes

Files Modified

Application configuration
Three classes have been renamed from ...Helper(s) to ...Utils for consistency with similar classes. In MR, a Utils class is one that contains only static methods. These three classes are:
Old class nameNew class name
DatastoreDescriptionHelperDatastoreDescriptionUtils
MeasureChainHelpersMeasureChainUtils
SchemaHelpersSchemaUtils
We have also consolidated two Utils classes: com.activeviam.mr.common.calculations.adjustments.constants.AdjustmentsConstants has been removed and the two constants in this class have been moved to com.activeviam.mr.common.constants.AdjustmentsConstants. These constants are unchanged, you simply need to update the import statements. Utils classes and others, such as Constants classes, that contain only static variables and/or methods are not intended to be instantiated. Therefore, for clarity, we have added private constructors to these classes. They are as follows:
  • ComponentVaRCalc
  • CookieUtil
  • DatastoreConstants
  • DatastoreDescriptionUtils
  • DimensionConstantsConfig
  • DimensionUtils
  • MeasureChainHelpers
  • MeasureConstants
  • SchemaConstants
  • SignOffConstants
  • StoreUtils
  • WhatIfConstants
  • WhatIfUtils
The type of the constant ASecurityConfig.PIVOT_USER_ROLES has changed from String[] to List<String>, where the list is an unmodifiable list. This is to ensure the immutability of this constant.
Measures configuration
A number of abstract measure chains have a METRIC field, representing the metric that the chain creates measures for. On all these classes, this is now a static constant in place of a final instance variable. These chains are:
  • AESChain
  • AETGChain
  • AHDChain
  • ASummaryESChain
  • ASummaryETGChain
  • ASummaryVaEChain
  • ASummaryVaRChain
  • ASummaryWESChain
  • ASummaryWETGChain
  • ASummaryWVaEChain
  • ASummaryWVaRChain
  • AVaEChain
  • AVaRChain
  • AWESChain
  • AWETGChain
  • AWVaEChain
  • AWVaRChain
What-If configuration
A number of instance variables have been made private on What-If configuration classes. In all cases there is a corresponding getter and setter that was already available and is now required to be used in all cases. These fields are:
Class nameField name
FileUploadPayloadfilePathSeparator
FileUploadPayloadtopics
FileUploadTopicname
FileUploadTopicfiles
Security configuration
The following files have been moved from the mr-common-config project to the mr-application project:
File nameOld packageNew package
IUserLogoutSuccessHandlercom.activeviam.mr.common.config.security.filtercom.activeviam.mr.application.config.security
CookieUtilcom.activeviam.mr.common.config.securitycom.activeviam.mr.application.config.security
CorsConfigcom.activeviam.mr.common.config.securitycom.activeviam.mr.application.config.security
JwtAuthenticationConfigurercom.activeviam.mr.common.config.securitycom.activeviam.mr.application.config.security
SameSiteConfigcom.activeviam.mr.common.config.securitycom.activeviam.mr.application.config.security
SecurityJwtPropertiescom.activeviam.mr.common.config.securitycom.activeviam.mr.application.config.security
UserDetailsServiceConfigcom.activeviam.mr.common.config.securitycom.activeviam.mr.application.config.security
In the mr-common-config project, the class UnsecuredDatabaseServiceConfig has been renamed to WhatIfAwareUnsecuredDatabaseServiceConfig. The following files, which were not used in the code, have been removed from the mr-common-config project:
  • CommonWebSecurityFiltersConfig
  • ApplicationJwtConfig
  • GlobalSecurityConfig
  • InMemoryAuthenticationSecurityConfig
  • InMemoryUserDetailsManagerBuilder
  • PasswordEncoderConfig
The class MRSecurityFilterChainsConfig has been changed to fix known issue MR-1626 (trying to log in with a user that does not have admin rights throws a 403 HTTP error). The class DispatcherServletConfig has been added in com.activeviam.mr.application.config.security to contain cookie configuration taken from the MarketRiskApplication class.
Preview Market Data property removal
The mr.enable.preview.market-data property has been removed, together with the following Spring @Conditional classes based on it:
ClassConditionReplacement
@ConfigurationEnabledPreviewMarketDatamr.enable.preview.market-data is truemarket-data-api-spring-boot-starter is a dependency of the current project.
@ConfigurationDisabledPreviewMarketDatamr.enable.preview.market-data is false
@BeanEnabledPreviewMarketDatamr.enable.preview.market-data is truemarket-data-api-spring-boot-starter is a dependency of the current project.
@BeanDisabledPreviewMarketDatamr.enable.preview.market-data is false
@ConditionalOnPreviewMarketDataEnabledmr.enable.preview.market-data is truemarket-data-api-spring-boot-starter is a dependency of the current project.
@ConditionalOnPreviewMarketDataDisabledmr.enable.preview.market-data is false
DirectQuery configuration
The following configuration classes have been added to enable DirectQuery with Databricks:
ClassDetails
DatabricksSessionConfigConfigures the connection to Databricks
MRDirectQueryConfigImports required Databricks configuration classes

Migration of market data measures to new Market Data API for scalar sensitivities

The market data measures for sensitivities chains have been migrated to the new Market Data API. Several modifications were required, falling into the following categories:
  • Introduced distinct measures for the previous date market data, rather than location-shifting the current date market data measures.
  • Changed the native intermediate interpolated market data beans to generate market data retrieval measures based on the MarketDataProperties configuration properties, with a switching post-processor using the generated measures as underliers.
  • Added a specific market data type (SensitivityMarketDataType.EQ_SPOT) for market data that requires multiplication by a split ratio for the next date market data measure.
The following classes have been modified in the mr-sensi-config module:
Modified classChanges
DeltaCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
DeltaNextDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
DeltaPreviousDateMarketDataChainNew bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
GammaCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
GammaNextDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
GammaPreviousDateMarketDataChainNew bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
VegaCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
VegaNextDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
VegaPreviousDateMarketDataChainNew bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
VolgaCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
VolgaCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
VolgaPreviousDateMarketDataChainNew bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
CrossGammaCurrentDateMarketDataChainNew bean with Qualifier SPLIT_RATIO_2_CURRENT
Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + CURRENT_MD_2_NATIVE_INTERMEDIATE_INT
CrossGammaNextDateMarketDataChainNew bean with Qualifier SPLIT_RATIO_2_NEXT
Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE_INT
CrossGammaPreviousDateMarketDataChainNew bean with Qualifier SPLIT_RATIO_2_PREVIOUS
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_2
VannaCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + CURRENT_MD_2_NATIVE_INTERMEDIATE_INT
VannaNextDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE_INT
VannaPreviousDateMarketDataChainNew bean with Qualifier SPLIT_RATIO_2_PREVIOUS
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_2_NATIVE
CorrelationCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT
CorrelationNextDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
CorrelationPreviousDateMarketDataChainNew bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
DividendCurrentDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE
DividendNextDateMarketDataChainConfiguration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT
DividendPreviousDateMarketDataChainNew bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_INTERMEDIATE_FILTERED_INT
New bean with Qualifier SENSI + PREVIOUS_MD_NATIVE_EXPAND_INTERMEDIATE_INT
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD_NATIVE
Configuration change for bean with Qualifier SENSI + PREVIOUS_MD
For further details on retrieval in the market data API, see Market data retrieval in the market data API data model

Input file formats

New files

FilePurpose
Correlation_Market_Data.csvStores the correlation market data.
FX_Rate_Market_Data.csvStores the FX rate market data.
Dividend.csvStores the dividend market data.
SplitRatio.csvStores the stock split ratio market data.

Modified

The file Instrument_Market_Data.csv has been renamed to Spot_Market_Data.csv
ModificationFileFieldOptionalDescription
Changed defaultMarketData.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed defaultVannaSensitivities.csv, CrossGammaSensitivities.csv, CorrelationSensitivities.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed defaultDeltaSensitivities.csv, GammaSensitivities.csv, VegaSensitivities.csv, VolgaSensitivities.csv, CashSensitivities.csv, ThetaSensitivities.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed headerVannaSensitivities.csv, CrossGammaSensitivities.csv, CorrelationSensitivities.csvNoneN/AThe header ValueCCy has been replaced by Ccy.
Changed headerDeltaSensitivities.csv, GammaSensitivities.csv, VegaSensitivities.csv, VolgaSensitivities.csv, CashSensitivities.csv, ThetaSensitivities.csvNoneN/AThe header ValueCCy has been replaced by Ccy.
Changed defaultSpot_Market_Data.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed fieldsSpot_Market_Data.csvInstrumentId, MarketDataSet-Changed order to MarketDataSet, InstrumentId.
Changed defaultCurve_Market_Data.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed fieldsCurve_Market_Data.csvCurveId, MarketDataSet-Changed order to MarketDataSet, CurveId.
Changed defaultSurface_Market_Data.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed fieldsSurface_Market_Data.csvSurfaceId, MarketDataSet-Changed order to MarketDataSet, SurfaceId.
Changed defaultCube_Market_Data.csvMoneynessLabelsYList of moneyness labels, if applicable. The default value is now N/A.
Changed fieldsCube_Market_Data.csvCubeId, MarketDataSet-Changed order to MarketDataSet, CubeId.

Logback Fix

We provide a logback configuration (mr-application/src/main/resources/logback-spring-file.xml) that outputs to a local log file. This configuration references classes that are no longer present, causing the application startup to fail. You can fix this configuration by making the following changes:
  1. In
<conversionRule conversionWord="thread" converterClass="com.activeviam.apm.logging.impl.APMThreadConverter"/>
<conversionRule conversionWord="user" converterClass="com.activeviam.apm.logging.impl.APMUserConverter"/>
<conversionRule conversionWord="instance" converterClass="com.activeviam.apm.logging.impl.APMInstanceConverter"/>
with:
<conversionRule conversionWord="thread" converterClass="com.activeviam.apm.logging.impl.LogThreadConverter" />
<conversionRule conversionWord="user" converterClass="com.activeviam.apm.logging.impl.LogUserConverter" />
<conversionRule conversionWord="instance" converterClass="com.activeviam.apm.logging.impl.LogInstanceConverter" />
  1. Delete <file>${custom.json.log.dir}/activepivot.log</file> on line 51.

Swagger UI Fix

Swagger UI is used to document REST endpoints in Atoti Market Risk. It should be available at .../swagger-ui/index.html but this endpoint results in a not found exception. This is a known issue in Atoti Market Risk 5.4 and is due to an outdated dependency. You can resolve this issue with the following steps:
  1. In the project root pom.xml file replace:
<springdoc.version>1.6.0</springdoc.version>
with:
<springdoc.version>2.2.0</springdoc.version>
and replace:
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>${springdoc.version}</version>
</dependency>
with:
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>${springdoc.version}</version>
</dependency>
  1. In the pom.xml file of the mr-application module replace:
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>
with:
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
</dependency>