Releases: finos/common-domain-model
5.11.1
Product Model - FloatingRateIndexEnum value update
Background
In the previous release 5.11.0 the list of enum values of FloatingRateIndexEnum
was updated to match the FpML coding scheme 2.19 where the enum value GBP_SONIA_Refinitiv_Term
was removed. However, the removed value is still needed for backwards compatibility and existing dependencies. While an update to the coding scheme import is developed to add but not remove values as they change, the removed value needs to be manually reinstated and the coding scheme reference omitted.
What is being released?
Two changes are made to address this issue:
-
The enum value
GBP_SONIA_Refinitiv_Term
of the enumFloatingRateIndexEnum
is being reinstated. -
The reference to the FpML coding scheme in
FloatingRateIndexEnum
is being temporarily omitted. It will be reinstated once changes are implemented to make the coding scheme import as additive-only in the main branch of the CDM.
Review Directions
In Rosetta, select the Textual Browser and inspect the changes identified above.
Changes can be reviewed in PR #2922
Infrastructure - RoundToPrecision Function
Background
This release contains a bug fix for RoundToPrecision
function, as described in issue #2915.
What is being released?
This release updates the existing function cdm.base.math.RoundToPrecision
to round to the correct number of decimal places.
func RoundToPrecision: <"Round a rate to the supplied precision, using the supplied rounding direction">
inputs:
value number (1..1) <"The original (unrounded) number.">
precision int (1..1) <"The number of decimal digits of precision.">
roundingMode RoundingDirectionEnum (1..1) <"The method of rounding (up/down/nearest).">
output:
roundedValue number (1..1) <"The value to the desired precision">
The following examples show the function behaviour:
RoundToPrecision(1023.123456789, 5, RoundingDirectionEnum -> NEAREST)
= 1023.12346RoundToPrecision(1023.123456789, 5, RoundingDirectionEnum -> UP)
= 1023.12346RoundToPrecision(1023.123456789, 5, RoundingDirectionEnum -> DOWN)
= 1023.12345RoundToPrecision(1023.123456789, 0, RoundingDirectionEnum -> NEAREST)
= 1023RoundToPrecision(1023.1, 7, RoundingDirectionEnum -> NEAREST)
= 1023.1000000
Review Directions
In Rosetta, select the Textual Browser and inspect the changes identified above.
In GitHub, review Java unit tests cdm.base.math.functions.RoundToPrecisionImplTest
and cdm.product.asset.floatingrate.functions.ApplyFloatingRateProcessingTest
.
Changes can be reviewed in PR #2916
6.0.0-dev.41
Product Model - Modification of AmericanExercise Condition in ExerciseTerms
Background
The conditions under ExerciseTerms
in the refactored OptionPayout
are not sufficiently restrictive for American options. More specifically, the AmericanExercise
condition should not only control that the expirationDate
is present (which it already does through the CommencementAndExpirationDate
condition), but that it is also present only once (not currently implemented in the model). This release aims at modifying the AmericanExercise
condition to correct this.
What is being released?
- The
AmericanExercise
condition under theExerciseTerms
type has been modified to constrain theexpirationDate
field to only one occurrence.
Backward Incompatible Changes
It should be noted that this proposal contains a backwards incompatible change, given that a condition has been made stricter, but should not impact any of the actual implementations.
Review Directions
In Rosetta, select the Textual Browser and inspect the change identified above.
Changes can be reviewed in PR #2914
6.0.0-dev.40
CDM Model - RoundToPrecision Function
Background
This release contains a bug fix for RoundToPrecision
function, as described in issue #2915.
What is being released?
This release updates the existing function cdm.base.math.RoundToPrecision
to round to the correct number of decimal places.
func RoundToPrecision: <"Round a rate to the supplied precision, using the supplied rounding direction">
inputs:
value number (1..1) <"The original (unrounded) number.">
precision int (1..1) <"The number of decimal digits of precision.">
roundingMode RoundingDirectionEnum (1..1) <"The method of rounding (up/down/nearest).">
output:
roundedValue number (1..1) <"The value to the desired precision">
The following examples show the function behaviour:
RoundToPrecision(1023.123456789, 5, RoundingDirectionEnum -> NEAREST)
= 1023.12346RoundToPrecision(1023.123456789, 5, RoundingDirectionEnum -> UP)
= 1023.12346RoundToPrecision(1023.123456789, 5, RoundingDirectionEnum -> DOWN)
= 1023.12345RoundToPrecision(1023.123456789, 0, RoundingDirectionEnum -> NEAREST)
= 1023RoundToPrecision(1023.1, 7, RoundingDirectionEnum -> NEAREST)
= 1023.1000000
Review Directions
In Rosetta, select the Textual Browser and inspect the changes identified above.
In GitHub, review Java unit tests cdm.base.math.functions.RoundToPrecisionImplTest
and cdm.product.asset.floatingrate.functions.ApplyFloatingRateProcessingTest
.
Changes can be reviewed in PR #2917
5.11.0
Infrastructure - Dependency Update
What is being released?
This release updates the rosetta-bundle
dependency.
Version updates include:
rosetta-bundle
10.17.1:- FpML coding scheme updated to version 2.19.
FloatingRateIndexEnum
updated to match coding scheme. - Bug fix for
zonedDateTime
serialisation issue #2895.
- FpML coding scheme updated to version 2.19.
Review directions
The changes can be reviewed in PR: #2892
4.0.0-dev.39.1
Floating Rate Index Reference Data model
Background
Special release back porting two 2021 ISDA Interest Rate Derivatives Definitions.
What is being released?
Updated FloatingRateIndexEnum
type with:
MXN_TIIE_ON_OIS_Compound
ZAR_ZARONIA_OIS_Compound
Review Directions
In the CDM Portal, select the Textual Browser and inspect the changes identified above.
The changes can be reviewed in PR: #2896
6.0.0-dev.38
Infrastructure - Dependency Update
What is being released?
This release updates the rosetta-bundle
dependency.
Version updates include:
rosetta-bundle
10.17.1:- FpML coding scheme updated to version 2.19.
FloatingRateIndexEnum
updated to match coding scheme. - Bug fix for
zonedDateTime
serialisation issue #2895.
- FpML coding scheme updated to version 2.19.
Review directions
The changes can be reviewed in PR: #2893
6.0.0-dev.37
Python Generator v2
What is being released?
This release uses the new version of the Python generator (v2) which includes the following changes:
- Migration to Pydantic 2.x
- More comprehensive support for Rosetta's operators
- Resolves the defect exposed by PR 2766
- Includes an update to the Python Rosetta runtime library used to encapsulate the Pydantic support (now version 2.0.0)
Review directions
The changes can be reviewed in PR: #2869
Infrastructure - Dependency Update
What is being released?
This release updates the rosetta-bundle
and rosetta-dsl
dependencies.
Version updates include:
rosetta-bundle
10.16.0: FpML Coding schema updated.rosetta-dsl
9.8.0: this release features three new operations -to-date
,to-date-time
andto-zoned-date-time
- to convert a string into adate
,dateTime
orzonedDateTime
respectively. It also adds support to convert these three types into a string using theto-string
operation. For further details see DSL release notes: https://github.com/finos/rune-dsl/releases/tag/9.8.0.
There are no changes to the model or test expectations.
Review directions
The changes can be reviewed in PR: #2877
5.10.0
Product Model - Qualification of Foreign Exchange NDS
Background
Currently, Foreign Exchange Non-Deliverable Swaps are not supported in the Common Domain Model. This release adds qualification support for this kind of product.
What is being released?
This release fixes the following functions to ensure an else
clause is specified in all nested if
statements.
- Added the function
Qualify_ForeignExchange_NDS
that qualifies as true if a product has two forward payouts with an FX underlier and thecashSettlementTerms
populated.
Review directions
In Rosetta, select the Textual Browser and inspect the changes identified above.
The changes can be reviewed in PR: #2867
Product Model - Qualification of Total Return Swaps (TRS) with a Debt Underlier
Background
Following ESMA Guidelines, Total Return Swaps with a debt instrument as their underlier (bond, loan, etc) must report field 2.11 - Asset Class
as 'CRDT', while TRS on an equity index or a basket of equities should report Asset Class
as 'EQUI'. Currently in the CDM, a Total Return Swap with a debt underlier is not classified correctly, and thus is being reported incorrectly as well. This release aims at fixing the Qualify_AssetClass_Credit
function such that Total Return Swaps on a bond or a loan report AssetClass as 'CRDT'.
What is being released?
- The function
Qualify_AssetClass_Credit
is increasing its coverage to include Total Return Swaps with an underlier of aloan
or asecurityType
ofdebt
.
Functions
- Updated
Qualify_AssetClass_Credit
function to support Total Return Swap products, defined as having aninterestRatePayout
and aperformancePayout
. The function checks theperformancePayout
thatunderlier -> loan
is present or thatunderlier -> security -> securityType = Debt
.
Review directions
In Rosetta, select the Textual Browser and inspect the changes identified above.
The changes can be reviewed in PR: #2856
Python Generator v2
What is being released?
This release uses the new version of the Python generator (v2) which includes the following changes:
- Migration to Pydantic 2.x
- More comprehensive support for Rosetta's operators
- Resolves the defect exposed by PR 2766
- Includes an update to the Python Rosetta runtime library used to encapsulate the Pydantic support (now version 2.0.0)
Review directions
The changes can be reviewed in PR: #2856
Infrastructure - Dependency Update
What is being released?
This release updates the rosetta-bundle
and rosetta-dsl
dependencies.
Version updates include:
rosetta-bundle
10.15.7: Translate bug fix to handle enum name clashes.rosetta-bundle
10.15.8: Upgrade of Python Code Generator.rosetta-bundle
10.16.0: FpML Coding schema updated.rosetta-dsl
9.8.0: this release features three new operations -to-date
,to-date-time
andto-zoned-date-time
- to convert a string into adate
,dateTime
orzonedDateTime
respectively. It also adds support to convert these three types into a string using theto-string
operation. For further details see DSL release notes: https://github.com/finos/rune-dsl/releases/tag/9.8.0.
There are no changes to the model or test expectations.
Review directions
The changes can be reviewed in PR: #2876
6.0.0-dev.36
Product Model - Qualification of Total Return Swaps (TRS) with a Debt Underlier
Background
Following ESMA Guidelines, Total Return Swaps with a debt instrument as their underlier (bond, loan, etc) must report field 2.11 - Asset Class
as 'CRDT', while TRS on an equity index or a basket of equities should report Asset Class
as 'EQUI'. Currently in the CDM, a Total Return Swap with a debt underlier is not classified correctly, and thus is being reported incorrectly as well. This release aims at fixing the Qualify_AssetClass_Credit
function such that Total Return Swaps on a bond or a loan report AssetClass as 'CRDT'.
What is being released?
- The function
Qualify_AssetClass_Credit
is increasing its coverage to include Total Return Swaps with an underlier of aloan
or asecurityType
ofdebt
.
Functions
- Updated
Qualify_AssetClass_Credit
function to support Total Return Swap products, defined as having aninterestRatePayout
and aperformancePayout
. The function checks theperformancePayout
thatunderlier -> loan
is present or thatunderlier -> security -> securityType = Debt
.
Review directions
In Rosetta, select the Textual View and inspect the change identified above
The changes can be reviewed in PR: #2855
Product Model - Qualification of Foreign Exchange NDS
Background
Currently, Foreign Exchange Non-Deliverable Swaps are not supported in the Common Domain Model. This release adds qualification support for this kind of product.
What is being released?
- Added the function
Qualify_ForeignExchange_NDS
that qualifies as true if a product has two forward payouts with an FX underlier and thecashSettlementTerms
populated.
Review directions
In the Rosetta platform, select the Textual View and inspect each of the changes identified above.
PR: #2866
Addition of new enumeration to AvailableInventory
Background
The AvailableInventory
type supports two major uses cases:
- Where a lender wants to distribute the details of the securities that they have available to lend, and
- Where a borrower wants to locate specific securities that they want to borrow.
For the second use case, the SecurityLocate
type was created, which extends AvailableInventory
but has no additional attributes within it.
When using these two types, there is currently no way to differentiate between when the user is intending to implement use case 1 (i.e. use the AvailableInventory
type) or use case 2 (i.e. use the SecurityLocate
type).
As an example, the following valid JSON could represent a lender saying they have 10000 shares available of security GB00000000012, or a borrower requesting 10000 shares of the security.
{
"availableInventoryRecord": [
{
"identifier": {
"identifier": "00001"
},
"security": {
"securityType": "Equity",
"productIdentifier": {
"identifier": "GB00000000012",
"source": "ISIN"
}
},
"availableQuantity": {
"value": 10000
}
}
]
}
What is being released?
A new AvailableInventoryTypeEnum
enumeration has been added with two options:
- AvailableToLend - for where a party wants to expose the securities that they have available (i.e. use case 1)
- RequestToBorrow - for where a party wants to request specific securities from another party (i.e. use case 2)
The new enumeration has been added to the AvailableInventory
type and named availableInventoryType
. It has been set with (1..1) cardinality, making it mandatory.
The availableQuantity
attribute within AvailableInventoryRecord
has also been renamed to just quantity
to make it more generic and thus applicable to more use cases.
Review directions
The changes can be reviewed in PR: #2810
Compatibility
This change introduces a new mandatory enumeration to an existing type. By definition this means that this is a breaking change, as any pre-existing implementation of the AvailableInventory
or SecurityLocate
type will no longer work.
6.0.0-dev.35
Infrastructure - Dependency Update
What is being released?
This release updates the rosetta-bundle
dependency.
Version updates include:
rosetta-bundle
10.15.7: Translate bug fix to handle enum name clashes.
There are no changes to the model or test expectations.
Review directions
The changes can be reviewed in PR: #2870