Adrian Jenks Legaldocumentation - Enhance the Umbrella functionality within the Legaldocumentation section of the CDM.#4190
Conversation
…galdocumentation section of the CDM.
Legaldocumentation - Enhance the Umbrella functionality within the Legaldocumentation section of the CDM.Background The Umbrella functionality within the CDM required to be built out to meet the requirements of the members to support the capture of Legal Agreement terms within an Umbrella Structure. The original solution only allowed for the identification that the agreement had an Umbrella structure and allowed the capture of term election variations through the use of a single string variable. The proposed solution creates an Umbrella structure that is mapped to the existing Legal documentation agreement election structures while allowing multiple agreement sets to be created that identify different election combinations and allows the agreement set to be defined against 1 or more parties to the agreement. Parties to the agreement are also assigned roles identifying the legal and business purpose of those entities within the agreement. What is being released? Updated types and enumerated lists have been added to the legal documentation component of the CDM as listed below: Enum
Type
Review Directions Changes can be reviewed in PR: #4190 Note This comment was generated via Rosetta. |
✅ Deploy Preview for finos-cdm ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
| @@ -155,16 +155,25 @@ type AgreementName: <"Specifies the agreement name through an agreement type and | |||
|
|
|||
| type UmbrellaAgreement: <"A class to specify a set of legal entities which are part of a legal agreement beyond the two contracting parties to that agreement. This data representation reflects the ISDA Create representation."> | |||
There was a problem hiding this comment.
Not added as part of this PR but the final sentence referencing ISDA Create should be removed as this will be used more broadly now
There was a problem hiding this comment.
This is an old description which I have updated in the revised contribution.
| language string (0..1) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (0..*) <"Underlying principals to the umbrella agreement."> | ||
| agreementSet UmbrellaAgreementSet (1..*) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (2..*) <"Underlying principals to the umbrella agreement."> |
There was a problem hiding this comment.
Can we clarify whether we're talking about parties, entities or principals please? The attribute is named parties but the type is UmbrellaAgreementEntity. There is some ongoing discussion around a legal entity vs a party which might be useful here 🙂
There was a problem hiding this comment.
Agree the naming can be confusing here. I believe Entity is the correct name in this case as this type is capturing all entities within the agreement. These could be Parties to the agreement or they could be entities that are solely managed by a party to the agreement and are not legal entities themselves. For example Sub Account, Alert Codes or Sleeves. In these situations the Entity still needs to be recorded but the party that the Entity rolls up to must also be recorded. This is important when considering Margin calculations.
I have updated the description for UmbrellaAgreementEntity
| parties UmbrellaAgreementEntity (0..*) <"Underlying principals to the umbrella agreement."> | ||
| agreementSet UmbrellaAgreementSet (1..*) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (2..*) <"Underlying principals to the umbrella agreement."> | ||
| language string (0..1) <"Represents any bespoke language that may need to be captured regarding the structure or application of terms that may exist for the agreement."> |
There was a problem hiding this comment.
better perhaps to call the attribute bespokeLanguage?
There was a problem hiding this comment.
I have amended the description to remove the word bespoke. Amending the name from to bespokeLanguage will require Synonym changes for creatiq
| condition UmbrellaAgreementExists: <"Umbrella Agreement language and parties should not exist when Umbrella Agreement terms are Not Applicable."> | ||
| if isApplicable = True then language exists and parties exists | ||
| type UmbrellaAgreementEntity extends Counterparty: <"A class to specify the legal entities that are part of the umbrella agreement."> | ||
| umbrellapartyrole UmbrellaPartyRoleEnum (0..1) <"Represents the legal role that each defined entity to the agreement performs within the structure of that agreement."> |
There was a problem hiding this comment.
umbrellaPartyRole rather than umbrellapartyrole
There was a problem hiding this comment.
Change made as recommended
| if isApplicable = True then language exists and parties exists | ||
| type UmbrellaAgreementEntity extends Counterparty: <"A class to specify the legal entities that are part of the umbrella agreement."> | ||
| umbrellapartyrole UmbrellaPartyRoleEnum (0..1) <"Represents the legal role that each defined entity to the agreement performs within the structure of that agreement."> | ||
| parentparty Parentparty (0..1) |
There was a problem hiding this comment.
parentParty and ParentParty perhaps?
And perhaps add a comment next to it.
There was a problem hiding this comment.
Change to name made as suggested and comment added to provide a description of the purpose of the type
| enum UmbrellaPartyRoleEnum: | ||
| Agent <"Represents a Legal Entity who has authority to negotiate, execute and deliver confirmations on behalf of each affiliate that is linked to the Agent."> | ||
| InvestmentManager <"Represents a Legal Entity who has been authorised to act as a centralised authority empowered to negotiate, execute and manage derivative transactions on behalf of multiple affiliated funds or accounts."> | ||
| Principal <"Represents a Legal Entity that enters into and assumes direct responsibility for derivative transactions."> |
There was a problem hiding this comment.
Derivative removed from the description
| Agent <"Represents a Legal Entity who has authority to negotiate, execute and deliver confirmations on behalf of each affiliate that is linked to the Agent."> | ||
| InvestmentManager <"Represents a Legal Entity who has been authorised to act as a centralised authority empowered to negotiate, execute and manage derivative transactions on behalf of multiple affiliated funds or accounts."> | ||
| Principal <"Represents a Legal Entity that enters into and assumes direct responsibility for derivative transactions."> | ||
| Sub Account <"Represents an individual trading entity, fund, portfolio or managed account associated to a principal, Investment Manager or Agent LEgal Entity."> |
There was a problem hiding this comment.
"SubAccount" rather than "Sub Account" i.e. no space please.
LEgal = Legal
There was a problem hiding this comment.
Changes made as described
| InvestmentManager <"Represents a Legal Entity who has been authorised to act as a centralised authority empowered to negotiate, execute and manage derivative transactions on behalf of multiple affiliated funds or accounts."> | ||
| Principal <"Represents a Legal Entity that enters into and assumes direct responsibility for derivative transactions."> | ||
| Sub Account <"Represents an individual trading entity, fund, portfolio or managed account associated to a principal, Investment Manager or Agent LEgal Entity."> | ||
| Sleeve <"Represents a distinct trading strategy, portfolio, or sub account amanged within a broader legal entity or fund. It is not a legal party to the agreement."> |
There was a problem hiding this comment.
Changes made as shown
| parentparty Parentparty (0..1) | ||
|
|
||
| type UmbrellaAgreementEntity extends LegalEntity: <"A class to specify the legal entities that are part of the umbrella agreement."> | ||
| condition Parentparty: <"Identifies where a parent child relationship exists between two parties to the Umbrella agreement, allowing none legal entities to be linked to the appropriate legal entity and allowing funds, protfolio or managed accounts to be linked to their applicable Investment Manager or Agent within the agreement."> |
There was a problem hiding this comment.
Can we remove the word "none" from the comment?
protfolio = portfolio
There was a problem hiding this comment.
I think it is important to retain something in the description to state that not all Entities are Legal Entities, I have therefore removed the word none and replaced with non-legal, if this still feels incorrect I can just leave the description as entities but I want to ensure that members recognise that all form of entities to the Umbrella agreement should be captured under this type.
|
|
||
| type UmbrellaAgreementEntity extends LegalEntity: <"A class to specify the legal entities that are part of the umbrella agreement."> | ||
| condition Parentparty: <"Identifies where a parent child relationship exists between two parties to the Umbrella agreement, allowing none legal entities to be linked to the appropriate legal entity and allowing funds, protfolio or managed accounts to be linked to their applicable Investment Manager or Agent within the agreement."> | ||
| if umbrellapartyrole = UmbrellaPartyRoleEnum -> Sleeve then parentparty exists |
There was a problem hiding this comment.
indentation, just needs to go out one more tab to be under the condition 🙂
There was a problem hiding this comment.
Additional indentation made as suggested
|
After reviewing the comments from @chrisisla changes have been made and the revised code re-contributed. |
…omments received to the orig...
|
What is being released? Revisions to the Umbrella functionality Contribution to reflect the comments received to the original contribution Note This comment was generated via Rosetta. |
| Principal <"Represents a Legal Entity that enters into and assumes direct responsibility for transactions."> | ||
| SubAccount <"Represents an individual trading entity, fund, portfolio or managed account associated to a principal, Investment Manager or Agent Legal Entity."> | ||
| Sleeve <"Represents a distinct trading strategy, portfolio, or sub account managed within a broader legal entity or fund. It is not a legal party to the agreement."> | ||
| enum AmendmentPurposeEnum: |
There was a problem hiding this comment.
Minor, looking at it, all enums prior to this had a line of whitespace between them for readability. Would recommend following suit
There was a problem hiding this comment.
This was resolved by removing some code that was part of a later planned submission
| AmendTerms <"Amendment of Legal Agreement Terms"> | ||
| AmendEntities <"Add, Remove or Amend Legal Entities to the agreement"> | ||
| AmendandRestate <"Amend terms and restate the legal agreement elections"> | ||
| Novation <"Novate trades from existing agreement to alternative agreement"> | ||
| Superseding <"Terminate existing agreement and define new agreement as superseding original agreement"> | ||
| Termination <"Termination of existing agreement"> |
There was a problem hiding this comment.
Super minor, these descriptions are missing full stops and they appear to be in the rest of the descriptions in this file
There was a problem hiding this comment.
Thanks Paul, those types should not have been in this contribution I will revert
| impactedAgreements LegalAgreementBase (0..*) <"Test"> | ||
| agreementTerms AgreementTerms (0..*) <"Test"> |
There was a problem hiding this comment.
Should not have "Test" as a description
There was a problem hiding this comment.
Thanks Paul, those types should not have been in this contribution I will revert
There was a problem hiding this comment.
I'm presuming the AmendmentTerms here are capturing which agreements (which presumably will most likely just be 1) are impacted, and what the updated agreementTerms are.
Is there a way to add some validation here that will allow for a quick sanity check that the impacted agreements and the terms line up correctly? even checking just that e.g. length of agreement terms is not greater than impacted agreements would be sensible.
And final point, should both of these not be (1..*). I wouldn't have an amendment term without impacting at least one agreement with related terms?
There was a problem hiding this comment.
Thanks Paul, those types should not have been in this contribution I will revert
Ah, typed out more info before I saw reply, you can ignore my other comment
| amendment AmendmentTerms (0..*) <"Represents the legal purpose of an amendment document and the Legal agreements which are impacted by the amendment"> | ||
| umbrellaAgreement UmbrellaAgreement (0..1) <"The determination of whether Umbrella Agreement terms are applicable (True) or Not Applicable (False)."> | ||
|
|
||
There was a problem hiding this comment.
super minor, unnecessary indent
…ndments but are not ready to...
|
What is being released? Updated contribution to remove some types that had been added for Amendments but are not ready to be contributed at this time. Note This comment was generated via Rosetta. |
| language string (0..1) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (0..*) <"Underlying principals to the umbrella agreement."> | ||
| agreementSet UmbrellaAgreementSet (1..*) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (2..*) <"Specifies the underlying entities to the agreement that either act as legal parties to the agreement or represent Legal constructs that are managed by a party to the agreement but do not represent a Legal Entity as of themselves."> |
There was a problem hiding this comment.
Aware the Legal Entity capitalisation is standard, but gave me pause at Legal constructs. Very minor
There was a problem hiding this comment.
Amended capitalisation
| isApplicable boolean (1..1) <"The determination of whether Umbrella Agreement terms are Applicable (True), or Not Applicable (False)"> | ||
| language string (0..1) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (0..*) <"Underlying principals to the umbrella agreement."> | ||
| type UmbrellaAgreementEntity extends Counterparty: <"A class to specify the legal entities that are part of the umbrella agreement."> |
There was a problem hiding this comment.
Is this description technically true now? We are defining both legal and non legal entities in this type? I believe the parentParty does need to be legal, but the actual entity possibly not?
There was a problem hiding this comment.
Description amended
| parties UmbrellaAgreementEntity (0..*) <"Underlying principals to the umbrella agreement."> | ||
| type UmbrellaAgreementEntity extends Counterparty: <"A class to specify the legal entities that are part of the umbrella agreement."> | ||
| umbrellaPartyrole UmbrellaPartyRoleEnum (0..1) <"Represents the legal role that each defined entity to the agreement performs within the structure of that agreement."> | ||
| parentParty Parentparty (0..1) <"Represents the identification of a parent child relationship between two entities in the Umbrella agreement, allowing non-legal entities to be linked to the appropriate legal entity and allowing funds, portfolio or managed accounts to be linked to their applicable Investment Manager or Agent within the agreement."> |
There was a problem hiding this comment.
Would rename Parentparty to ParentParty for syntax
There was a problem hiding this comment.
Changed as recommended
| condition UmbrellaAgreementExists: <"Umbrella Agreement language and parties should not exist when Umbrella Agreement terms are Not Applicable."> | ||
| if isApplicable = True then language exists and parties exists | ||
| condition Parentparty: <"Identifies where a parent child relationship exists between two parties to the Umbrella agreement, allowing none legal entities to be linked to the appropriate legal entity and allowing funds, protfolio or managed accounts to be linked to their applicable Investment Manager or Agent within the agreement."> | ||
| if umbrellaPartyrole = UmbrellaPartyRoleEnum -> Sleeve then parentParty exists |
There was a problem hiding this comment.
So a sleeve is the only non legal entity here, sub accounts can stand on their own right?
And in the same breath, a principal or an investment manager can have an agent as a parent?
There was a problem hiding this comment.
At the moment that is true, although if there are believed to be other entity types these can be added to the enum and the appropriate condition added to ensure compliance to ensure non legal entities have a legal entity parent.
As you state we also need to recognise that any Legal entity can also have a parent but we cannot enforce that a Legal Entity must have a parent if they are not an Agent or Investment Manager.
| type UmbrellaAgreement: <"Specifies a set of legal entities which are part of a legal agreement beyond the two contracting parties to that agreement."> | ||
|
|
||
| agreementSet UmbrellaAgreementSet (1..*) <"The language associated with the umbrella agreement, and which applies to all the parties to the umbrella agreement."> | ||
| parties UmbrellaAgreementEntity (2..*) <"Specifies the underlying entities to the agreement that either act as legal parties to the agreement or represent Legal constructs that are managed by a party to the agreement but do not represent a Legal Entity as of themselves."> |
There was a problem hiding this comment.
On line 156 we state this captures the legal entities beyond the two contracting parties. But then we specify here parties must be a minimum of length 2. If I have an umbrella agreement between bank A and bank B, but bank B is acting as an agent for a single principal, would this not fall down? Aware that scenario is unlikely, but it would be technically possible?
Party A Bank A
Party B Bank B (acting as an agent)
Principal Fund 1
Or would the top layer parties also be captured here, in which case the description is slightly off?
Again, legalese not my forte, so point out the flaws in my logic
There was a problem hiding this comment.
I think the description is off and needs to be updated to reflect the scenario you state. A party can be both an Agent on the agreement and a Principal as well.
…r and PartyIdentifier planne...
|
What is being released? Amendments made to Type names as advised within the contribution comments. Note This comment was generated via Rosetta. |
|
Superseded by #4322 |
chrisisla
left a comment
There was a problem hiding this comment.
Changes made last iteration look good 🙂 I am still not that happy with the fact we have UmbrellaPartyRoleEnum referencing something that is not a "party" (the Sleeve) but I think this is about as good as we're going to get!
I have added a couple more comments but also want to ask, should it be "non legal entity" or "non-legal entity"? We actually have both in the comments. My feeling is "non-legal entity" is better but happy either way, if we can just decide on one and make sure we're consistent in its usage please.
Final point is that the Rosetta Workspace has some additional types in it that we need to ensure are not contributed as part of this PR (ContactInformationElection, NoticeInformationElection etc)
| then creditSupportAgreementType exists | ||
|
|
||
| type UmbrellaAgreement: <"A class to specify a set of legal entities which are part of a legal agreement beyond the two contracting parties to that agreement. This data representation reflects the ISDA Create representation."> | ||
| type UmbrellaAgreement: <"Specifies a set of parties which are part of a legal agreement beyond the two contracting parties to that agreement."> |
There was a problem hiding this comment.
This comment isn't quite right, the UmbrellaAgreement type defines the set of agreements, the parties are set within UmbrellaAgreementSet. Can we just change the comment to reflect this please?
There was a problem hiding this comment.
Amended as suggested
There was a problem hiding this comment.
As stated in an earlier comment I have updated all references in comments to non-legal entity to maintain consistency.
| umbrellaAgreement UmbrellaAgreement (0..1) <"The determination of whether Umbrella Agreement terms are applicable (True) or Not Applicable (False)."> | ||
|
|
||
| umbrellaAgreement UmbrellaAgreement (0..1) <"Specifies a set of legal entities which are part of a legal agreement beyond the two contracting parties to that agreement."> | ||
There was a problem hiding this comment.
What is the relationship between agreementTerms and umbrellaAgreement. Should it be possible to have both included under one LegalAgreement?
There was a problem hiding this comment.
agreementTerms is used to capture the terms of a one way or Bilateral CSA. The umbrellaAgreement is used as the entry point to define that the structure of this agreement being captured is an Umbrella.
There was a problem hiding this comment.
When capturing an agreement you should either capture agreementTerms or umbrallaAgreement not both.
There was a problem hiding this comment.
If we should only have agreementTerms OR umbrellaAgreement and not both then we’ll need to add a condition under LegalAgreement to enforce this. Something like this should work – please feel free to adapt the comment to better describe an umbrella agreement:
condition AgreementType: <"Either the Agreement Terms (i.e. a bilateral agreement) or an Umbrella Agreement (i.e. an agreement with multiple parties) should be included, not both.">
required choice agreementTerms, umbrellaAgreement
There was a problem hiding this comment.
Condition added as recommended and contribution submitted
…ty and amended the umbrellaA...
|
What is being released? Updated comments to maintain consistency of use of term non-legal entity and amended the umbrellaAgreement definition. Note This comment was generated via Rosetta. |
… agreementTerms and umbrella...
|
What is being released? Added a condition under LegalAgreement to enforce a condition so both agreementTerms and umbrellaAgreement cannot be captured for the same agreement. Note This comment was generated via Rosetta. |
…CLA signing to occur
|
What is being released? Updated contribution added a full stop to a description to allow EasyCLA signing to occur. Note This comment was generated via Rosetta. |
… EasyCLA security authorisat...
|
What is being released? Updated descriptions with full stop to allow contribution and resolve EasyCLA security authorisation issue Note This comment was generated via Rosetta. |
|
Closing following merge of release PR. |
No description provided.