This page explains the changes required to migrate to the stated version of Atoti Market Risk.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.
Migrate to 5.4.2
Upgrading from version 5.4.1 - see Atoti Market Risk 5.4.2 Release Notes.- Atoti Market Risk uses Atoti Server 6.0.18-sb3 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
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 theFxRateMarketData 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
| Property | Default value | Description |
|---|---|---|
| directquery.schema.validation.table-validation-query-timeout | 1 minute | This 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.- Atoti Market Risk uses Atoti Server 6.0.17-sb3 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
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.xmlconfiguration 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>_adjustedmeasures. 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 storesBookHierarchy, 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 underlyingxxx xxx MD Native metric.
Correlation Current MDCorrelation Previous MDCrossGamma Current MDCrossGamma Current MD 2CrossGamma Previous MDCrossGamma Previous MD 2Delta Current MDDelta Previous MDDividend CurrentDividend PreviousGamma Current MDGamma Previous MDVanna Current MDVanna Current MD 2Vanna Previous MDVanna Previous MD 2Vega Current MDVega Previous MDVolga Current MDVolga Previous MD
[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 measurexxx 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 NativeCorrelation Previous MD NativeCrossGamma Current MD 2 NativeCrossGamma Current MD NativeCrossGamma Previous MD 2 NativeCrossGamma Previous MD NativeDelta Current MD NativeDelta Previous MD NativeDividend Previous NativeDividend Current NativeGamma Current MD NativeGamma Previous MD NativeVanna Current MD 2 NativeVanna Current MD NativeVanna Previous MD 2 NativeVanna Previous MD NativeVega Current MD NativeVega Previous MD NativeVolga Current MD NativeVolga 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 ExplainAtoti MR & PL/Story-Telling Target Views/Vega P&L ExplainMR/03 - PnL Explain/02 - Example for one tradeMR/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:| Property | Default value | Description |
|---|---|---|
| mr.parent-child.book-depth | 15 | Maximum level of BookHierarchy. |
| mr.parent-child.counterparty-depth | 10 | Maximum level of LegalEntityHierarchy. |
| mr.parent-child.counterparty-depth | 5 | Maximum level of CounterpartyHierarchy. |
Properties changed
mr-common-config module:| Property | Previous default | New default | Description |
|---|---|---|---|
| mr.sign-off.common.hierarchy.level2.approved | APPROVED | EXPORT_SUCCEEDED | This is for compatibility with Sign-off 5.3, ensuring the Official sign-off feed status is updated after export. |
| Property | Previous default | New default | Description |
|---|---|---|---|
| mr.sign-off.sensi.sensi-cube-adjustments.hierarchies-to-exclude | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,DynamicMaturities@DynamicBucketing,DynamicMoneyness@DynamicBucketing,DynamicTenors@DynamicBucketing,DayToDay@Dates | Date@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@Dates | Added MarketShiftDate and DisplayCurrencies hierarchies to the list of excluded hierarchies as these are slicing hierarchies. |
| Property | Previous default | New default | Description |
|---|---|---|---|
| mr.sign-off.var.var-cube-adjustments.hierarchies-to-exclude | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,CalculationIds@Risk,DayToDay@Dates | Date@Dates,MarketDataSets@MarketData,Quantiles@Quantiles,RoundingMethods@Rounding,Scenario Sets@Risk,Sign-off Status@Sign-off,CalculationIds@Risk,MarketShiftDate@Dates,displayCurrency@Currencies,DayToDay@Dates | Added 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 toSignOffRestService: @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.- Atoti Market Risk uses Atoti Server 6.0.14-sb3 and Atoti UI 5.1.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.
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-apilibrary module and themarket-data-api-spring-boot-startermodule 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
MarketDataDateShiftenum valueTODAYtoCURRENT_DAYto clarify its meaning. - Interpolators: New interpolators are now accessible from the
IInterpolationService:InterpolationMode.LINEARon two axes lets you perform linear interpolation on a 2D surface of values.InterpolationMode.VOL_TO_VARIANCEon 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.LINEARon three axes lets you perform linear interpolation on a 3D cube of values.
- Changed new Market Data API data model: The
MarketDataSetandIDfields 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.
- 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-configproject to themr-applicationproject. - 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
MarketRiskAcceleratortoMR. - 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_TYPEhas been removed in theDynamicTenorsAndMaturitiesPostProcessorclass. - 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-queryis required when usingmr-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 Historybookmark underAtoti MR & PL/Story-Telling Target Viewshas been removed. - Content server reset on start: The default behavior driven by the in-memory database properties in
application.yamlhas 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 aliasAllMarketData, used for loading the input files.
Breaking changes
- A number of classes named
...Helper(s)have been renamed to...Utilsfor 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.AdjustmentsConstantshas been removed and the two constants from this class added tocom.activeviam.mr.common.constants.AdjustmentsConstants.ASecurityConfig.PIVOT_USER_ROLEShas changed fromString[]toList<String>.- The
METRICvariable 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-configproject to themr-applicationproject. - In the
mr-common-configproject, the classUnsecuredDatabaseServiceConfighas been renamed toWhatIfAwareUnsecuredDatabaseServiceConfig. - 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
NoOpPostProcessoris defined in the Common Library, the package is nowcom.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_TYPEhas been removed in theDynamicTenorsAndMaturitiesPostProcessorclass. - 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::addTopicnow has a 4th parameter that holds the list of all topic aliases to which the topic belongs. The functionDataLoadControllerConfig::registerTopicAliasescomputes 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
ReferenceLevelLocationShiftpost-processor with the Common LibraryReferenceLevelLocationShiftLight. Any usage of the post-processor will have to be replaced, as will any usage of themr.metrics.rlshift.post-processorproperty referring to the old plugin key. The default value of the property has been changed toReferenceLevelLocationShiftLight. - 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
ApplicationJwtConfighas been added to handle the configuration used for JWT authentication. - The constant
VALUE_CCYinStoreFieldConstantshas been removed and replaced by the constantCCY. - The
MRCombinedCubemetrics are now configured by beans with the qualifierSP_QUALIFIER__COMMON_MEASURE_BUILDERSandSP_QUALIFIER__COMMON_MEASURES. - The interface
IAsyncTaskhas been replaced byIRefreshTaskthat 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
SplitRatioMarketDatastore 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-libandmr-market-data-confighave been removed. They were used for the configuration of the Market Data Cube. - In the ThetaCopper class, some methods have been renamed. The
marketDataPostProcessorandscalarMarketDataPostProcessormethods have been renamed. - The
com.activeviam.accelerator.common.dates.IMaturityConverterinterface has been removed from the modulemr-common-liband has been replaced by the interfacecom.activeviam.accelerator.common.dates.IMaturityConverter. - Some methods have been added to the
ISensitivityMarketDataMeasuresinterface and the following methods have been changed:scalarNativeIntermediateInterpolatedDividendscalarNativeIntermediateInterpolatedThetavectorNativeIntermediateInterpolatedTheta
- For the market data measure chains configuration: the class names
*CurrentDateMarketDataChain,*NextDateMarketDataChainand*PreviousDateMarketDataChainhave 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&TradeDatefields of theTradeAttributesstore, and theMaturityDatesandTenorDatesfields of theTradeSensitivitiesstore are now typed as Date instead of String. Code that requires these to be Strings will need updating. - The constructor of the
MraSimpleTenorConverterclass in themr-common-libmodule 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 renamedmr.sensi.rules.<sensitivity-type>.pnl-explain. This is to accommodate the newmr.sensi.rules.<sensitivity-type>.taylor-varproperties that allow Taylor VaR and PnL Explain calculations to be configured independently. - The
ISensiRuleConfigurationServiceinterface has been replaced by theIPnlExplainRuleConfigurationServiceandITaylorVarRuleConfigurationServiceinterfaces. - The
ISensiRuleConfigurationServicAwareinterface has been removed. - The method
getVaRExplainFormulainIPnLExplainFormulaProviderhas been renamed togetPnlExplainFormulaForShiftas this method is now only used for PnL Explain calculations. - The constructor for the
PnLExplainFormulaProviderclass now requires anIPnlExplainRuleConfigurationServiceinstead of anISensiRuleConfigurationService. - The
InputSelectorclass has been renamed toPnlExplainInputSelector. There is a correspondingTaylorVarInputSelectorand they both implementIInputSelector. To autowire these beans you must now use the new qualifiers:SP_QUALIFIER__PNL_EXPLAIN_INPUT_SELECTORandSP_QUALIFIER__TAYLOR_VAR_INPUT_SELECTOR. - The
IInputSelectorAwareinterface has been replaced by theIPnlExplainInputSelectorAwareandITaylorVarInputSelectorAwareinterfaces. - The
APnlVectorFromRiskSensiPostProcessorpost-processor now implements theITaylorVarFormulaProviderAwareinterface instead of theIPnLExplainFormulaProviderAwareinterface. - 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 profilesdist-data-node, dist-query-node, and forceNetty (and the property directquery.enabled), we have the following properties:
| Property | Description | Values |
|---|---|---|
starter.deployment.type | Specifies the nature of the database used for the cube. | It can take three values:
|
starter.deployment.transport | Specifies the messenger to use for communication between cubes. | It can take two values:
|
mr.enable.cubes.common=false | An existing flag, which turns the MRCombinedCube polymorphic cube on or off. |
| Spring profile | Configuration file | starter.deployment.type | starter.deployment.transport | combined.disable |
|---|---|---|---|---|
| default | in-memory | local | unset (false) | |
dist-data-node | application-dist-data-node.yaml | in-memory | netty | true |
dist-query-node | application-dist-query-node.yaml | query-node | netty | unset (false) |
forceNetty | application-forceNetty.yaml | unset (in-memory) | netty | unset (false) |
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 source | Previously used condition | Common condition (DQ & in-memory) | In-memory only condition | DirectQuery 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 classesSensiPnLAzureCsvSourceConfig, 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:| Constant | Qualifier | Type | Source |
|---|---|---|---|
| SP_QUALIFIER__DQ_SENSI_TOPIC_PUBLISHERS | “dq-sensi-topic-publishers” | Publisher generator Function | Sensi for DirectQuery |
| SP_QUALIFIER__DQ_SENSI_TOPIC_COLUMNS | “dq-sensi-topic-columns” | Columns generator Function | Sensi for DirectQuery |
| SP_QUALIFIER__DQ_SENSI_TOPIC_TO_STORE_AND_FILE_MAP | “dq-sensi-topic-to-store-and-file-map” | Definition of the topics | Sensi for DirectQuery |
Configuration classes
Files Modified
- Application configuration
- Measures configuration
- What-If configuration
- Security configuration
- Market Data configuration
- Interpolation configuration
- Preview Market Data property removal
- DirectQuery configuration
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 name | New class name |
|---|---|
| DatastoreDescriptionHelper | DatastoreDescriptionUtils |
| MeasureChainHelpers | MeasureChainUtils |
| SchemaHelpers | SchemaUtils |
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
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 aMETRIC 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 name | Field name |
|---|---|
| FileUploadPayload | filePathSeparator |
| FileUploadPayload | topics |
| FileUploadTopic | name |
| FileUploadTopic | files |
Security configuration
The following files have been moved from themr-common-config project to the mr-application project:
| File name | Old package | New package |
|---|---|---|
| IUserLogoutSuccessHandler | com.activeviam.mr.common.config.security.filter | com.activeviam.mr.application.config.security |
| CookieUtil | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
| CorsConfig | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
| JwtAuthenticationConfigurer | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
| SameSiteConfig | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
| SecurityJwtProperties | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
| UserDetailsServiceConfig | com.activeviam.mr.common.config.security | com.activeviam.mr.application.config.security |
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
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
Themr.enable.preview.market-data property has been removed, together with the following Spring @Conditional classes based on it:
| Class | Condition | Replacement |
|---|---|---|
@ConfigurationEnabledPreviewMarketData | mr.enable.preview.market-data is true | market-data-api-spring-boot-starter is a dependency of the current project. |
@ConfigurationDisabledPreviewMarketData | mr.enable.preview.market-data is false | |
@BeanEnabledPreviewMarketData | mr.enable.preview.market-data is true | market-data-api-spring-boot-starter is a dependency of the current project. |
@BeanDisabledPreviewMarketData | mr.enable.preview.market-data is false | |
@ConditionalOnPreviewMarketDataEnabled | mr.enable.preview.market-data is true | market-data-api-spring-boot-starter is a dependency of the current project. |
@ConditionalOnPreviewMarketDataDisabled | mr.enable.preview.market-data is false |
DirectQuery configuration
The following configuration classes have been added to enable DirectQuery with Databricks:| Class | Details |
|---|---|
| DatabricksSessionConfig | Configures the connection to Databricks |
| MRDirectQueryConfig | Imports 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.
mr-sensi-config module:
| Modified class | Changes |
|---|---|
| DeltaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
| DeltaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
| DeltaPreviousDateMarketDataChain | 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 | |
| GammaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
| GammaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
| GammaPreviousDateMarketDataChain | 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 | |
| VegaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
| VegaNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
| VegaPreviousDateMarketDataChain | New 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 | |
| VolgaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
| VolgaCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
| VolgaPreviousDateMarketDataChain | New 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 | |
| CrossGammaCurrentDateMarketDataChain | New 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 | |
| CrossGammaNextDateMarketDataChain | New 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 | |
| CrossGammaPreviousDateMarketDataChain | New 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 | |
| VannaCurrentDateMarketDataChain | Configuration 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 | |
| VannaNextDateMarketDataChain | Configuration 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 | |
| VannaPreviousDateMarketDataChain | New 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 | |
| CorrelationCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + CURRENT_MD_NATIVE_INTERMEDIATE_INT |
| CorrelationNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
| CorrelationPreviousDateMarketDataChain | 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 | |
| DividendCurrentDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_2_NATIVE_INTERMEDIATE |
| DividendNextDateMarketDataChain | Configuration change for bean with Qualifier SENSI + NEXT_MD_NATIVE_INTERMEDIATE_INT |
| DividendPreviousDateMarketDataChain | 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 |
Input file formats
New files
| File | Purpose |
|---|---|
| Correlation_Market_Data.csv | Stores the correlation market data. |
| FX_Rate_Market_Data.csv | Stores the FX rate market data. |
| Dividend.csv | Stores the dividend market data. |
| SplitRatio.csv | Stores the stock split ratio market data. |
Modified
The fileInstrument_Market_Data.csv has been renamed to Spot_Market_Data.csv
| Modification | File | Field | Optional | Description |
|---|---|---|---|---|
| Changed default | MarketData.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed default | VannaSensitivities.csv, CrossGammaSensitivities.csv, CorrelationSensitivities.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed default | DeltaSensitivities.csv, GammaSensitivities.csv, VegaSensitivities.csv, VolgaSensitivities.csv, CashSensitivities.csv, ThetaSensitivities.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed header | VannaSensitivities.csv, CrossGammaSensitivities.csv, CorrelationSensitivities.csv | None | N/A | The header ValueCCy has been replaced by Ccy. |
| Changed header | DeltaSensitivities.csv, GammaSensitivities.csv, VegaSensitivities.csv, VolgaSensitivities.csv, CashSensitivities.csv, ThetaSensitivities.csv | None | N/A | The header ValueCCy has been replaced by Ccy. |
| Changed default | Spot_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed fields | Spot_Market_Data.csv | InstrumentId, MarketDataSet | - | Changed order to MarketDataSet, InstrumentId. |
| Changed default | Curve_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed fields | Curve_Market_Data.csv | CurveId, MarketDataSet | - | Changed order to MarketDataSet, CurveId. |
| Changed default | Surface_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed fields | Surface_Market_Data.csv | SurfaceId, MarketDataSet | - | Changed order to MarketDataSet, SurfaceId. |
| Changed default | Cube_Market_Data.csv | MoneynessLabels | Y | List of moneyness labels, if applicable. The default value is now N/A. |
| Changed fields | Cube_Market_Data.csv | CubeId, 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:
- In
- 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:
- In the project root pom.xml file replace:
- In the pom.xml file of the mr-application module replace: