From 0c2a3060649f62f8291060e09d47d301b1a5df78 Mon Sep 17 00:00:00 2001 From: David Al-Kanani Date: Tue, 21 Nov 2023 12:22:25 +0000 Subject: [PATCH 1/4] =?UTF-8?q?Bataller=20Garc=C3=ADa=20Eric=20PTRR=20-=20?= =?UTF-8?q?Portfolio=20Rebalancing=20=20(#2538)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * PTRR - Portfolio Rebalancing For the EMIR jurisdiction, there are some reportable fields regarding PTRR (Post-Trade Risk Reduction) events. This release introduces support to allow the reporting for one of these PTRR events, specifically for the Portfolio Rebalancing, by adding its corresponding value to the intent enumeration and a specific qualification function for this event. * Update RELEASE.md * fix docs * Update RELEASE.md * update pr link --------- Co-authored-by: Bataller GarcĂ­a Eric Co-authored-by: ebataller <128476578+ebataller@users.noreply.github.com> Co-authored-by: eacunaISDA <82891014+eacunaISDA@users.noreply.github.com> --- RELEASE.md | 23 ++++++++++++------- docs/event-model.md | 2 ++ .../main/rosetta/event-common-enum.rosetta | 1 + .../rosetta/event-qualification-func.rosetta | 14 ++++++++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 8d4100bd68..b7d81ce644 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,14 +1,21 @@ -# *Infrastructure - Dependency Update* +# _Product Model - PTRR - Portfolio Rebalancing_ + +_Background_ + +In the technical specification for the EMIR jurisdiction, there are some reportable fields regarding PTRR (Post-Trade Risk Reduction) events. This release introduces support in the Common Domain Model to allow the complete reporting for one of these PTRR events, specifically for the Portfolio Rebalancing, by adding its corresponding value to the `EventIntentEnum` and a specific qualification function for this event. _What is being released?_ -This release updates the `rosetta-dsl` and `rosetta-bundle` dependency. +_Enumerations_ + +- Added new `PortfolioRebalancing` value to the `EventIntentEnum` enumeration. + +_Qualification_ + +- Added new `Qualify_PortfolioRebalancing` function. +- Updated the `Qualify_Execution` function to check for the absence of intent. -Version updates include: -- `rosetta-dsl` 9.0.3: DSL performance and stability improvements. For further details see DSL release notes: https://github.com/REGnosys/rosetta-dsl/releases/tag/9.0.3. -- `rosetta-dsl` 9.0.2: improved DSL error messages. For further details see DSL release notes: https://github.com/REGnosys/rosetta-dsl/releases/tag/9.0.2. -- Updated FpML schemas to latest, updating the corresponding enumerations. +_Review directions_ -There are no changes to the model, and test expectations remain the same. +In the CDM Portal, select the Textual Browser and inspect each of the changes identified above. The changes can be reviewed in PR [2538](https://github.com/finos/common-domain-model/pull/2538). -The changes can be reviewed in PR https://github.com/finos/common-domain-model/pull/2528. diff --git a/docs/event-model.md b/docs/event-model.md index 7a10c24139..eec06bddb5 100644 --- a/docs/event-model.md +++ b/docs/event-model.md @@ -841,8 +841,10 @@ enum EventIntentEnum: OptionExercise OptionalExtension OptionalCancellation + PortfolioRebalancing PrincipalExchange Reallocation + Repurchase ``` ## Lineage diff --git a/rosetta-source/src/main/rosetta/event-common-enum.rosetta b/rosetta-source/src/main/rosetta/event-common-enum.rosetta index 7d60743c0b..569313ca43 100644 --- a/rosetta-source/src/main/rosetta/event-common-enum.rosetta +++ b/rosetta-source/src/main/rosetta/event-common-enum.rosetta @@ -45,6 +45,7 @@ enum EventIntentEnum: <"The enumeration values to qualify the intent associated OptionExercise <"The intent is to Exercise a contract that is made of one or several option payout legs. For clarity, such intentEnum value shall not be used whenever an optional right is exercised in relation with a Trade which composition includes other types of payout legs e.g. right to call or to cancel before Termination Date as part of any kind of Early Termination terms other than genuine bermuda or american style features described in option payout. "> OptionalExtension <"The intent is to extend the trade through exercise of an optional right as defined within the CDM OptionProvision data type."> OptionalCancellation <"The intent is to cancel the trade through exercise of an optional right as defined within the CDM OptionProvision data type."> + PortfolioRebalancing <"The intent is to rebalance a portfolio, by inserting new derivatives transactions into portfolios of participants to reduce risks linked to those trades. These are offsetting trades that rebalance relationships between different counterparties when it comes to exposure of portfolios to certain types of risk, such as interest rate risk."> PrincipalExchange <"The intent is to pay or to receive a cash transfer, in accordance with Principal Exchange features."> Reallocation <"The intent is to reallocate one or more trades as part of an allocated block trade."> Repurchase <"The intent is to close a repo transaction through repurchase."> diff --git a/rosetta-source/src/main/rosetta/event-qualification-func.rosetta b/rosetta-source/src/main/rosetta/event-qualification-func.rosetta index 5b572caf9b..b2120e7fea 100644 --- a/rosetta-source/src/main/rosetta/event-qualification-func.rosetta +++ b/rosetta-source/src/main/rosetta/event-qualification-func.rosetta @@ -115,6 +115,17 @@ func Qualify_Compression: <"The qualification of a compression event from the fa set is_event: businessEvent -> instruction -> primitiveInstruction -> execution count = 1 and businessEvent -> instruction -> primitiveInstruction -> quantityChange count > 1 +func Qualify_PortfolioRebalancing: <"The qualification of a portfolio rebalancing event from the fact that (i) the intent is PortfolioRebalancing, and (ii) the execution primitive exists"> + [qualification BusinessEvent] + inputs: + businessEvent BusinessEvent (1..1) + output: + is_event boolean (1..1) + set is_event: + businessEvent -> intent = EventIntentEnum -> PortfolioRebalancing + and businessEvent -> instruction -> primitiveInstruction -> execution exists + //Pending to enhance the logic once portfolios are supported in the model + func Qualify_Exercise: <"The qualification of an exercise event from the fact that (i) the only primitive is the exercise, and (ii) the remaining quantity = 0, and (iv) the closedState of the contract is Terminated."> [qualification BusinessEvent] inputs: @@ -315,7 +326,8 @@ func Qualify_Execution: <"The qualification of an execution event from the fact alias primitiveInstruction: businessEvent -> instruction -> primitiveInstruction only-element set is_event: - (primitiveInstruction -> execution only exists + businessEvent -> intent is absent + and (primitiveInstruction -> execution only exists or (primitiveInstruction -> execution, primitiveInstruction -> transfer) only exists) func Qualify_ContractFormation: <"Qualifies a business event as a contract formation from the fact that the only component is a single Contract Formation Primitive."> From a96d868dd6302a4aeecc7b37797c309def456934 Mon Sep 17 00:00:00 2001 From: JayasriR <124573358+JayasriR@users.noreply.github.com> Date: Tue, 21 Nov 2023 17:23:49 +0000 Subject: [PATCH 2/4] Rguitart position business event after multiple cardinality (#2539) * Multiple cardinaltiy for after state for positions Cardinality change for after state within CounterpartyPositionBusinessEvent * task-6696: Updated release notes * Update RELEASE.md * Update RELEASE.md * task-6696: Updated release notes * task-6696: Updated PR link * Update RELEASE.md --------- Co-authored-by: Roger Guitart Co-authored-by: eacunaISDA <82891014+eacunaISDA@users.noreply.github.com> Co-authored-by: Payal Khanna <107400406+PayalKhanna@users.noreply.github.com> Co-authored-by: rvincentISDA <66018066+rvincentISDA@users.noreply.github.com> --- RELEASE.md | 17 ++++++++--------- .../src/main/rosetta/event-common-type.rosetta | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index b7d81ce644..88e7ba5d23 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,21 +1,20 @@ -# _Product Model - PTRR - Portfolio Rebalancing_ +# _Event Model - CounterpartyPositionBusinessEvent - Cardinality of the After state_ _Background_ -In the technical specification for the EMIR jurisdiction, there are some reportable fields regarding PTRR (Post-Trade Risk Reduction) events. This release introduces support in the Common Domain Model to allow the complete reporting for one of these PTRR events, specifically for the Portfolio Rebalancing, by adding its corresponding value to the `EventIntentEnum` and a specific qualification function for this event. +Following the release of counterparty position in the Common Domain Model, a modelling update is required. The cardinality of the attribute `after` of type `CounterpartyPositionBusinessEvent` has been relaxed to unbounded list `(0..*)`. This change will support the cases when multiple `after` position states are generated as a result of a _partial option exercise_ event being applied to the position. -_What is being released?_ -_Enumerations_ +_What is being released?_ -- Added new `PortfolioRebalancing` value to the `EventIntentEnum` enumeration. +- The cardinality of the `after` position state within `CounterpartyPositionBusinessEvent`is relaxed to unbounded list. -_Qualification_ +_Data types_ -- Added new `Qualify_PortfolioRebalancing` function. -- Updated the `Qualify_Execution` function to check for the absence of intent. +- `after` attribute of type `CounterpartyPositionState` updated to multiple cardinality. _Review directions_ -In the CDM Portal, select the Textual Browser and inspect each of the changes identified above. The changes can be reviewed in PR [2538](https://github.com/finos/common-domain-model/pull/2538). +In the CDM Portal, select the Textual Browser and inspect each of the changes listed above. +Changes can be reviewed in PR: https://github.com/finos/common-domain-model/pull/2539 diff --git a/rosetta-source/src/main/rosetta/event-common-type.rosetta b/rosetta-source/src/main/rosetta/event-common-type.rosetta index f6e544d303..2f9e857a66 100644 --- a/rosetta-source/src/main/rosetta/event-common-type.rosetta +++ b/rosetta-source/src/main/rosetta/event-common-type.rosetta @@ -100,7 +100,7 @@ type CounterpartyPositionBusinessEvent: <"A business event represents a life cyc eventDate date (0..1) <"Specifies the date on which the event is taking place. This date is equal to the trade date in the case of a simple execution. However it can be different from the trade date, for example in the case of a partial termination."> effectiveDate date (0..1) <"The date on which the event contractually takes effect, when different from the event date."> packageInformation IdentifiedList (0..1) <"Specifies the package information in case the business event represents several trades executed as a package (hence this attribute is optional). The package information is only instantiated once at the business event level to preserve referential integrity, whereas individual trades make reference to it to identify that they are part of a package."> - after CounterpartyPositionState (0..1) <"Specifies the after position state(s) created."> + after CounterpartyPositionState (0..*) <"Specifies the after position state(s) created."> type ObservationInstruction: <"Specifies inputs needed to process an observation."> observationEvent ObservationEvent (1..1) <"Contains all information related to an observation."> From 2791826ac259520184b4ff300fb1babb05a2492b Mon Sep 17 00:00:00 2001 From: JayasriR <124573358+JayasriR@users.noreply.github.com> Date: Wed, 22 Nov 2023 16:02:27 +0000 Subject: [PATCH 3/4] STORY-2963: A DRR user can access the FpML 5.13 WD3 schemas distribution in Rosetta (#2542) * task-6675: Update FpML 5.13 schema to use the 3rd working draft * task-6675: Updates * task-6675: Update release notes --- RELEASE.md | 10 +++ .../confirmation/fpml-asset-5-13.xsd | 53 ++++++++++--- .../fpml-5-13/confirmation/fpml-com-5-13.xsd | 75 +++++++++++-------- .../fpml-5-13/confirmation/fpml-doc-5-13.xsd | 36 ++++++--- .../confirmation/fpml-shared-5-13.xsd | 2 +- 5 files changed, 122 insertions(+), 54 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 88e7ba5d23..8047e3cd34 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -18,3 +18,13 @@ _Review directions_ In the CDM Portal, select the Textual Browser and inspect each of the changes listed above. Changes can be reviewed in PR: https://github.com/finos/common-domain-model/pull/2539 + +# *Event / Product Model - FpML 5.13 Schema* + +_What is being released?_ + +This release updates the FpML schema used for FpML to CDM ingestion. The version has been updated from `5.13 Second Working Draft` to `5.13 Third Working Draft`. For further details, visit https://www.fpml.org/spec/fpml-5-13-3-wd-3/. + +_Review Directions_ + +This change has no impact on the model or test expectations. The changes can be reviewed in PR [2542](https://github.com/finos/common-domain-model/pull/2542). \ No newline at end of file diff --git a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-asset-5-13.xsd b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-asset-5-13.xsd index 233a5eef35..b641e267c5 100644 --- a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-asset-5-13.xsd +++ b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-asset-5-13.xsd @@ -4,7 +4,7 @@ == Financial Products Markup Language is subject to the FpML public license. == A copy of this license is available at http://www.fpml.org/license/license.html --> - + @@ -310,6 +310,28 @@ + + + A type containing all commodity classification codes belonging to a specific commodity classification system. + + + + + Specifies a commodity classification code. The layer and classification system the code belongs to are specified in the coding scheme's URI. + + + + + + + A type used to identify commodities. It can be used with several schemes in order to specify different classification layers or different classification systems or jurisdictions. + + + + + + + @@ -1504,16 +1526,25 @@ A group used to specify the commodity underlyer in the event that no ISDA Commofity Reference Price exists. - - - A coding scheme value to identify the base type of the commodity being traded. Where possible, this should follow the naming convention used in the 2005 ISDA Commodity Definitions. For example, 'Oil'. - - - - - A coding scheme value to identify the commodity being traded more specifically. Where possible, this should follow the naming convention used in the 2005 ISDA Commodity Definitions. For example, 'Brent'. - - + + + + + A coding scheme value to identify the base type of the commodity being traded. Where possible, this should follow the naming convention used in the 2005 ISDA Commodity Definitions. For example, 'Oil'. + + + + + A coding scheme value to identify the commodity being traded more specifically. Where possible, this should follow the naming convention used in the 2005 ISDA Commodity Definitions. For example, 'Brent'. + + + + + + Specifies the classification of a commodity in the context of an n-layer classification system such as 2005 ISDA Commodity Definitions Sub Annex A or that in Table 4 of the Annex of the Comission Implementing Regulation (EU)laying down implementing technical standards for the application of Regulation (EU) No 648/2012 of the European Parliament and of the Council with regard to the standards, formats, frequency and methods and arrangements for reporting for EMIR Refit. + + + A coding scheme value to identify the unit of measure (e.g. Therms) in which the undelryer is denominated. Where possible, this should follow the naming convention used in the 2005 ISDA Commodity Definitions. diff --git a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-com-5-13.xsd b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-com-5-13.xsd index 6cb6e409c3..d6148f065c 100644 --- a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-com-5-13.xsd +++ b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-com-5-13.xsd @@ -4,7 +4,7 @@ == Financial Products Markup Language is subject to the FpML public license. == A copy of this license is available at http://www.fpml.org/license/license.html --> - + @@ -38,7 +38,7 @@ The average price leg of an average price commodity bullion or non-precious metal forward transaction. - + @@ -938,20 +938,12 @@ - + - - - Abstract base class for all commodity forward legs. - - - - - Frequency Type for use in Pricing Date specifications. @@ -1084,6 +1076,14 @@ + + + Abstract base class for all commodity legs + + + + + ISDA 1993 or 2005 commodity market disruption elements. @@ -1880,14 +1880,6 @@ - - - Abstract base class for all commodity swap legs - - - - - Commodity Swaption. @@ -2524,7 +2516,7 @@ The common components of a financially settled leg of a Commodity Swap. This is an abstract type and should be extended by commodity-specific types. - + @@ -2966,7 +2958,7 @@ The details of a fixed payment. Can be used for a forward transaction or as the base for a more complex fixed leg component such as the fixed leg of a swap. - + @@ -3168,19 +3160,28 @@ The common components of a physically settled leg of a Commodity Forward. This is an abstract type and should be extended by commodity-specific types. - + + + + + + + + + + The common components of a physically settled leg of a Commodity Swap. This is an abstract type and should be extended by commodity-specific types. - + @@ -3592,12 +3593,12 @@ - + The physical leg of a Commodity Forward Transaction for which the underlyer is Bullion. - + Physically settled coal leg. @@ -3617,7 +3618,7 @@ Defines a commodity forward product. - + Defines the substitutable commodity forward leg. @@ -3647,12 +3648,22 @@ Specifies the return payments of a commodity return swap. There can be one or two return legs. In simple return swaps there is a return leg and an interest (a.k.a. 'fee') leg. In the case of a outperformance swap there are two return legs: the return performance of two commodity underlyers are swapped. In the case of a fully-funded return swap there is no financing component and, therefore, only a single return leg is specified. + + + Defines the substitutable physical leg + + + + + Physical Commodity Leg. + + Defines a commodity swap product. - + Defines the substitutable commodity swap leg @@ -3667,12 +3678,12 @@ Specifies the variance payments of a commodity variance swap. - + Physically settled electricity leg. - + Physically settled environmental leg. @@ -3687,17 +3698,17 @@ Floating Price leg. - + Physically settled natural gas leg. - + Physically settled metal products leg. - + Physically settled oil or refined products leg. diff --git a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-doc-5-13.xsd b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-doc-5-13.xsd index 7abfbcc5d3..ff7a6fe74f 100644 --- a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-doc-5-13.xsd +++ b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-doc-5-13.xsd @@ -4,7 +4,7 @@ == Financial Products Markup Language is subject to the FpML public license. == A copy of this license is available at http://www.fpml.org/license/license.html --> - + @@ -881,11 +881,6 @@ Specifies whether the trade used to hedge a risk for accounting purposes for the specified party. (TODO: do we need to distinguish between asset and liability hedges?) - - - Directly linked to commercial activity or treasury financing. Information on whether the contract is objectively measurable as directly linked to the counterparty's commercial or treasury financing activity, as referred to in Article 10(3) of Regulation (EU) No 648/2012. - - Used to categorize trades into user-defined categories, such as house trades vs. customer trades. @@ -971,11 +966,11 @@ Describes why the price of this trade does not reflect the current market price. For example, the trade may have been traded off-market as part of a termination or compression operation. - + - Specifies whether the sender of this trade considers it to be a large notional trade or block trade for reporting purposes, and thus eligible for delayed public reporting. Normally this will only be applicable for off-facility trades. + Indicator of a block trade or large size trade. - + Used to describe how the trade was executed, e.g. via voice or electronically. @@ -1266,6 +1261,11 @@ + + + Directly linked to commercial activity or treasury financing. Information on whether the contract is objectively measurable as directly linked to the counterparty's commercial or treasury financing activity, as referred to in Article 10(3) of Regulation (EU) No 648/2012. + + Choice containing all information regarding an end user exception. @@ -1851,7 +1851,7 @@ This optional attribute can be supplied by a message creator in an FpML instance to specify which build number of the schema was used to define the message when it was generated. - + The specific build number of this schema version. This attribute is not included in an instance document. Instead, it is supplied by the XML parser when the document is validated against the FpML schema and indicates the build number of the schema file. Every time FpML publishes a change to the schema, validation rules, or examples within a version (e.g., version 4.2) the actual build number is incremented. If no changes have been made between releases within a version (i.e. from Trial Recommendation to Recommendation) the actual build number stays the same. @@ -2067,5 +2067,21 @@ + + + + + + For off-facility trades, specifies whether the sender of this trade considers it to be a large notional trade or block trade for reporting purposes, and thus eligible for delayed public reporting. This element is used to supply CFTC Large notional off-facility swap election indicator. + + + + + For on-facility trades, indicator of whether an election has been made to report the swap transaction as a block transaction by the reporting counterparty or as calculated by either the swap data repository acting on behalf of the reporting counterparty or by using a third party. This element is used to provide CFTC 93 Block Trade Election Indicator. + + + + + diff --git a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-shared-5-13.xsd b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-shared-5-13.xsd index 4353319266..6323441ccd 100644 --- a/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-shared-5-13.xsd +++ b/rosetta-source/src/main/resources/schemas/fpml-5-13/confirmation/fpml-shared-5-13.xsd @@ -4,7 +4,7 @@ == Financial Products Markup Language is subject to the FpML public license. == A copy of this license is available at http://www.fpml.org/license/license.html --> - + From 1786dc2f3c4d4a984a4b53a62e58ff9ba471ea24 Mon Sep 17 00:00:00 2001 From: JayasriR <124573358+JayasriR@users.noreply.github.com> Date: Thu, 23 Nov 2023 14:56:44 +0000 Subject: [PATCH 4/4] Rvincent qualify contract formation enhancement for transfer (#2544) * qualify_ContractFormation Enhancement for transfer qualify_ContractFormation Enhancement for transfer to allow for premium on contract formation * task-6713: Update release notes * task-6713: Updates * Update RELEASE.md * Update RELEASE.md * Update RELEASE.md --------- Co-authored-by: Ruddy Vincent Co-authored-by: rvincentISDA <66018066+rvincentISDA@users.noreply.github.com> Co-authored-by: eacunaISDA <82891014+eacunaISDA@users.noreply.github.com> --- RELEASE.md | 20 ++++++++++++++++++- .../rosetta/event-qualification-func.rosetta | 7 ++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 8047e3cd34..34d5791f22 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,3 +1,21 @@ +# _Event Model - Qualification Functions - Enhancements for the Contract Formation qualification function_ + +_Background_ + +The current Contract Formation qualification function does not allow the inclusion of the inception premium. The latter can be transferred as part of the trade execution. This change allows a transfer instruction to be part of the representation of the business event. + + +_What is being released?_ + +The logical expression for the `Qualify_ContractFormation` function is enhanced to allow for the presence of a transfer instruction. + + +_Review directions_ + +In the CDM Portal, select the Textual Browser and inspect the function mentioned above. + +Changes can be reviewed in PR: https://github.com/finos/common-domain-model/pull/2544 + # _Event Model - CounterpartyPositionBusinessEvent - Cardinality of the After state_ _Background_ @@ -27,4 +45,4 @@ This release updates the FpML schema used for FpML to CDM ingestion. The version _Review Directions_ -This change has no impact on the model or test expectations. The changes can be reviewed in PR [2542](https://github.com/finos/common-domain-model/pull/2542). \ No newline at end of file +This change has no impact on the model or test expectations. The changes can be reviewed in PR [2542](https://github.com/finos/common-domain-model/pull/2542). diff --git a/rosetta-source/src/main/rosetta/event-qualification-func.rosetta b/rosetta-source/src/main/rosetta/event-qualification-func.rosetta index b2120e7fea..fb641e63c4 100644 --- a/rosetta-source/src/main/rosetta/event-qualification-func.rosetta +++ b/rosetta-source/src/main/rosetta/event-qualification-func.rosetta @@ -339,11 +339,12 @@ func Qualify_ContractFormation: <"Qualifies a business event as a contract forma alias primitiveInstruction: businessEvent -> instruction -> primitiveInstruction only-element set is_event: - (primitiveInstruction -> contractFormation only exists - or (primitiveInstruction -> execution, primitiveInstruction -> contractFormation) only exists) + (primitiveInstruction -> contractFormation) only exists + or (primitiveInstruction -> contractFormation , primitiveInstruction -> transfer ) only exists + or (primitiveInstruction -> execution, primitiveInstruction -> contractFormation) only exists + or (primitiveInstruction -> execution, primitiveInstruction -> contractFormation, primitiveInstruction -> transfer) only exists or (primitiveInstruction is absent and businessEvent -> intent = EventIntentEnum -> ContractFormation) -// and businessEvent -> tradeWarehouseWorkflow is absent func Qualify_StockSplit: <"The qualification of StockSplit business event based on (i) an unchanged before/after currency amount (ii) the same adjustment ratio applied to the before/after cash price and number of units."> [qualification BusinessEvent] inputs: