Integrating Swift Corporate Action Events

This document describes how to integrate MT564-MT568 and seev.031, seev.035, seev.036, seev.039 Swift corporate action events.

A MT564 / seev.031 / seev.035 / seev.039 message is sent by an account servicer to the account holder. This message is used to provide account holder the detail of the corporate action event. It can be several MT564 / seev.031 / seev.035 / seev.039 notifications. The account holder can receive an incomplete corporate action notification replaced by another MT564 / seev.031 / seev.035 / seev.039 with complete information.
A MT566 / seev.036 message is sent by an account servicer to the account holder. This message is used to confirm the account holder that security or/and cash has been credited/debited to an account as a result of a corporate action event.
A MT568 corporate action narrative is a bi-directional swift message between an account servicer and account holder. This message is used to provide additional information about a corporate action event.

 

After a Swift format pre-check to integrate the Swift CA events into the system, the integration process generates a message, the swift message being stored as an advice document in the message.

Depending on the MT564 / seev.031 / seev.035 / seev.039 content and processing status, the integration can either create a new CA event or update an existing one with additional information.

MT566 / seev.036 and MT568 are integrated as additional information and linked to a corporate action event when the system is matching them to the existing ones. If they match any corporate action the system just creates a message.

There are two ways of integrating Swift CA events into the system:

Using the MESSAGE_MATCHING scheduled task: Swift CA events are saved as "TXT" files in a specific directory and processed by the scheduled task.
Using the Import Message engine: Swift CA events are processed in real time when they arrive in MQ series.

 

This document shows examples using the scheduled task.

 

1. Before you Begin

 

1.1 Incoming Message Validation Setup

The environment property VALIDATE_SWIFT_FORMAT should be set to true so that the format of the incoming message can be validated.

If the incoming message is not SWIFT compliant, the message is saved with the message attribute "Format Issue" containing the format exception. In this case the incoming message is not processed (no corporate action create / update).

When processing the incoming message in order to create or update the CA event, an issue can also occur because of missing reference data. In this case, the message attribute "Process Issue" is set on the message with a description of the issue.

Add the following values to domain "MsgAttributes" so that you can see those attributes:

CAReference: ID of the corporate action product
Process Issue: Attribute used to store the reason why the MT56X processing has failed
Process_Status: Content of TAG 25D::PROC//
Format Issue: Attribute used to store the reason why message is not swift compliant
Message_Function: Content of TAG 23G
ISIN: Content of TAG 35B
Swift_Event_Code: Content of TAG 22F::CAEV//
Payment_Date: Content of TAG 98A::PAYD// (else 98A::EFFD//)
Ex_Date: Content of TAG 98A::XDTE// (else 98A::MATU//)
Record_Date: Content of TAG 98A::RDTE//
AgentRef: Content of TAG 20C::SEME//
CA_Agent_Ref: Content of TAG 20C::CORP//
Period_Rate: Content of TAG 92A::INTP//
Fixed_Rate: Content of TAG 92A::INTR//
Quantity Type: Used to identify the sub-sequence CASHMOVE/SECMOVE
Del Type: Used to identify the direction of the movement (DEBIT/CREDIT)
Nominal Amount: Content of TAG 19B::PSTA//
Ccy: Settlement currency
Settle Date: Content of TAG 98A::POST//
Settle Date Time: Content of TAG 98C::POST//

/Document/CorpActnMvmntConf/CorpActnConfDtls/SctiesMvmntDtls/DtDtls/PstngDt or /Document/CorpActnMvmntConf/CorpActnConfDtls/CshMvmntDtls/DtDtls/PstngDt or /Document/CorpActnMvmntRvslAdvc/CorpActnConfDtls/SctiesMvmntDtls/OrgnlPstngDt or /Document/CorpActnMvmntRvslAdvc/CorpActnConfDtls/CshMvmntDtls/OrgnlPstngD

Div Reinvest Type: When Tag 22F::OPTF contains RNET, the message attribute 'Div Reinvest Type' is set to NET and the CA product is created as ACCRUAL/STOCK_DIV. When Tag 22F:OPTF contains RGRS, the message attribute 'Div Reinvest Type' is set to Gross and the CA product is created as ACCRUAL/TAX with CA_WHT_AGENT fees

Same logic applies for seev.31 / seev.36 messages for TAG /Document/CorpActnNtfctn/CorpActnOptnDtls/OptnFeatrs/Cd

ALTERNATE_AMOUNT (field Div Reinvest Price): Content of TAG 90B::PRPP//ACTU (/Document/CorpActnNtfctn/CorpActnOptnDtls/SctiesMvmntDtls/PricDtls/GncCshPricPdPerPdct/AmtPric/AmtPricTp or /Document/CorpActnNtfctn/CorpActnOptnDtls/CshMvmntDtls/PricDtls/GncCshPricPdPerPdct/AmtPric/AmtPricTp)
Buy Up Amount: Content of TAG 19B::BUYU// (/Document/CorpActnMvmntConf/CorpActnConfDtls/CshMvmntDtls/AmtDtls/BuyUpAmt)
Amort_Rate: Content of TAG 92A:RATE//
Pool_Factor: Content of TAG 92A:NWFC//
Redm_Price: Content of TAG 90A:OFFR//
ReversalReasonCode: Content of tag 24B::REVR for reversal payment messages
ReversalReasonNarrative: Content of tag 70D::REVR for reversal payment messages
TAXR: Content of TAG 92::TAXR for cash movement
TAXRSecurity: Content of TAG 92::TAXR for security movement
WITL: Content of TAG 92A:WITL for cash movement
WITLSecurity: Content of TAG 92A::WITL for security movement
TAXRAmount: Content of TAG 19B::TAXR for cash movement
TAXRAmountSecurity: Content of TAG 19B::TAXR for security movement
WITLAmount: Content of TAG 19B::WITL for cash movement
WITLAmountSecurity: Content of TAG 19B::WITL for security movement
Resulting Amount – Content of field 19B::RESU
Capital Gain Amount – Content of field 19B::CAPG
CINL Amount – Content of field 19B::CINL
Interest Amount – Content of field 19B::INTR
Market Claim Amount – Content of field 19B::MKTC
Net Cash Amount – Content of field 19B::NETT
Reinvestment Amount – Content of field 19B::REIN
Stamp Duty Amount – Content of field 19B::STAM
CashInLieuPercentageType – Content of field 90A::CINL - DISC, PRCT, PREM or YIEL (Allows checking if Cash In Lieu Payment Rate field is correctly calculated)
CashInLieuAmountType – Content of field 90B::CINL – ACTU, PRCT, PREM or PLOT (Allows checking if Cash In Lieu Payment Rate field is correctly calculated)
CashInLieuPrice: Content of TAG 90A::CINL
Fractional Part for Cash: Content of TAG 90B:CINL
Election Start Date: Content of TAG 69A PWAL
Election End Date: Content of TAG 69A PWAL

 

1.2 Verification of Cash In Lieu Payment Rate field

For 90A::CINL//DISC, Face Value – [Face Value*(DISC Value/100)]
For 90A:: CINL//PRCT, Face Value * (PRCT Value/100)
For 90A:: CINL//PREM, Face Value + [(Face Value*PREM Value/100)]
For 90A:: CINL//PREM, YIEL Value
For 90B::CINL//ACTU, ACTU Value
For 90B::CINL//PRCT, Face Value – DISC Value
For 90B::CINL//PREM, Face Value + PREM Value
For 90B::CINL//PLOT, PLOT Value

 

1.3 Trade Keywords

The following trade keywords must be added in the domain "tradeKeyword":

CAAgentAccountId: ID of the custodian settle account
CAAgentCashAccountId: ID of the cash settle account
CAReference: ID of the CA product
CAFailedTransfer: ID of the failed transfer for which a CA claim is needed
CAClaimReason: Reason why a CA claim trade is needed
CASource

 

The trade keywords impacted by a Corporate Action event can be copied from initial to new trade after a price change, by setting a domain value "keywords2CopyUponCA". The trade keywords listed in this domain value are copied to the new trades generated by the CA process only when the CA is applied by Open Trade.

 

The Following CA MODEL and SUBTYPES are impacted:

CA MODEL: TRANSFORMATION

SUBTYPES: ASSIMILATION, SPLIT, PRICE_CHANGE

 

The new trades that are linked to original trade via the trade keywords are:

- Same CAReference

- CASource

- Or LiquidableWith

 

This support is only provided to the Portfolio Swap product.

 

1.4 Domain Values Setup

Add the message type "INC_CA" to the domain "messageType".

 

Add the following values to the domain "incomingType":

Value = MT564 - Comment = INC_CA
Value = seev.031 - Comment = INC_CA
Value = seev.035 - Comment = INC_CA
Value = seev.039 - Comment = INC_CA
Value = MT566 - Comment = INC_CA
Value = seev.036 - Comment = INC_CA
Value = MT568 - Comment = INC_CA

 

You can add the following values to the domain "TradeMessageRef":

Value = MT566_AMOUNT_CONVERTED
Value = MT566_RATE
Value = MT566_AMOUNT
Value = MT566_CURRENCY

They are set as message attributes and trade keywords by the message workflow rule SetTradeMessageRef.

 

You can use the following values in domain “CAMatching” to specify the number of decimal places:

Name = CAMatching
Value = BondRoundingUnit
Comment = Number of decimal places after dividing by 100

Example:

If Comment = 4, Bond Rate = 33.45% and Swift Rate= 33.4521%, then after dividing by 100, Bond Rate = Swift Rate = 0.3345.

 

1.5 Workflow Setup

 

Message Workflow

Create the message workflow for the message subtype INC_CA.

 

Orig Status Action Resulting Status Use STP Rules Filter

INVALID

AUTHORIZE

VERIFIED

true

CheckIncomingFormat

MT566

INVALID

CANCEL

CANCELED

false

 

 

INVALID

REPROCESS

INVALID

false

ReprocessIncoming

 

MATCHED

UNDO

PEND_SETT_UPDATE

false

 

 

NONE

NEW

INVALID

false

 

 

PEND_SETT_UPDATE

AUTOINDEX

VER_SETT_UPDATE

true

SetXferMessageRef

 

PEND_SETT_UPDATE

MATCH

MATCHED

false

MatchIncomingSecurity

 

PEND_SETT_UPDATE

REMOVE

REVERSED

true

ReverseLinkedMessage

REVR Messages

PEND_SETT_UPDATE

REPROCESS

PEND_SETT_UPDATE

false

ReprocessIncoming

 

PEND_SETT_UPDATE

REVERSE

REVERSED

false

 

 

PEND_SETT_UPDATE RETRY CANCELED false RegenerateIncoming  

VERIFIED

AUTHORIZE

PEND_SETT_UPDATE

true

CheckIncomingProcess

MT566

VERIFIED

CANCEL

CANCELED

false

 

 

VERIFIED

UPDATE

PROCESSED

true

SetTradeMessageRef

MT566

VERIFIED

PROCESS

PROCESSED

true

CheckIncomingProcess

MT564

VERIFIED RETRY CANCELED false RegenerateIncoming  

VER_SETT_UPDATE

AUTOMATCH

MATCHED

true

MatchIncomingSecurity

 

VER_SETT_UPDATE

MATCH

Applied from the Security Matching window

MATCHED

false

MatchIncomingSecurity

 

VER_SETT_UPDATE

REVERSE

REVERSED

false

 

 

 

Rules description - They may need to be added to the domain "workflowRuleMessage":

CheckIncomingFormat - Only applies if environment property VALIDATE_SWIFT_FORMAT is true - During the MT56x integration process, the attribute "Format Issue" is set on the message with invalid format. This workflow rule returns true if the attribute "Format Issue" is empty, or false otherwise.
CheckIncomingProcess - Only applies if environment property VALIDATE_SWIFT_FORMAT is true - During the integration, the attribute "Process Issue" is set on the message if the incoming message cannot be processed (cannot generate/update a corporate action). This workflow rule returns true if the attribute "Process Issue" is empty, or false otherwise.
ReprocessIncoming - Rule to reprocess a message. Let suppose a reference data is missing in the system. The MT56x will stay in "INVALID" status. After fixing the missing reference data you can use the REPROCESS action to execute the ReprocessIncoming rule and reprocess the message.
ReverseLinkedMessage rule is used to apply the action REVERSE on the linked message in case MT566 REVR is matched.
SetXferMessageRef rule is used to store the message id as transfer attribute when incoming MT566 is successfully indexed. Action UPDATE must be available.
RegenerateIncoming - Rule to produce an event PSEventReProcessMessage that is consumed by the Import Message engine to regenerate the incoming message.

You need to add PSEventReProcessMessage to the domain eventClass. It needs to be consumed by the Import Message engine. If the Import Message engine is only used to process those types of events, you can run it with the engine parameter “config = noconfig”.

SetTradeMessageRef - Sets the message keywords defined in domain "TradeMessageRef" as trade keywords on CA trades.

 

Transfer Workflow

 

Orig Status Action Resulting Status Use STP Rules

NONE

NEW

PENDING

false

 

PENDING

AMEND

PENDING

false

 

PENDING

AUTHORIZE

VERIFIED

true

CheckNetting

PENDING

CANCEL

CANCELED

false

 

PENDING

EXECUTE

VERIFIED

false

SetKnownFlag

SETTLED

REVERSE

VERIFIED

false

UpdateCAAdjustBookLinkedXfer, UpdateCASecurityLinkedXfer

SETTLED

UNSPLIT

CANCELED

false

 

SETTLED

UPDATE

SETTLED

false

 

SPLIT

REVERSE

SPLIT

false

UpdateCAAdjustBookLinkedXfer, UpdateCASecurityLinkedXfer, UnSplitXfer

SPLIT

UPDATE

SPLIT

false

 

VERIFIED

AUTO_SETTLE

SETTLED

true

CheckToBeSettled, UpdateCAAdjustBookLinkedXfer, UpdateCASecurityLinkedXfer

VERIFIED

CAMCEL

CANCELED

false

 

VERIFIED

PARTIAL_SETTLE

SPLIT

false

UpdateCAAdjustBookLinkedXfer, UpdateCASecurityLinkedXfer

VERIFIED

SETTLE

SETTLED

false

UpdateCAAdjustBookLinkedXfer, UpdateCASecurityLinkedXfer, CheckToBeSettled, UpdateINDEVALLinkedXfer

VERIFIED

SPLIT

SPLIT

false

 

VERIFIED

UNSPLIT

CANCELED

false

 

VERIFIED

UPDATE

VERIFIED

false

 

 

Rules description - They may need to be added to the domain "workflowRuleTransfer":

UpdateCAAdjustBookLinkedXfer - Used to apply the same action (SETTLE or REVERSE in this transfer workflow) on transfers attached to the trading books trades.
UpdateCASecurityLinkedXfer- Used to apply the same action on security transfer of the CAAdjustBook. Thus the security transfer is automatically SETTLED (or CANCELED in case of REVR) once a MT566 is matched with the cash CA transfer.
UnSplitXfer - Used to REVERSE the transfers coming from a PARTIAL_SETTLE in case REVR MT566 is matched.
UpdateINDEVALLinkedXfer - Used to apply the SETTLE action on transfers coming from CA trades with Agent INDEVAL.

 

1.6 Product Code

The MT56x SWIFT documentation advises to use the product code ISIN as security code.

But in certain case you can find MT56x message using different security codes, for example:

:35B:/HK/SR000305

DRAGON HILL WULING

OPEN OFFER

 

We support ISIN, HK, and US. You can add product codes usingConfiguration > Product > Code, and set its value in the Equity Definition.

 

The logic for retrieving the product ID depends on field 94B.

 

Field 94B is not provided

1. Get the ISIN (field 35B code Word ISIN).

If there is only one product id in Calypso for this ISIN return the product id for the matching
If there is no product id return an error: “No security found for ISIN <ISIN>”

2. If there is more than one product id for this ISIN then get the Place of Safekeeping (field 94a code word SAFE) to return the country of deposit (to compare to the trading Country).

If only one record exists return the product id
Otherwise add the DENO to the matching key list:
If only one record exists return the product Id
Otherwise, select the product with product code specified in domain “mt564CustomCode”

 

Field 94B is provided

1. Get the trading Country (field 94B code word PLIS). This Place of listing is a MIC (standard code of 4 char in ISO15022 identifying an exchange). From the MIC (stored under the Legal Entity attribute MIC) return the country of the MarketPlace and compare it to the Trading Exchange of the product Id matching the ISIN.

If only one record (product Id) remains, use this product id for matching

2. Otherwise, get the denomination currency (field 11A code word DENO) and compare it to the product currency.

For all product id matched per ISIN + Trading Country, if with the currency only one record remains, return the product id
Otherwise, select the product with product code specified in domain “mt564CustomCode”

 

1.7 Additional Setup for Bonds

 

Nostro Accounts

On the Nostro accounts, you need to set the account attribute "XferAgentAccount" to the safekeeping account number (TAG :97A::SAFE// of the MT56X) so that the proper Nostro account and corresponding SDIs can be retrieved.

If several accounts have the same reference (case of AUTO accounts), we also parse the tag 94F to retrieve the country of the custodian to be mapped with the account attribute "SubcustodianISO".

The safekeeping account number is stored in the CA Agent Details upon integration, and in the CA trade keyword "CAAgentAccountId".

 

Cash Accounts

On the Cash accounts, you need to set the account attribute "XferAgentAccount" to the cash account number (97A::CASH in the sub-sequence E2 CASHMOVE-optional) so that the proper Cash account and corresponding SDIs can be retrieved.

The cash account number is stored in the CA Agent Details upon integration, and in the CA trade keyword "CAAgentCashAccountId".

 

CAAdjustBook Definition

MT566 must be matched with a global transfer that represents the amount settled with the agent. To do so, the system generates an additional CA trade on a CAAdjustBook.

Define the adjustment book, and set the adjustment book in the book attribute "CAAdjustBook" of all trading books.

 

Legal Entity Tolerance

Tolerance can be defined at sub-custodian, Agent or PO level (to be retrieved in this order). It can be an absolute (ccy is mandatory in that case) or relative amount. The Legal Entity Tolerance Window can be reached from the Legal Entity window.

Two types of tolerance are necessary:

CAAutomatic: case where the amount difference is acceptable and transfer should be matched automatically when processing the incoming MT566.
CAManual: case where the amount difference is not acceptable for automatic matching but acceptable for Manual matching (from the Security Matching window).

In both cases, the system will apply the action PARTIAL_SETTLE on the transfer. The action SETTLE is applied on transfers attached to all "trading book" CA trades but settle amount is not updated. Settle date should still reflect the real settle date on these underlying transfers. The action MATCH is applied on the MT566.

 

Matching Criteria for MT564 and MT566

Matching criteria for those messages are defined in the CA Matcher window (menu action refdata.CAMatcherConfigWindow).

It is mandatory to define at least the default date for each Swift Code.

 

2. Integration Process

The scheduled task MESSAGE_MATCHING is used to integrate MT56x messages into the system, process them and create CA events.

 

Attributes

Swift Message Delimiter - Message delimiter: {:5}.
Swift File Name - Name of the ."TXT" file to process.
InputDir - Location of the file - Example: C:\calypso\swiftmessages\
File Rename - True or false - If true the file is renamed after processing, or not renamed otherwise.
Gateway - Not used.
ExternalMessageType - Not used.

 

seev.031 messages are integrated based on main tag <CorpActnNtfctn>

seev.035 messages are integrated based on main tag <CorpActnMvmntPrlimryAdvc>

seev.039 messages are integrated based on main tag <CorpActnCxlAdvc>

 

Record Date and Ex-Dividend Date

If the record date is missing (:98A::RDTE//), the date contained in the field :98C::RDDT// in Sequence E Corporate Action Options (:16R:CAOPTN) is used to set the record date.

If there is no ex-dividend date (:98A::XDTE//), then the record date (:98A::RDTE//) is used to populate the ex-dividend date.

If both:98C::RDDT// and :98A::RDTE// are missing, the user will add the record date manually in the CA product making the CA option status = MANUAL.

 

2.1 Integration of Equity Corporate Actions

 

MT564 Notification Workflow

The system receives a MT564 and checks if there is an existing CA event with a "CAReference" equal to the MT564 Reference (tag 20C::CORP).

 

The CAReference already exists:

If the message is complete (tag 25D::PROC = COMP):

A new message is saved with the SWIFT message as advice document
The existing CA event is updated with Swift MT564 information
Agent information is populated into the Corporate Action - Agent tab
The message is linked to the existing CA event

If the message is not complete (tag 25D::PROC <> COMP)

A new message is saved with the SWIFT message as advice document
The existing CA event is NOT updated
The message is linked to the existing CA event

 

The CAReference does not exist:

The system checks if there is an existing CA event with:

An agent reference equal to the Swift message agent reference (tag 20C::SEM)
A CA Swift Code equal to the swift message event code (tag CAEV)
A CA ex date equal to the Swift message ex date (tag 98A::XDTE)

If so, it is the same process as when the CAReference already exists.

If not:

A new message is saved with the Swift message as advice document
A new CA event is saved using the Swift message information
Agent information is populated into the Corporate Action - Agent tab
The message is linked to the new CA event

 

When receiving the MT564 with field :23G:NEWM/COPY, the system updates the CA product with “Function of the Message”.

 

MT566 Confirmation and MT568 Narrative Workflow

The system receives a MT566 / MT568 and checks if there is a CA event with a "CAReference" equal to the MT566-MT568 Reference (tag 20C::CORP).

 

The CAReference already exists:

A new message is saved with the Swift message as advice document
The message is linked to the existing CA event

 

The CAReference does not exist:

The system checks if there is an existing CA event with:

An agent reference equal to the Swift message agent reference (tag 20C::SEM)
A CA Swift Code equal to the Swift message event code (tag CAEV)
A CA ex date equal to the Swift message ex date (tag 98A::XDTE)

If so, it is the same process as when the CAReference already exists.

If not:

A new message is saved with the Swift message as advice document
An exception task is generated to mention that the message is not linked to any CA event.

 

If field :20C::MITI// exists, it is saved in message attribute T2S_Ref.

 

2.2 Sample DVCA MT564 Notification

 

Swift Message

{1:F01HKMAHKHHAXXX6354508519}{2:O5641555101208CITIHKHXBXXX59954535991012072355N}{4:

:16R:GENL

:20C::CORP//39034104131

:20C::SEME//HK1034104133

:23G:NEWM

:22F::CAEV//DVCA

:22F::CAMV//MAND

:98C::PREP//20101207222107

:25D::PROC//COMP

:16S:GENL

:16R:USECU

:35B:ISIN BMG6873Y1176

PAK FAH YEOW INTL

HKD0.05

:16R:FIA

:94B::PLIS//EXCH/XHKG

:16S:FIA

:16R:ACCTINFO

:97A::SAFE//12345

:93B::TRAD//UNIT/1,

:16S:ACCTINFO

:16S:USECU

:16R:CADETL

:98A::RDTE//20110103

:98A::XDTE//20101230

:22F::DIVI//INTE

:16S:CADETL

:16R:CAOPTN

:13A::CAON//001

:22F::CAOP//CASH

:17B::DFLT//Y

:92F::GRSS//HKD0,019

:16R:CASHMOVE

:22H::CRDB//CRED

:98A::PAYD//20110201

:16S:CASHMOVE

:16S:CAOPTN

:16R:ADDINFO

:95P::MEOR//CITIHKHX

:16S:ADDINFO

-}{:5}

 

After processing the above MT564, a message is generated and the incoming message is attached to the message.

 

DVCA Corporate Action

Following the integration of the MT564, the following CA event is created and saved.

 

Details on the incoming message can be seen in the Incoming Message panel and Agent panel.

 

2.3 Sample Incomplete MT564 Notification

.

Swift Message

Assume you receive firstly an incomplete MT564 from your agent. In this example the payment date is OPEN

{1:F01HKMAHKHHAXXX6354508519}{2:O5641555101208CITIHKHXBXXX59954535991012072355N}{4:

:16R:GENL

:20C::CORP//39034104131

:20C::SEME//HK1034104133

:23G:NEWM

:22F::CAEV//DVCA

:22F::CAMV//MAND

:98C::PREP//20101207222107

:25D::PROC//PREC

:16S:GENL

:16R:USECU

:35B:ISIN BMG6873Y1176

PAK FAH YEOW INTL

HKD0.05

:16R:FIA

:94B::PLIS//EXCH/XHKG

:16S:FIA

:16R:ACCTINFO

:97A::SAFE//12345

:93B::TRAD//UNIT/1,

:16S:ACCTINFO

:16S:USECU

:16R:CADETL

:98A::RDTE//20110103

:98A::XDTE//20101230

:22F::DIVI//INTE

:16S:CADETL

:16R:CAOPTN

:13A::CAON//001

:22F::CAOP//CASH

:17B::DFLT//Y

:92F::GRSS//HKD0,019

:16R:CASHMOVE

:22H::CRDB//CRED

:98B::PAYD//OPEN

:16S:CASHMOVE

:16S:CAOPTN

:16R:ADDINFO

:95P::MEOR//CITIHKHX

:16S:ADDINFO

-}{:5}

 

After importing and processing the MT564, a new message is generated and the incoming message is attached to the message.

 

Corporate Action

A corporate action is created using the incoming message information.

The corporate action's Processing Status is PREC.

The Option Status is NOT_APPLICABLE because the payment date is missing.

A new Swift MT564 is received from the agent, and processed to update the information. A new message is generated and is linked to the existing CA event.

The Processing Status of the CA event moves from PREC to COMP.

The CA event is updated with the payment date.

The Option Status moves from NOT_APPLICABLE to APPLICABLE.

 

2.4 Sample MT566 Confirmation

 

Swift Message

The system receives a MT566 confirmation.

{1:F01HKMAHKHHAXXX6354508519}{2:O5661555101208CITIHKHXBXXX59954535991012072355N}{4:

:16R:GENL

:20C::CORP//DIV3437592

:20C::SEME//253147817

:20C::COAF// BI01593212345

:23G:NEWM

:22F::CAEV//DVCA

:16R:LINK

:13A::LINK//564

:20C::PREV//253147815

:16S:LINK

:16S:GENL

:16R:USECU

:97A::SAFE//98-0112441-05

:35B:ISIN JP3356500003 SHIMA SEIKI MANUFACTURING ORD

:93B::ELIG//UNIT/4600,

:93B::CONB//UNIT/4600,

:16S:USECU

:16R:CADETL

:98A::XDTE//20100925

:98A::RDTE//20101002

:98A::PAYD//20101004

:16S:CADETL

:16R:CACONF

:13A::CAON//001

:22F::CAOP//CASH

:92A::TAXR//15,

:16R:CASHMOVE

:22H::CRDB//CRED

:19B::GRSS//JPY69000,

:19B::TAXR//JPY10360,

:19B::NETT//JPY58640,

:19B::PSTA//JPY58640,

:98A::POST//20101004

:98A::VALU//20101004

:16S:CASHMOVE

:16S:CACONF

-}{:5}

 

A new message is created and linked to the existing corporate action event. The tag :20C::CORP//DIV3437592 is used to retrieve the proper corporate action.

 

Corporate Action

 

2.5 Sample MT568 Narrative

Assume you have the below corporate action event:

Agent CA reference is 39034104131.

 

Swift Message

The system receives a MT568:

{1:F01HKMAHKHHAXXX6330508501}{2:O5681400110228CITIHKHXBXXX59904535011102282100N}{4:

:16R:GENL

:20C::CORP//39034104131

:20C::SEME//HK1034104148

:23G:NEWM

:22F::CAEV//DVCA

:98C::PREP//20101207222107

:16R:LINK

:22F::LINK//WITH

:13A::LINK//564

:20C::PREV//HK1034104133

:16S:LINK

:16S:GENL

:16R:USECU

:97A::SAFE//12345

:35B:ISIN BMG6873Y1176

PAK FAH YEOW INTL

HKD0.05

:16S:USECU

:16R:ADDINFO

:70F::ADTX//

--------------- EVENT DETAILS -------------------

A CASH DIVIDEND HAS BEEN ANNOUNCED FOR THE ABOVE-MENTIONED SECURITY. .

INFORMATION PROVIDED IS BASED ON INFORMATION AVAILABLE TO THE CUSTODIAN/CLEARING AGENT. THE CUSTODIAN/CLEARING AGENT DOES NOT WARRANT THAT THE INFORMATION IT HAS RECEIVED IS ACCURATE

OR COMPLETE.

-------------- ACTION TO BE TAKEN ---------------

FOR INFORMATION ONLY NMSG/END

:16S:ADDINFO

-}{:5}

 

A new message is generated and is automatically linked to the corporate action having an agent CA reference equal to 39034104131.

 

Corporate Action

 

2.6 Integration of Bond Corporate Actions

 

MT564, MT566 and seev Messages Integration

The corporate action (CA) process for bonds works in two steps in the system: first the system creates the CA product from the bond cashflows, then the system applies this CA product to the positions (inventory and P&L positions) and creates the CA trades.

The system offers the possibility to:

Import MT564 messages that are indexed and reconciled to existing CA products
Import MT566 (NEWM and REVR) messages that are indexed and reconciled to existing CA transfers

 

When MT56X messages are imported, the system tries to index the incoming messages to existing CAs, using the following logic:

If a MT56X has already been imported for this CA:

When a MT56X message is imported, the system stores the CA Id (calypso reference) as a message attribute (CAReference) of the MT56X message. It means that if a MT56X is imported and TAG 20C::RELA is present, the system will retrieve the CA Id from the previously sent MT56X.
If TAG 20C::RELA is not present, the system can use the CA Agent Reference to link MT56X to a CA Id. The CA AGENT REFERENCE is provided in TAG 20C::CORP of the MT56X. The value of this TAG can be matched with the CA AGENT REFERENCE coming from the Agent details, the agent details being linked to the CA product in calypso.

 

If a MT56X has not already been imported:

If the system wasn't able to retrieve the CA product using TAG 20C::RELA or TAG 20C::CORP, then the system will look if a CA exists using several criteria:
The ex date (stored on CA product): Content of the field:98A::XDTE// (or 98A::MATU//)
CA Bond Model and subtype (stored on CA product): Content of the field 22F::CAEV//
ISIN (stored on Bond definition): Content of the field:35B:ISIN

 

Consistency checks are implemented to make sure the CA is in synch with the MT56X. If a check fails, the MT56X is still indexed to the CA but the MT56X is blocked in the workflow and ab exception is raised. The action REPROCESS with rule ReprocessIncoming can be used once the matching issue is fixed.

The fields to be matched when importing seev messages can be configured in the CASwiftEventCodeAttributes window under Trade Lifecycle > Corporate Action > CA Swift Event Code (menu action product.CASwiftEventCodeAttributesWindow).

 

MT566 NEWM Indexation to CA Trade/Transfer

The incoming MT566 is linked to an existing CA trade. The system retrieves a CA trade with the following conditions:

trade counterparty = SENDER of the message
trade counterparty role = Agent
trade status NOT CANCELED
trading book = CAAdjustBook (NB: the CAAdjustBook book attribute is mandatory and must be unique by PO)
same CAReference (ie same CA ID)
same custodian account. Agent account reference is provided in TAG 97A of the MT566 and can be used to retrieve the correspondent Settle Account in the system.

If a unique CA trade is found, the system will index the MT566 to a CA transfer, and apply the action SETTLE or PARTIAL_SETTLE if the amount is within the tolerance amount. The real settle date of the SETTLED transfer is updated with the content of TAG 98a::POST.

If no (or multiple) CA trade is found, the incoming message is indexed to the CA id, but not to the trade id. The user will have to manually match a transfer with the message using the Security Matching window.

 

MT566 REVR Processing

In case of reversal MT566 (23G = REVR), the system retrieves the previous message reference from TAG 20C::PREV (mandatory as per conditional rule C2 of swift doc) in order to link the reversal with the new MT566 (see field Msg Linked Id).

In case of reverse of perfect match, the system (MatchIncomingSecurity rule) applies the action REVERSE on the SETTLED transfer to move it back to VERIFIED.

In case of reverse of partial settlement (mismatch), the system applies the action REVERSE (rule UnSplitXfer) on the SPLIT transfer. As a consequence the SETTLED/FAILED child transfers are all CANCELED and the system creates a new transfer for the full amount.

In case previous NEWM MT566 is not indexed to a transfer, the system (rule ReverseLinkedMessage) applies the action REVERSE on the MT566 to move both NEWM and REVR in REVERSED status.

 

Security Matching Window and Manual Match

In case no eligible trade/transfer was found, the user will have to manually match incoming MT566 with CA transfers.

FilterSet with book = CAAdustBook must be defined to only load relevant transfers.

From the Calypso Navigator, navigate to Processing > Matching > Security Matching (menu action reporting.SecurityMatchingWindow) to bring up the Security Matching window.

MATCH button - Within CAManual tolerance: It is possible to define a CAManual tolerance type for manual matching. Manual tolerance can be defined at sub-custodian, Agent or PO level (to be retrieved in this order).
FORCE MATCH button: The user also has the possibility to force the match of incoming MT566. In that case, the system does not perform any consistency check. The system will apply the action MATCH on the message and SETTLE the selected transfer. The access permission Manual Match must be granted to the user.

 

CONV and PARI MT564 Processing

MT56x indexation and matching logic with CA product (for CONV and PARI) follows the current process of CA for Bonds.

When the MT564 is received,, if the CA does not exist, the incoming message is stopped by the workflow waiting for the CA to be created.

 

CONV

The conversion is handled on the Bond definition window.

The Convertible Panel must be used to define what would be the eligible target Equity.

Please refer to "Specifying Convertible Bonds" of the Calypso documentation Defining Bond Products to set up the convertible option and generate the related CA.

Notes:

On the Conversion Schedule panel, the Redemption Date will be the payment date and the Notification Date will be the Ex and the Record dates.
The field “Exercised?” must be set to Yes
The Bond Unit and Target Unit define the From and To Ratio

 

PARI

The assimilation is handled on the Bond definition window in the Special Panel.

The Assimilation Prd and the Assimilation Date must be filled in by the user

By default the Assimilation Date is the EX, the record and the payment date. They can be modified in the CA window after initial saving.

 

TEND, BIDS, EXOF and NOOF MT564 Processing

MT564 indexation to CA product for TEND, BIDS, EXOF and NOOF is a special process.

For these corporate actions, if no previous CA exists for the same event/ex-date/ISIN, the processing of a correct MT564 will issue a creation of a CA product as if it was manually created by an end user.

When MT564 messages are imported, the system tries to index the incoming messages to existing CAs, using the following criteria:

CA event type
ISIN
Ex-Date

If no CA is found then the system creates the CA product and the message is PROCESSED

 

MT566 NEWM Processing

MT566 are handle by the system depending on the constituent of the message.

 

CASHMOV processing

When the MT566 is composed of both Security and Cash or Cash only, the behavior is the same as the one for the standard CA for Bonds (INTEREST, REDEMPTION...).

Only one incoming message is saved, then the system tries to match the cash part (SETTLE or PARTIAL SETTLE) and then applies the same action the SECURITY Xfer of the related CA trade. The Security Matching window can be used to manually match these Xfers.

 

SECMOVE processing

When the MT566 is only composed of Security, the system split the MT566 in as many part as SECMOVE part. Several incoming messages are saved, one per ISIN.

The system then tries to perfectly match the number of securities and then apply the SETTLE action on the related Xfer of the CA trade.

 

MT566 REVR processing

The processing of the Revert MT566 which includes CASHMOV follows the same principle as standard MT566 for Bonds. For MT566 including SECMOVE the process is manual.

 

3. Integration Process for Sub-Accounts

Integration by sub-account is triggered if the sender LE attribute "UseSubBalance" is set to true.

Pre-Requisite configuration: CAAdjustment book per PO, attached to each trading book respectively, using the book attribute CAAdjustBook.

When processing the CA trades on the inventory position, the system creates a CA trade on the aggregated position per proprietary account, representing the sum of the CA trades entitlement per sub-account belonging to this proprietary account.

The incoming MT566 is indexed against the aggregated position per proprietary account.

Each CA trade against the CAAdjustment book and proprietary account generate transfer (s) to impact inventory position of Agent/Proprietary account/CAAdjustment book
Each CA trade against the trading book and the sub-accounts generate:
Transfers to impact inventory position of Agent/Sub-account/Trading book
Transfers in opposite direction to impact inventory position of Agent/Proprietary account/CAAdjustment book

At payment date of each CA, the inventory position of Agent/Proprietary account/CAAdjustment book is null.

 

The rule CAAdjustBookLinkedXfer applies the same action on the CA trade against the CAAdjustment book to the linked CA trades/transfers against the trading book.

 

4. Reconciling Eligible Positions with MT564

The rule PropagateMT564EligibleQuantity propagates quantity from the message attribute "Eligible", quantity type from the message attribute "EligibleQuantityType" and the incoming message ID. The below list of attributes is required to identify the corresponding CA trade and link them with the incoming MT564 message:

This will allow to identify (before Payment Date) any potential discrepancy between the balance provided in the incoming MT564 and the balance recorded, available in the CA Trade Keyword “CAEligibleQuantity” retrieved from Inventory Position, which will reduce the risk of failed settlements when receiving the MT566 on Payment Date.