The CDM is a model for financial products, trades in those products, and the lifecycle events of those trades. It is an open source standard that aligns data, systems and processes and is available as code in multiple languages for easy implementation across technologies.
Background
An evergreen contract is a type of agreement that automatically renews itself indefinitely or until either party decides to terminate it. There are two main events associated to evergreen contracts:
Rolling – this is where the contract is automatically renewed for another period
Termination – the contract is no longer renewed and will be closed when it reaches its termination date
The CDM supports evergreen contracts but currently does not support the events described above. In the proposal below I outline how we could process and qualify the Termination of an evergreen contract, and also raise some questions for feedback from the community.
Please refer to Issue #2334 for a proposal on how we could support the Rolling of an evergreen.
Proposal
To add new event and qualification functions to the model to support the termination of an evergreen.
Terminating an evergreen
The existing TermsChange processing is not able to manage this event. This is because we need to remove the evergreenProvision from the after trade. It is thus suggested that a new event function is created named Create_EvergreenTerminationInstruction.
To terminate an evergreen we need the following details:
In the instruction:
A terminationDate – as we need to know when the trade will terminate now it is no longer an evergreen
In the before trade:
Must have an evergreenProvision – this allows us to confirm that the trade is an evergreen.
There are further data items in the evergreen provisions that can affect the successful execution of the termination event. These are considered here, but I do not propose supporting them for the first contribution; they will be added in a following set of changes:
finalPeriodFeeAdjustment
If this is set then it will contain an adjustment that must be applied to the interest rate on the trade for its remaining term
The interest rate to update can be found under instruction -> before -> trade -> tradableProduct -> tradeLot -> priceQuantity
The adjusted rate should replace the rate in after -> trade -> tradableProduct -> tradeLot -> priceQuantity
We do not need to qualify this, but some validation could be applied i.e. confirm that we have a PriceQuantity with a rate in it.
noticeDeadlineDateTime
Specifies a date/time before which a notice to call/stop the evergreen can be served
To add support I think we’d need to add a parameter to the function where the current date/time can be entered, which will need to be checked against the date/time held in this data item.
noticeDeadlinePeriod
Specifies a period within which notice to call/stop the evergreen can be served
To add support I think we’d need to do the same as the noticeDeadlineDateTime i.e. add a parameter to the function.
singlePartyOption
If only one party can serve notice on the evergreen then they are referenced here by their role on the trade
To add support I think we’d need to add a parameter to the function so the calling application can tell it which party is attempting to stop the evergreen.
In the result of the Create_EvergreenTerminationInstruction we should expect:
BusinessEvent -> after -> economicTerms -> terminationDate should be set to the date passed in the instruction
BusinessEvent -> after -> economicTerms -> terminationProvision should not be present
Everything else should be the same in both the before and after trades
Qualifying the termination of an evergreen
To qualify that we are stopping the automatic rolling of an evergreen we need to confirm:
BusinessEvent -> instruction -> before has an economicTerms -> terminationProvision -> evergreenProvision item present – this confirms the trade was an evergreen
BusinessEvent -> after has no economicTerms -> terminationProvision -> evergreenProvision item in it – this confirms the trade is no longer an evergreen
BusinessEvent -> after has an economicTerms -> terminationDate data attribute present and it is a date that is today or in the future – this confirms the trade is now due to close on the proposed termination date
Background An evergreen contract is a type of agreement that automatically renews itself indefinitely or until either party decides to terminate it. There are two main events associated to evergreen contracts:
The CDM supports evergreen contracts but currently does not support the events described above. In the proposal below I outline how we could process and qualify the Termination of an evergreen contract, and also raise some questions for feedback from the community.
Please refer to Issue #2334 for a proposal on how we could support the Rolling of an evergreen.
Proposal To add new event and qualification functions to the model to support the termination of an evergreen.
Terminating an evergreen The existing
TermsChange
processing is not able to manage this event. This is because we need to remove theevergreenProvision
from theafter
trade. It is thus suggested that a new event function is created namedCreate_EvergreenTerminationInstruction
.To terminate an evergreen we need the following details:
instruction
:terminationDate
– as we need to know when the trade will terminate now it is no longer an evergreenbefore
trade:evergreenProvision
– this allows us to confirm that the trade is an evergreen.There are further data items in the evergreen provisions that can affect the successful execution of the termination event. These are considered here, but I do not propose supporting them for the first contribution; they will be added in a following set of changes:
finalPeriodFeeAdjustment
instruction -> before -> trade -> tradableProduct -> tradeLot -> priceQuantity
after -> trade -> tradableProduct -> tradeLot -> priceQuantity
PriceQuantity
with a rate in it.noticeDeadlineDateTime
noticeDeadlinePeriod
noticeDeadlineDateTime
i.e. add a parameter to the function.singlePartyOption
In the result of the
Create_EvergreenTerminationInstruction
we should expect:BusinessEvent -> after -> economicTerms -> terminationDate
should be set to the date passed in theinstruction
BusinessEvent -> after -> economicTerms -> terminationProvision
should not be presentbefore
andafter
tradesQualifying the termination of an evergreen To qualify that we are stopping the automatic rolling of an evergreen we need to confirm:
BusinessEvent -> instruction -> before
has aneconomicTerms -> terminationProvision -> evergreenProvision
item present – this confirms the trade was an evergreenBusinessEvent -> after
has noeconomicTerms -> terminationProvision -> evergreenProvision
item in it – this confirms the trade is no longer an evergreenBusinessEvent -> after
has aneconomicTerms -> terminationDate
data attribute present and it is a date that is today or in the future – this confirms the trade is now due to close on the proposed termination date