Terminating instrument lifecycle events if a bond issuer defaults

If a bond issuer defaults on their obligation, you can instruct LUSID to terminate instrument lifecycle events for an instrument of type Bond, ComplexBond or InflationLinkedBond.

To do this, manually load a BondDefaultEvent into a corporate action source and subscribe each portfolio with a holding in the defaulted bond to that source. Note the following:

  • A BondDefaultEvent has a single mandatory effectiveDate field that represents the datetime from which events should terminate.

  • LUSID terminates instrument lifecycle events of types BondCouponEvent and BondPrincipalEvent from this date. This means no subsequent transactions representing coupon and principal payments are generated.

  • LUSID does still emit a MaturityEvent on the original instrument maturity date, and generates a transaction with a cost of zero. You can handle this event in the normal way to reduce your units down to zero on that date, or alternatively take pre-emptive action if you wish.

Step 1: Create a corporate action source

If a suitable corporate action source does not exist, call the CreateCorporateActionSource API to create one. Note if the defaulted bond is stored in a custom instrument scope you should populate the instrumentScopes object, for example:

curl -X POST 'https://<your-domain>.lusid.com/api/api/corporateactionsources'
  -H 'Content-Type: application/json-patch+json'
  -H 'Authorization: Bearer <your-API-access-token>'
  -d '{
    "scope": "My-CAS-scope",
    "code": "My-CAS-code",
    "displayName": "Example corporate action source",
    "description": "This is an example corporate action source",
    "instrumentScopes": ["My-bond-instrument-scope"]
  }'

Step 2: Subscribe a portfolio to the corporate action source

Call the UpsertPortfolioDetails API to retrospectively subscribe an existing portfolio with a holding in the defaulted bond to the corporate action source, for example:

curl -X POST 'https://<your-domain>.lusid.com/api/api/transactionportfolios/growth/uk-equities/details'
 -H 'Content-Type: application/json-patch+json'
 -H 'Authorization: Bearer <your-API-access-token>'
 -d '{
  "corporateActionSourceId": {
    "scope": "My-CAS-scope",
    "code": "My-CAS-code"
  }
}'

Step 3: Load a bond default event into the corporate action source

Call the UpsertInstrumentEvents API to load a BondDefaultEvent into the corporate action source, for example:

curl -X POST 'https://<your-domain>.lusid.com/api/api/corporateactionsources/My-CAS-scope/My-CAS-code/instrumentevents'
 -H 'Content-Type: application/json-patch+json'
 -H 'Authorization: Bearer <your-API-access-token>'
 -d '[
  {
    "instrumentEventId": "BondDefault-2024-08-15",
    "instrumentIdentifiers": {"Instrument/default/LusidInstrumentId": "LUID_00003E33"},
    "description": "Bond default - stop automatic coupon and principal repayments",
    "instrumentEvent": {
      "instrumentEventType": "BondDefaultEvent",
      "effectiveDate": "2024-08-15T00:00:00.0000000+00:00"
    }
  }
]'

Note the following:

  • The instrumentEventId is a free string field that must uniquely identify this corporate action in the corporate action source.

  • The instrumentIdentifiers field uses a LUID to resolve to a bond instrument mastered in the LUSID Security Master, but you csn specify any unique identifier.

  • The effectiveDate refers to the settlement date of automatically-generated transactions at midnight (see below).

Examining the impact of a bond default event

Consider the example of a portfolio containing a single bond with an annual coupon payment on 15 August each year from 2020 until 2026. The principal repayment is due on the maturity date, 15 August 2026. LUSID would normally generate the following transactions in response to events emitted for this bond; note the settlement date of transactions is 15 August at midnight:

If we load a BondCouponEvent with "effectiveDate": "2024-08-15T00:00:01" (that is, a time component after midnight), then the bond coupon due on 15 August 2024 is paid:

To prevent the coupon on 15 August 2024, load a BondCouponEvent with "effectiveDate": "2024-08-15" (that is, exactly midnight):