Repository navigation
6.0.0-dev.72
Product Model - Asset Refactoring: Product, SettlementPayout, Underliers
WORK IN PROGRESS
Background
The Asset Refactoring initiative (see #2805) is seeking to improve the Product Model to address some long-standing issues and to ensure the continued extensibility to additional financial products and markets. A proposal is being developed - through a cross-industry Task Force - to implement this remodelling in the CDM.
This release includes the third tranche of changes (of three planned tranches in CDM 6) to implement the refactored model. It introduces some significant refactoring of the Product structure in to the model.
What is being released?
Product Refactoring:
- This release completes the refactoring of the major financial product data types, that is
Asset,Observable, andIndex, and combines their use in a new structure for financial products. - The new data type
NonTransferableProducthas replaced the formerContractualProductand is the main "product" data type used on a trade; it appears as the attributeproducton the data typeTradableProduct. - On a
Trade, all financial products should be composed into theEconomicTermsof aNonTransferableProduct. - Separate PR but included here for completeness The data type
payoutis now a choice construct with the consequence that references to specific instances of a specific payout should refer to the capitalised data type name rather than an attribute, for exampleeconomicTerms -> payout -> performancePayoutbecomeseconomicTerms -> payout -> PerformancePayout. This has large impact in terms of the number of changes in this PR.
Underliers:
- An
Underlierrepresents the financial product that will be physically or cash settled. - Whereas all underliers were previously defined to use data type
product, this has now been improved so that they can also be anObservablewhen the case warrants it. Underlieris modelled as a choice data type, that is, it can either be anObservableor aProduct.- A
Productis also a choice type, either aTransferableProduct(a type of financial product which can be held or transferred, represented as an Asset with the addition of specific EconomicTerms), or a NonTransferableProduct (a product that can be traded, as part of a TradableProduct, but cannot be transferred to others).
Product and Trade Hierarchy:
- The
Tradedata type now extendsTradableProduct; this means that the latter is "hidden" in many uses in the CDM, eg in the graphical view, and one level within the hierarchy is removed when generating JSON. This change has resulted to updates to 100s of occurences to path accesses within the model (particularly in the Event and Product functions). For example, the previous access pathtradeState -> trade -> tradableProduct -> tradeLothas becometradeState -> trade -> tradeLot. - The financial product hierarchy has also changed so that the previous path
trade -> tradableProduct -> product -> contractualProduct -> economicTerms -> payout -> InterestRatePayouthas becometrade -> product -> economicTerms -> payout -> InterestRatePayout.
Product details:
Security- Removed the attributes
economicTermsandProductTaxonomybecause these are not appropriate for anAssetdata type which is standardised. ifeconomicTermsare required, these can be added by wrappingsecurityinto aTransferableProduct. The taxonomy of assets is explicitly defined in the type.
- Removed the attributes
IndexIndexis now anObservableand the replaces the existing data typerateOption.- The path
observable -> rateOptionhas becomeobservable -> Index -> FloatingRateIndex. - Data type
CreditIndexnow extendsIndexBase.
ProductQualification:
- Additional functions have been created to ease with the qualification process:
UnderlierQualification.ObservableQualification. - Extensive refactoring has been made to the qualification functions to reflect the refactoring, albeit with no changes to the actual logic.
- The qualification for options has been tidied up to be more readable and maintainable in the new model, without change to the functionality.
- The introduction of
SettlementPayouthas been included in the qualification logic. - The qualification of Foreign Exchange transactions has been updated.
- The securities financing qualification functions have been enhanced to differentiate repos and lending; the new functions are:
Qualify_RepurchaseAgreement,Qualify_BuySellBack, andQualify_SecurityLending. - A new enumerator data type has been added to support repo qualification:
RepoTypeEnum. The corresponding attributerepoTypewas added toAssetPayout.
Payouts:
- A new payout type has been created:
SettlementPayout - The existing
ForwardPayouthas been collapsed intoSettlementPayout; the latter should be used whereever the former was previously. - Separate PR but included here for completeness The
Payoutdata type has been refactored to be achoiceand payouts now have multiple cardinality onEconomicTerms. The conditions that validated the business logic on payouts has been moved toEconomicTerms.
Event Model:
Create_Exercisehas additional logic to support an option underlier that coan be anAsset, aTransferableProductor aNonTransferableProduct.Create_Executionnow acts upon a more narrowly definedNonTransferableProductrather than a generic product.- Additional functions have been created to support events using the new product model:
Create_NonTransferableProduct,Create_TransferableProductFromAsset,Create_TransferableProductFromIndex,CheckTransferableProduct,CheckTradeNotTransferableProduct,CreateTradableProduct. - The function
NewEquitySwapProductnow creates aNonTransferableProductnot a generic product. - Event processing has been refactored to handle the new modeling of
TradableProduct. - The unused data types
AffirmationandConfirmationhave been removed.
Observable:
- The attribute
Observablehas been removed fromObservationTermswhere it created duplication.
Collateral:
AssetIdentifierreplacesProductIdentifieronAssetCriteria.- The function
CheckEligibilityForProductnow usesTransferableProductnotProduct.
Namespace re-alignments:
- The following data objects have been moved to a more appropriate namespace:
enum PutCallEnumto cdm.base.staticdata.assetchoice Indexto cdm.observable.assettype IndexBaseto cdm.observable.assettype PriceQuantityto cdm.observable.asset
- The function
InterestRateObservableConditionhas been moved to the cdm.observable.asset function namespace.
Deprecated data types which have been removed:
IndexReferenceInformation: replaced withIndex.
Documentation updates:
- Significant improvements have been made to the pages on Product Model, Event Model and Process Model.
- As well as incorporating the direct changes that result from the refactoring, the pages have been restructured to improve the hierarchy, sections have been resequenced where this improves understanding, and "tips" have been added to highlight important definitions.
- The use case sections on Collateral, Securities Lending and Repos have been updated to reflect the revised modeling.
Review directions
The changes can be reviewed in PR: #3127
Backward-incompatible changes
This release contains changes that are not backward-compatible:
- TBA
A full description of the backward-incompatible changes, and how persisted objects should be remapped, will be included in the release notes for the production release of CDM 6.