Skip to main content

Background

The FINOS CDM for Repo and Bonds initiative is intended to support the digitalization of the repo market through the adoption of a standardized domain model and lifecycle events based on industry best practices and standards.

The ICMA promotes adoption of CDM by organizing working groups and workshops on proof-of-concept projects and integration.

The repo elements of the model were designed with participation and contribution of the FINOS CDM for Repo and Bonds Steering Committee.

Introduction

The repo product model in the CDM does not follow any pre-defined taxonomy such as FpML or any regulatory model such as SFTR. Instead the repo model is agnostic to external models, messaging standards and technology. The fundmental concepts in the repo model are based on industry defintions of financial products, the GMRA and the ERCC Best Practices Guide.

Repurchase transactions are represented in the CDM as contractual products, which are products with custom payout structures and assets. The types of repo products that can be defined in the CDM is almost unlimited using the InterestRatePayout and AssetPayout structure. At a minimum the model supports basic repo transactions, fixed term repo, open repo, fixed rate and floating rate with optionality for early termination, evergreen and extendible. The model also support buy/sell-back transactions.

Repo lifecycle events are supported through a set of functions that accept a small set of inputs to auto-generate primitive instructions needed to execute business events. Repo lifecycle events include, rolling, re-rating, interium payments, pair-off and shaping.

Benefits

The benefits of using the CDM for repo transactions is that it provides a standard digital representation of the data required to define a repo product and a standardized set of lifecyle events.

Examples of where the CDM can be used in the repo market:

  • Post-trade matching using a single digital object.
  • Lifecycle event processing across counterparties and settlement services.
  • Internal and external reporting.
  • Capturing event history.
  • Market standard taxonomy and mapping interface to other platforms.

ICMA Contacts: ------------Gabriel Callsen, Director gabriel.callsen@icmagroup.org +44 (0)20 7213 0334

Tom Healey, FINXIS LLC, Consultant tom.healey@icmagroup.org

Scope

The scope of the CDM Repo initiative was intended to define:

  • Consistent definition of buyer-seller entities based on LEI data
  • Collateral, margin anf haircut attributes.
  • Flexible interest rate payout model to support complex structures.
  • Standardized product taxonomy.
  • Predefine lifecycle event processing and event history.

Repo Product Model

Building upon the CDM, the Repo CDM added new data types, attributes and events needed to create fixed term, open and floating rate repos, and execute various lifecycle events.

A repo product is formed from a ContractualProduct as an extension of ProductBase. The payout structure for a repo is constructed using an InterestRatePayout for the cash loan and AssetPayout for the collateral.

Payer and Receiver

The InterestRatePayout object must also define the payer and receiver. They payer and receiver are linked to the trade object that defines the counterparty and partyrole. In a repo transaction, the seller (collateral giver - borrower) will be the payer and the buyer(collateral taker -- lender) will be receiver. The payer and receiver are extensions from the PayoutBase.

Collateral

Collateral on a repo transaction is defined using AssetPayout. Security identification is set in the securityInformation attribute, which itself is a Product allowing for the possibility of creating products defined in terms of other products. Collateral may also be defined using parameters such as currency, country, maturity and other attributes available in CollateralProvisions to classify

Purchase Date and Repurchase Date

In economicTerms, the effectiveDate attribute represents the repo purchase date and the terminationDate is the repurchase date. For an open repo the terminationDate is not set until the repo terminates. The external and global key references should include \"PurchaseDate and \"RepurchaseDate\":

"effectiveDate": {
"adjustableDate": {
"dateAdjustments": {
"businessCenters": {
"businessCenter": [
{
"value": "GBLO"
}
]
},
"businessDayConvention": "NONE"
},
"unadjustedDate": "2023-06-16"
},
"meta": {
"externalKey": "PurchaseDate",
"globalKey": "PurchaseDate"
}
}
"terminationDate": {
"adjustableDate": {
"dateAdjustments": {
"businessDayConvention": "NONE",
"meta": {
"externalKey": "RepurchaseDate",
"globalKey": "RepurchaseDate"
}
},
"unadjustedDate": "2023-06-17"
}
}

Repurchase transactions should also include tags to identify the purchase price and repurchase price. In the interestRatePayout and purchase price is set on the priceQuantity and the initialPayment:

"priceQuantity": {
"meta": {
"externalKey": "PurchasePrice"
},
"quantitySchedule": {
"value": {
"unit": {
"currency": {
"value": "GBP"
}
},
"value": 9879046.8
}
},
"resolvedQuantity": {
"unit": {
"currency": {
"value": "GBP"
}
},
"value": 9879046.8
}
}

Repurchase transactions should also include the a legal agreement object with reference to the GMRA or other private agreement by adding the legalAgreementIdentification object:

"contractDetails": {
"documentation": [
{
"legalAgreementIdentification": {
"agreementName": {
"masterAgreementType": {
"value": "GMRA"
}
},
"governingLaw": "GBEN",
"publisher": "ICMA",
"vintage": 2011
}
}
]
}

Collateral is defined in assetPayout->securityInformation:

"securityInformation": {
"security": {
"productIdentifier": [
{
"value": {
"identifier": {
"value": "GB00B24FF097"
},
"source": "ISIN"
}],
"securityType": "DEBT"
}
}
}

Repurchase transactions are classified as a MoneyMarket types using AssetClassEnum, but this attribute is optional and is not required to qualify a trade.

Haircut and Margin

Most repo trades include a haircut or margin adjustment to the collateral value that affords the collateral holder a level of risk protection. Haircuts and margin adjustments are set on the collateralProvision attribute under economicTerms->collateral->collateralProvisions.

Haircuts in json format appear as:

"collateralProvisions": {
"eligibleCollateral": [
{
"criteria": [
{
"treatment": {
"valuationTreatment": {
"haircutPercentage": 2
}
}
}
]
}
]
}

Repurchase Transaction Example

Example: Fixed Term, Fixed Rate bi-lateral repo

A fixed term, fixed rate bilateral repo transaction is a transaction between two counterparties to exchange cash for collateral at an agreed interest rate for an agreed fixed term. On the effective date the seller delivers collateral to the buyer and receives cash. On the termination date the buyer returns collateral to the seller and receives the cash principal plus interest.

As previously described, to build a repo product the following components are needed:

  • Purchase Date
  • Repurchase Date
  • Buyer
  • Seller
  • Repo Rate
  • Collateral
  • Haircut
  • Purchase Price
  • Repurchase Price
  • Legal Agreement

A fixed term, fixed rate repo example json structure can be found here:

Fixed-Term,Fixed-Rate Repo Product :download:json \<code-snippets/fixed-term-fixed-rate-repo-product.json>

The priceQuantity object is used to define the collateral value and repo rate.

The repo rate is defined as a price with a priceTypeEnum value of "INTEREST_RATE".

"price": [
{
"meta": {},
"value": {
"unit": {
"currency": {
"value": "GBP"
}
},
"value": 0.004,
"perUnitOf": {
"currency": {
"value": "GBP"
}
},
"priceExpression": {
"priceType": "INTEREST_RATE"
}
}}]

The priceQuantity object is also used to define the collateral price and value:

"quantity": [
{
"meta": {},
"value": {
"unit": {
"currency": {
"value": "GBP"
}
},
"value": 9974250
}}]

Collateral amount is defined in terms of the nominal par amount:

"quantity": [
{
"meta": {},
"value": {
"unit": {
"currency": {
"value": "GBP"
}},
"value": 10000000
}}]

The collateral price can be defined as either Clean or Dirty price:

"price": [
{
"meta": {},
"value": {
"unit": {
"currency": {
"value": "GBP"
}
},
"value": 1.0075,
"perUnitOf": {
"currency": {
"value": "GBP"
}
},
"priceExpression": {
"cleanOrDirty": "DIRTY",
"priceExpression": "PERCENTAGE_OF_NOTIONAL",
"priceType": "ASSET_PRICE"
}}}]

Counterparties are defined in the counterparty object and need to define the role attribute as PARTY_1 or PARTY_2 as it relates to the counterparty being the buyer or seller.

{"partyReference": {
"value": {
"meta": {
"externalKey": "UkBank",
"globalKey": "1ef4886d"
},
"name": {
"value": "UK Bank plc"
}
}
},
"role": "PARTY_2"
}]
{"partyReference": {
"value": {
"meta": {
"externalKey": "UkBank",
"globalKey": "1ef4886d"
},
"name": {
"value": "UK Bank plc"
}}},
"role": "PARTY_2"
}]

partyRoles

PartyRoles are necessary to define the buyer (cash lender) and seller (collateral giver). A reference global key is used to link the party role to the party defined in the party object:

"partyRoles": [{
"partyReference": {
"externalReference": "GlobalBank",
"globalReference": "296093b7"
},
"role": "SELLER"
},
{"partyReference": {
"externalReference": "UkBank",
"globalReference": "1ef4886d"
},
"role": "BUYER"
}]

Trade Date

Trade Date is a simple date string:

"tradeDate": "2021-03-18"

Executing Business Event

Executing events in the CDM is performed by calling Create_BusinessEvent using one or more valid Instructions:

To represent the repurchase agreement using the CFI taxonomy the json would look like:

"productTaxonomy": [
{
"source": "CFI",
"value": {
"name": {
"value": "LRSTXD"
}
}
},
{
"productQualifier": "Repurchase Agreement",
"taxonomySource": "CFI"
}]

Lifecycle Events

Lifecycle events are actions that modify or close transactions. These actions may be taken by a counterparty or automatically generated due to events such as rate changes, contract changes, extensions, or terminations. Repo lifecycle events are important to the daily functioning of the market but also a source of errors and failures caused by different methodologies implemented by systems for the same event or mismatches in data, workflow and calculations. The CDM provides a software implementation based on industry practice and ERCC Best Practices industry intended to reduce mismatches in workflow and data.

In the CDM a lifecycle event results in a state transition. State changes are trade specific and are automatically linked in the CDM.

All repo events follow the CDM Event Model design and process. Initiating a repo event requires the creation of an event primitive instruction followed by a call to Create_BusinessEvent. Using an instantiated repo trade that was created with a repo execution will result in a TradeState object and the state is positionState=Executed.

Repo events currently supported in the CDM include:

  • Execution
  • Roll
  • Re-Rate
  • Early Termination
  • Pair-off
  • Shaping
  • On Demand Interest Payment