-
Notifications
You must be signed in to change notification settings - Fork 71
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
ART Phase 3 - release #3070
Conversation
Initial commit (includes P2 changes)
and bring forward P2 changes
FloatingRateOption collapsed into new Index structure
FX updates for P3
PriceQuantity refactoring
✅ Deploy Preview for finos-cdm ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
There was a problem hiding this 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] |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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
asInterestRateIndex
- Build
FloatingRateIndex
as achoice
between (new)InterestRateIndex
andInflationIndex
(common attribute accessible via deep path:indexTenor
- see related comment) - Remove
InflationIndex
fromIndex
, useFloatingRateIndex
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 |
There was a problem hiding this comment.
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."> |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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."> |
There was a problem hiding this comment.
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."> |
There was a problem hiding this comment.
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."> |
There was a problem hiding this comment.
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."> |
There was a problem hiding this comment.
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
.
Release PR for #3055