Skip to content

Releases: finos/common-domain-model

6.0.0-dev.83

18 Nov 17:01
d674253
Compare
Choose a tag to compare

Infrastructure - Dependency Update

What is being released?

This release updates the rune dependencies.

Version updates include:

Review directions

In Rosetta, select the Textual Browser and inspect changes due to the FpML code scheme update:

  • FloatingRateIndexEnum has values added:
    • EUR_EuroSTR_ICE_Swap_Rate
    • IDR_INDONIA
    • IDR_INDONIA_OIS_Compound
    • PHP_ORR
    • USD_SOFR_ICE_Swap_Rate_Spreads

The changes can be reviewed in PR: #3261

5.19.0

18 Nov 16:02
efa9366
Compare
Choose a tag to compare

Infrastructure - Dependency Update

What is being released?

This release updates the rune dependencies to version 11.24.2. This update includes support for visualising the Choice Type elements in the Rosetta User Interface.

Review directions

The changes can be reviewed in PR: #3255

Mapping Update - InterestRateForwardDebtPriceMappingProcessor updated to handle 'Percentage' quoteUnits

Background

The price of bond forwards is captured as a monetary value whereas it should be a decimal/percentage. Even if the value in FpML was 'Percentage', the CDM representation value did not accurately represent this, causing misinterpretations.

What is being released?

  • An update to the InterestRateForwardDebtPriceMappingProcessor code to fix the described issue. This change, would correct the interpretation by dividing the current monetary value by 100, when the quoteUnits corresponds to the XML value 'Percentage'.
  • The bond-fwd-generic-ex01.xml and bond-fwd-generic-ex02.xml samples have been updated as the files were using the value 'Percent' but the correct value according to the enum should be 'Percentage'

Review directions

In Rosetta, select the Textual Browser and inspect each of the changes identified above.

The changes can be reviewed in PR: #3244

CDM Model - CapacityUnit Enum

Background
In has been seen that in the ExternalUnitOfMeasure1Code from the 2Q2024 ISO External CodeSets v1, the unity Joule is supported in the Enum. However, in CDM this is not the case, as it does not appear anywhere in the CapacityUnitEnum. Therefore, the Joule unit of measure will be added to the CapacityUnitEnum for completeness and to align with 2Q2024 ISO External CodeSets v1, for versions 5 and 6 of CDM.

What is being released?

  • Updated CapacityUnitEnum in cdm.base.math

Enumerations

  • Updated CapacityUnitEnum by adding 'J' to support Joule unit

The changes can be reviewed in PR: #3197

Infrastructure - Dependency Update

What is being released?

This release updates the rune dependencies.

Version updates include:

Review directions

In Rosetta, select the Textual Browser and inspect changes due to the FpML code scheme update:

  • FloatingRateIndexEnum has values added:
    • EUR_EuroSTR_ICE_Swap_Rate
    • IDR_INDONIA
    • IDR_INDONIA_OIS_Compound
    • PHP_ORR
    • USD_SOFR_ICE_Swap_Rate_Spreads

The changes can be reviewed in PR: #3260

6.0.0-dev.82

12 Nov 14:52
7ab3505
Compare
Choose a tag to compare

CDM Model - CapacityUnit Enum

Background
In has been seen that in the ExternalUnitOfMeasure1Code from the 2Q2024 ISO External CodeSets v1, the unity Joule is supported in the Enum. However, in CDM this is not the case, as it does not appear anywhere in the CapacityUnitEnum. Therefore, the Joule unit of measure will be added to the CapacityUnitEnum for completeness and to align with 2Q2024 ISO External CodeSets v1, for versions 5 and 6 of CDM.

What is being released?

  • Updated CapacityUnitEnum in cdm.base.math

Enumerations

  • Updated CapacityUnitEnum by adding 'J' to support Joule unit

The changes can be reviewed in PR: #3198

6.0.0-dev.81

11 Nov 18:30
8e33df0
Compare
Choose a tag to compare

Product Model - Asset Refactoring in AssetCriteria

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 has been agreed - through a cross-industry Task Force - to implement this remodelling in the CDM.

This release includes some additional functionality (following three planned major tranches of work in CDM 6 to implement the refactored model).

What is being released?

AssetCriteria:

  • The attribute assetIdentifier has been refactored to model an actual asset, specified using the Asset choice data type, rather than just an identifier. The attribute name has also been updated to specificAssets to make it clear that it is a list of specific assets, all of whom are eligible to be pledged as collateral. The condition on the data type has been updated too.

ListingType:

  • The cardinality of the three attributes in the data type ListingType (which is used in AssetCriteria) has been changed to none-to-many (rather than none or one); the attributes are exchange, sector, index. Without this, it would be only possible to select one of the values.

Review directions

The changes can be reviewed in PR: #3228

Backward-incompatible changes

This release contains changes that are not backward-compatible:

  • All references to the attribute assetIdentifier on AssetCriteria need to be updated as referenced; the new attribute is asset.

Mapping Update - Related party role mapper

Background

The Party Role mapping issue involved the incorrect transfer of FpML's relatedParty structure into CDM, particularly in cases where multiple relatedParty elements exist within the same partyTradeInformation block. The mapping process was only capturing the first relatedParty role found, which led to incorrect associations between party references and roles. Furthermore, if the role of the first relatedParty was not found in PartyRoleEnum, another role was incorrectly assigned, causing mismatches and inaccuracies in the data mapping.

What is being released?

  • We are introducing a new RelatedPartyRoleMappingProcessor that addresses the limitations of the previous implementation. This processor evaluates all relatedParty elements within a partyTradeInformation block instead of just mapping the first one. It ensures that each relatedParty is independently assessed, verifies its role against the PartyRoleEnum list, and assigns the correct role and reference accordingly. Additionally, if a role is not found in PartyRoleEnum, the processor omits that reference rather than assigning an incorrect role to the relatedParty.

Review directions

In Rosetta, select the Textual Browser and inspect each of the changes identified above.

Changes can be reviewed in PR: #3185

Mapping Update - InterestRateForwardDebtPriceMappingProcessor updated to handle 'Percentage' quoteUnits

Background

The price of bond forwards is captured as a monetary value whereas it should be a decimal/percentage. Even if the value in FpML was 'Percentage', the CDM representation value did not accurately represent this, causing misinterpretations.

What is being released?

  • An update to the InterestRateForwardDebtPriceMappingProcessor code to fix the described issue. This change, would correct the interpretation by dividing the current monetary value by 100, when the quoteUnits corresponds to the XML value 'Percentage'.
  • The bond-fwd-generic-ex01.xml and bond-fwd-generic-ex02.xml samples have been updated as the files were using the value 'Percent' but the correct value according to the enum should be 'Percentage'

Review directions

In Rosetta, select the Textual Browser and inspect each of the changes identified above.

The changes can be reviewed in PR: #3242

6.0.0-dev.80

07 Nov 15:29
5cb094e
Compare
Choose a tag to compare

Infrastructure - Dependency Update

What is being released?

This release updates the rune dependencies to version 11.24.2. This update includes support for visualising the Choice Type elements in the Rosetta User Interface.

Review directions

The changes can be reviewed in PR: #3223

6.0.0-dev.79

01 Nov 17:05
cd9644e
Compare
Choose a tag to compare

Product Model - Asset Refactoring: Payout as a Choice

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 has been agreed - through a cross-industry Task Force - to implement this remodelling in the CDM.

This release includes some additional functionality (following three planned major tranches of work in CDM 6 to implement the refactored model).

What is being released?

Payout:

  • The Payout data type has been refactored as a Choice. Choice data types work slightly different from the regular one-of condition because they force each of the members of the choice to have a single cardinality. Therefore, the use of Payout, for example on EconomicTerms and ResetInstruction, now have multiple cardinality.

Product Qualification:

  • Some minor changes have been made to the product qualification functions to ensure that the functionality and logic is unaffected by this change.

Documentation updates:

  • The CDM documentation on the FINOS website has been updated.

Review directions

The changes can be reviewed in PR: #3178

Backward-incompatible changes

This release contains changes that are not backward-compatible:

  • All references to a payout need to be updated as references to a payout are now treated as capitalised Data Types rather than lower case Attributes. For example, a previous reference might have read: payout -> interestRatePayout -> floatingAmount must now be written as: payout -> InterestRatePayout -> floatingAmount.
  • Logic or mapping that expects certain cardinality may need to be reviewed; see the explanation above.

CDM Product Model - Refactor ETD Product Qualification

Background

In an earlier Asset Refactoring release, the modelling of Exchange Traded Derivatives was enhanced
by introducing a new item ListedDerivative as an option of one of the values in the Asset choice
data type. However, the product qualification functions were still expecting these products to be
modelled using the Security choice within Asset. This has been corrected.
The enumerator type SecurityTypeEnum has been renamed to InstrumentTypeEnum and the value of
ListedDerivative has been removed from the list. This broadens the potential use of this
enumeration for additional assets.

The attribute instrumentType, using the InstrumentTypeEnum data type, has been added to InstrumentBase
so that this basic type determination is on all types of instrument. The corresponding attribute,
securityType has been removed from Security to avoid duplication.

The attribute securityType on the data type AssetType has been changed to use the renamed data
type, ie InstrumentTypeEnum.

Occurrences of logic to test the type of a security or instrument
have also been updated to use this new name InstrumentTypeEnum, including a number of references
to this enumerator in the product qualification logic. Where product qualification was only
looking for the type of a security, it has also been broadened to instrument.

Changes can be reviewed in PR #3200

6.0.0-dev.77

31 Oct 11:13
98e4d85
Compare
Choose a tag to compare

CDM Product Model - Underlier in Corporate Action

Background

In an earlier Asset Refactoring release, an unintending defect was introduced on the CorporateAction data type.
This release corrects that.

What is being released?

The data type of the underlier attribute within CorporateAction has been undated to be Underlier rather than
Instrument. Instrument is too restrictive as a broader range of assets can be the subject of corporate actions
and this is best represented by the Underlier data type.

Review Directions

In Rosetta, select the Textual Browser and inspect the changes to the data type identified above.

Changes can be reviewed in PR #3201

CDM Product Model - Add Price to Payouts

Background

This is an additional enhancement following the Asset Refactoring initiative by improving the consistency
of the modelling of prices on payouts.

What is being released?

The new attribute fixedPrice of type PriceSchedule has been added to the OptionPayout and to the
SettlementPayout. Both additionally have a metadata address link, pointing to the PriceQuantity
in the TradeLot.

Review Directions

In Rosetta, select the Textual Browser and inspect the changes to the two payouts identified above.

Changes can be reviewed in PR #3202

5.18.0

29 Oct 13:36
fc6f23e
Compare
Choose a tag to compare

CDM Model - Equity Product Qualification and Validation

Background

This release contains modifications required to accomodate Equity and Exotic Products under individual Asset Classes

What is being released?

This release creates following modifications:

  • a new qualification function Qualify_Equity_OtherOption to add qualification for Exotic Options
func Qualify_Equity_OtherOption: <"Qualifies a product with properties of an Exotic Option as Equity Option (Other)">
    [qualification Product]
    inputs:
        economicTerms EconomicTerms (1..1)
    output:
        is_product boolean (1..1)
            [synonym ISDA_Taxonomy_v1 value "Qualify_EquityOther"]
            [synonym ISDA_Taxonomy_v2 value "Qualify_EquityOther"]
    set is_product:
        Qualify_AssetClass_Equity(economicTerms) = True
            and economicTerms -> payout -> optionPayout only exists
            and economicTerms -> nonStandardisedTerms = True

  • changes in existing options to avoid duplicate qualification of options
e.g.
func Qualify_EquityOption_PriceReturnBasicPerformance_SingleName
now contains additional clause
and (if economicTerms -> nonStandardisedTerms exists then economicTerms -> nonStandardisedTerms = False else True)
  • modification in FpML conditions FpML_ird_9 and FpML_ird_29
    condition FpML_ird_9: <"FpML validation rule ird-9 - If calculationPeriodAmount/calculation/compoundingMethod exists, then resetDates must exist.">
        if compoundingMethod exists then resetDates exists

    condition FpML_ird_29: <"FpML validation rule ird-29 - If compoundingMethod exists, then fixedRateSchedule must not exist.">
        if compoundingMethod exists
        then rateSpecification -> fixedRate is absent
  • relaxation of cardinality rule for expirationTime
expirationTime BusinessCenterTime (0..1) <"The latest time for exercise on expirationDate.">

condition ExpirationTimeChoice: <"Condition to validate the existence of correlation between expirationTime and expirationTimeType">
    ExpirationTimeType(expirationTime, expirationTimeType)

func ExpirationTimeType: <"Conditional Validation function to check the existence of correlation between expiration Time and expiration Time Type.">
    inputs: 
        expirationTime BusinessCenterTime (0..1)
        expirationTimeType ExpirationTimeTypeEnum (0..1)
    output: 
        success boolean (1..1)
    
    set success:
        (if expirationTime exists and expirationTimeType exists then expirationTimeType = ExpirationTimeTypeEnum -> SpecificTime)
        and 
        (if expirationTimeType exists and expirationTimeType = ExpirationTimeTypeEnum -> SpecificTime then expirationTime exists) 

  • modification to Qualify_AssetClass_Commodity
addition of clause:
or (economicTerms -> payout -> forwardPayout, economicTerms -> payout -> commodityPayout) only exists
or economicTerms -> payout -> forwardPayout only exists)

Review Directions

In Rosetta, select the Textual Browser and inspect the changes identified above.

Changes can be reviewed in PR: #3163

CDM Model - RoundToPrecisionRemoveTrailingZeros Function

Background

This release contains a new function for RoundToPrecisionRemoveTrailingZeros function, as described in issue #2915.

What is being released?

This release creates the new function cdm.base.math.RoundToPrecisionRemoveTrailingZeros to not add any trailing 0's in the end if they do not already exist.

ffunc RoundToPrecisionRemoveTrailingZeros: <"Round a number 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">

    condition NonNegativePrecision: <"The number of decimal digits of precision should be greater than or equal to zero.">
        precision >= 0

The following examples show the function behaviour:

  • RoundToPrecisionRemoveTrailingZeros(1023.123456789, 5, RoundingDirectionEnum -> NEAREST, true) = 1023.12346
  • RoundToPrecisionRemoveTrailingZeros(1023.12000, 5, RoundingDirectionEnum -> NEAREST, true) = 1023.12
  • RoundToPrecisionRemoveTrailingZeros(1023, 5, RoundingDirectionEnum -> NEAREST, true) = 1023
  • RoundToPrecisionRemoveTrailingZeros(999999999, 4, RoundingDirectionEnum -> NEAREST, true) = 999999999

This would is new function, so there are no compatibility issues.

Review Directions

In Rosetta, select the Textual Browser and inspect the changes identified above.

Changes can be reviewed in PR #3181

CDM Model - RoundToSignificantFigures Function

Background

This release contains a new function for RoundToSignificantFigures function, as described in issue #3154.

What is being released?

This release creates the new function cdm.base.math.RoundToSignificantFigures to round to the significant number of decimal places.

func RoundToSignificantFigures: <"Round a number to the supplied significant figures, using the supplied rounding direction.">
    inputs:
        value number (1..1) <"The original (unrounded) number.">
        significantFigures int (1..1) <"The number of significant figures.">
        roundingMode RoundingDirectionEnum (1..1) <"The method of rounding (up/down/nearest).">
    output:
        roundedValue number (1..1) <"The value to the desired number of significant figures.">
        
    condition NonZeroSignificantFigures: <"The number of significant figures should be greater than zero.">
        significantFigures > 0

The following examples show the function behaviour:

  • RoundToSignificantFigures(1023.123456789, 5, RoundingDirectionEnum -> NEAREST) = 1023.1
  • RoundToSignificantFigures(1023.123456789, 5, RoundingDirectionEnum -> UP) = 1023.2
  • RoundToSignificantFigures(1023.123456789, 5, RoundingDirectionEnum -> DOWN) = 1023.1
  • RoundToSignificantFigures(1023.123456789, 1, RoundingDirectionEnum -> NEAREST) = 1000
  • RoundToSignificantFigures(1023.1, 7, RoundingDirectionEnum -> NEAREST) = 1023.1

This is a new function, so there are no compatibility issues.

Review Directions

In Rosetta, select the Textual Browser and inspect the changes identified above.

Changes can be reviewed in PR #3180

Infrastructure - Dependency Update

What is being released?

This release updates the DSL dependency.

Version updates include:

Review directions

The DSL 9.19.0 changes can be reviewed in PR: #3153
The DSL 9.20.0 changes can be reviewed in PR: #3192

6.0.0-dev.76

23 Oct 16:56
7944d73
Compare
Choose a tag to compare

Infrastructure - Dependency Update

What is being released?

This release updates the DSL dependency.

Version updates include:

Review directions

The changes can be reviewed in PR: #3191

6.0.0-dev.75

17 Oct 17:37
13a0d81
Compare
Choose a tag to compare

CDM Model - RoundToSignificantFigures Function

Background

In an earlier release, function cdm.base.math.RoundToSignificantFigures was added, however it was missing configuration.

What is being released?

Added missing Guice configuration for Java function implementation for cdm.base.math.RoundToSignificantFigures.

Review Directions

In Rosetta, select the Textual Browser and inspect the changes identified above.

Changes can be reviewed in PR #3184