Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ART Phase 3 - release #3070

Closed

Conversation

hugohills-regnosys
Copy link
Contributor

@hugohills-regnosys hugohills-regnosys commented Jul 29, 2024

Release PR for #3055

@hugohills-regnosys hugohills-regnosys requested a review from a team as a code owner July 29, 2024 16:44
Copy link

netlify bot commented Jul 29, 2024

Deploy Preview for finos-cdm ready!

Name Link
🔨 Latest commit 9fe0c3c
🔍 Latest deploy log https://app.netlify.com/sites/finos-cdm/deploys/66a917844ce45800071d7506
😎 Deploy Preview https://deploy-preview-3070--finos-cdm.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Contributor

@lolabeis lolabeis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just an initial review - not completed yet.

@@ -19,7 +18,7 @@ type AssetBase: <"The base data type to specify common attributes for all Assets
taxonomy Taxonomy (0..*) <"Defines the taxonomy of an object by combining a taxonomy source (i.e. the rules to classify the object) and a value (i.e. the output of those rules on the object.">
isExchangeListed boolean (0..1) <"Defines whether the Asset is listed on a public exchange.">
exchange LegalEntity (0..1) <"If the Asset is listed, defines the public exchange of the listing.">
//[metadata scheme]
[metadata scheme]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This annotation was just commented out in P2 - Remove altogether. The string attributes in LegalEntity have a scheme

alias nonTransferableProduct:
if underlier -> NonTransferableProduct exists
then underlier -> NonTransferableProduct
else Create_NonTransferableProduct(underlier -> TransferableProduct, optionPayout -> payerReceiver)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about the other cases of productUnderlier?

@@ -528,6 +536,16 @@ func Create_Exercise: <"Defines the process of putting into effect the rights sp
add exercise: <"Adds the replacement trade">
execution

func Create_NonTransferableProduct: <"Creates a NonTransferableProduct (ie EconomicTerms) from an underlier.">
inputs:
underlier TransferableProduct (1..1)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This input should be an AssetUnderlier (so that it can be an asset, with or without economic terms). This matches the type of the underlier attribute in SettlementPayout.

@@ -165,11 +139,11 @@ type IndexTransitionInstruction: <"Defines the information needed to create a In

condition PriceQuantity:
priceQuantity -> price -> priceType contains PriceTypeEnum -> InterestRate
and priceQuantity -> observable -> rateOption exists
and priceQuantity -> observable -> index exists
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to test for the existence of FloatingRateIndex or InflationIndex to be equivalent to current condition.

To consider:

  • Rename FloatingRateIndex as InterestRateIndex
  • Build FloatingRateIndex as a choice between (new) InterestRateIndex and InflationIndex (common attribute accessible via deep path: indexTenor - see related comment)
  • Remove InflationIndex from Index, use FloatingRateIndex only

FloatigRateIndex becomes equivalent to the FloatingRateOption type being deprecated. Condition should be restated as:

priceQuantity -> observable -> index -> FloatingRateIndex exists

then instruction -> observable -> rateOption
else priceQuantity -> observable -> rateOption
then instruction -> observable -> index
else priceQuantity -> observable -> index
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider instead:

observable -> index -> FloatingRateIndex

See comment suggesting changing FloatingRateIndex itself to be a choice

Asset <"Identifies a transferable asset.">
TransferableProduct <"Defines the transferable asset with an identifier and economic terms.">

type Product: <"Defines the product that is the subject of a tradable product definition, an underlying product definition, a physical exercise, a position, or other purposes.">
[metadata key]
choice Underlier: <"The underlier of a payout which can be either an Asset or a Transferable Product, which is an Asset with Economic Terms.">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comment above re Position - this Underlier type may not be needed.

@@ -623,11 +641,11 @@ func Create_AssetTransfer: <"Defines how Transfer that represents an exchange of
transfer Transfer (1..1)

alias assetPayout:
instruction -> tradeState -> trade -> tradableProduct -> product -> contractualProduct -> economicTerms -> collateral -> collateralPortfolio -> collateralPosition -> product -> contractualProduct -> economicTerms -> payout -> assetPayout only-element
instruction -> tradeState -> trade -> product -> economicTerms -> collateral -> collateralPortfolio -> collateralPosition -> product -> AssetUnderlier -> TransferableProduct -> economicTerms -> payout -> assetPayout only-element
Copy link
Contributor

@lolabeis lolabeis Jul 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on Position using NonTransferableProduct (see related comment), this will need to be adjusted. But it eventually uses EconomicTerms, so no problem.

To discuss: shouldn't CollateralPosition use TransferableProduct instead (it's a "settled" position)? --> beyond the scope of ARTF.

@@ -23,22 +23,13 @@ import cdm.product.collateral.*

import cdm.mapping.config.*

type ProductBase: <"Serves as an abstract class to specify a product using a productIdentifier.">
productTaxonomy ProductTaxonomy (0..*) <"Specifies the product taxonomy, which is composed of a taxonomy value and a taxonomy source.">
type ProductBase: <"Serves as an abstract class to specify common attributes for all products.">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider: Remove ProductBase and position attributes directly in NonTransferableProduct (it's the only type that uses ProductBase).

@@ -163,27 +161,30 @@ type PerformancePayout extends PayoutBase: <"Contains the necessary specificatio
observationTerms ObservationTerms (0..1) <"Defines how and when a performance type option or performance type swap is to be observed.">
valuationDates ValuationDates (1..1) <"Defines how and when a performance type option or performance type swap is to be valued, including both interim and final valuation.">
paymentDates PaymentDates (1..1) <"Defines the payment date schedule, as defined by the parameters that are needed to specify it, either in a parametric way or by reference to another schedule of dates (e.g. the valuation dates).">
underlier Product (0..1) <"Identifies the underlying product that is referenced for pricing of the applicable leg in a swap. Referenced in the '2018 ISDA CDM Equity Confirmation for Security Equity Swap' as Security.">
underlier Observable (0..1) <"Identifies the underlying product that is referenced for pricing of the applicable leg in a swap. Referenced in the '2018 ISDA CDM Equity Confirmation for Security Equity Swap' as Security.">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove Observable from ObservationTerms, otherwise it would allow 2 different paths to define Observable. Same comment applies to OptionPayout.

@@ -96,15 +94,15 @@ type OptionPayout extends PayoutBase: <" The option payout specification terms.
observationTerms ObservationTerms (0..1) <"Class containing terms that are associated with observing a price/benchmark/index across either single or multple observations. To be used for option contracts that reference a benchmark price.">
schedule CalculationSchedule (0..1) <"Allows the full representation of a payout by defining a set of schedule periods. It supports standard schedule customization by expressing all the dates, quantities, and pricing data in a non-parametric way.">
delivery AssetDeliveryInformation (0..1) <"Contains the information relative to the delivery of the asset.">
underlier Product (1..1) <"The product underlying the option, which can be of any type including ContractualProduct or Security.">
productUnderlier ProductUnderlier (1..1) <"The financial product underlying the option, which can be of any type including an Asset, Basket, Index or a NonTransferableProduct.">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove Observable from ObservationTerms, otherwise it would allow 2 different paths to define Observable. Same comment applies to PerformancePayout.

@@ -88,6 +79,13 @@ type EconomicTerms: <" This class represents the full set of price-forming featu
if payout -> assetPayout -> dividendTerms exists
then terminationDate exists

choice ProductUnderlier: <"The product underlying a feature, which can be of any type including an Asset, Basket, Index or a NonTransferableProduct.">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be implemented as a nested choice instead?

  • Observable
  • Product

You would need to re-introduce Product, as a choice between TransferableProduct and NonTransferableProduct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants