Withholding Tax Generation

When you set the environment property SEC_WITHHOLDINGTAX=true, the withholding tax will be automatically withdrawn from the coupons, and reclaim fees will be automatically generated.

The setup is described below.

 

1. Bond Definition

Bonds are defined using Configuration > Fixed Income > Bond Product Definition.

In the Bond Definition window, select "Apply Withholding Tax" in the Market panel.

» You can click ... next to the Withholding Tax field to set up the withholding tax rates and reclaim rates per bond's country (country paying income) and position holder's country (country receiving income). It brings up the Withholding Tax Config window.

The Withholding Tax Config window can also be accessed from Configuration > Fees, Haircuts, & Margin Calls > Withholding Tax Config.

See Withholding Tax Rates Configuration for details.

 

2. Tax Authority Setup

You need to define a legal entity of role TaxAuthority that will receive the reclaim fee if any.

 

3. Processing Org Setup

A processing org could be exempt from paying the withholding tax.

Set the legal entity attribute IsExempt=Yes to exempt the processing org.

 

4. Withholding Tax Rates Configuration

The Withholding Tax Config window can be accessed from Configuration > Fees, Haircuts, & Margin Calls > Withholding Tax Config, or by clicking ... next to the Withholding Tax field in the Market panel of the Bond Definition window.

» Click New to add a new configuration, and enter the details in the Details area. The details are described below.
» Then click Save to save your changes. You can specify multiple rates for the same issuing country using static data filters to determine the context of application of the rates.

Note that if the Authorization mode is enabled, an authorized user must approve your entry, provided that "WithholdingTaxConfig" has been added to the classAuthMode domain.

 

Details

Fields

Description

Id

The ID is unique to each configuration. The system generates the ID when the configuration is saved.

Issuer Country

Select the country of the bond.

Holder Country

Select the country of residence of the processing org that purchased the bond.

Rate

Enter the withholding tax rate.

The withholding tax amount will be withdrawn from the coupon amount when the corporate actions are generated.

Reclaim Rate

Enter the reclaim rate if applicable.

The reclaim fee will be generated on the internal coupon CA for P&L impact, and on the agent coupon CA for payment to the Tax Authority.

Static Data Filter

Select a static data filter if applicable. This is mostly needed if you have multiple rates for the same issuer country.

You can also use the static data filter to restrict the corporate actions to which the withholding tax is applied.

The static data file must be defined with Groups = CA and must contain CA-related attributes.

Effective From

Effective To

Select a start date and end date for the configuration.

This applies if the rates change on a certain date.

TaxAuthority

Select the legal entity that will receive the reclaim fee if any - This is only used when a Reclaim Rate is set.

Date Rule

Select the date rule that determines the payment frequency of the reclaim fee if any - This is only used when a Reclaim Rate is set.

Custody

If Custody is checked, the CA process, when calculating the net interest amount, checks if the CA trade book has the attribute “Custody Book” set to true. If so, it selects the WHT config (if any) where the Holder Country is the CA trade’s client/counterparty country.

If Custody is not checked, the Holder Country is the country of the PO.

WHT Decimal

Enter the number of decimal places to round the withholding tax amount as needed.

Rounding

Select the rounding method for the withholding tax amount as needed.

 

5. Fee Definition

Reclaim fees are defined using Configuration > Fees, Haircuts, & Margin Calls > Fee Definition.

There is one fee for the PO to impact the P&L on the internal CA trade: It must be named RECLAIM.

 

There is another fee for the Tax Authority to generate a transfer on the Agent CA trade: It must be named RECLAIM_TAX.

 

 Ⓘ   [NOTE: You don't need to actually define a fee grid; they will use the Withholding Tax Rates Config]

 

6. Corporate Action Generation

From the Calypso Navigator, navigate to Trade Lifecycle > Corporate Action > Corporate Action.

Generate a coupon on the bond.

 

Internal Trade (for P&L impact purposes)

The Gross Amount shows the full coupon, and the Settlement Amount shows the coupon reduced by the withholding tax.

In the Fees panel, you can see the reclaim fee.

 

Agent Trade

Similarly, the Gross Amount shows the full coupon, and the Settlement Amount shows the full coupon reduced by the withholding tax.

In the Fees panel, you can see the reclaim fee paid to the tax authority.

 

If the settlement of the agent trade fails, a CA claim trade is generated with the Counterparty instead of the Agent trade.

You can use the domain applyWHTClaimSameCountry to manage the application of Withholding Tax in case of CA claim trade generated by a failed transfer:

If the domain is not configured, WHT is applied on CA trade with Counterparty.
If the domain contains Value = true, WHT is applied on CA trade with Counterparty only if issuer's country = holder's country.
If the domain contains Value = false, no WHT is applied on CA trade with Counterparty.

 

7. Accounting Setup

The following accounting events allow generating postings for the WHT:

WHT Amount = Quantity * CA Unit Amount * WHT Rate
Net WHT Amount = Quantity * CA Unit Amount * (WHT Rate - Reclaim Rate)
Full Coupon = Quantity * CA Unit Amount
Refund Amount = Quantity * CA Unit Amount * Reclaim Rate

 

Accounting Events

Dates

Amount

Triggering Events

Properties

FULL_COUPON

To book the amount of the full coupon in case of WHT (coupon corporate action).

If there is no WHT, FULL_COUPON = INTEREST.

Booking Date - Today or coupon payment date, whichever is later

Effective Date - Coupon end date

Full Coupon amount to be paid by agent

LIQUIDATED_POSITION

UNLIQUIDATED_POSITION

Retroactivity - FULL

Booking Type - N/A

Event Class - BALANCE

Event Property - NONE

NET_WITHHOLDINGTAX

To book the amount of the withholding tax amount less the reclaim amount.

Booking Date - Today or coupon payment date, whichever is later

Effective Date - CA trade settle date

Full coupon amount * (WHT rate – Reclaim rate)

LIQUIDATED_POSITION

UNLIQUIDATED_POSITION

Retroactivity - FULL

Booking Type - N/A

Event Class - REALIZED

Event Property - NONE

WITHHOLDINGTAX

To book the WHT tax amount to be deducted.

Booking Date - Today or coupon payment date, whichever is later

Effective Date - Coupon end date

WHT amount = Full coupon * WHT rate

LIQUIDATED_POSITION

UNLIQUIDATED_POSITION

Retroactivity - FULL

Booking Type - N/A

Event Class - BALANCE

Event Property - NONE

RECLAIM_TAX

To book the tax amount to be reclaimed.

Booking Date - Today or coupon payment date, whichever is later

Effective Date - CA trade settle date

Full coupon amount * Reclaim rate

LIQUIDATED_POSITION

UNLIQUIDATED_POSITION

Retroactivity - FULL

Booking Type - N/A

Event Class - REALIZED

Event Property - NONE

 

8. Prepaid Withholding Tax and Tax Allowance

Withholding tax can also be prepaid on the trades by the counterparty.

This requires the following setup.

 

8.1 Counterparty Setup

The withholding tax rate is based on counterparty and the bond's country.

You need to define the following legal entity attributes:

LegalEntityTaxRate_<COUNTRY> where <COUNTRY> is the bond's country.

They contain the withholding tax rate in percentage.

Example:

 

8.2 Fee Definitions

 

WITHHOLDINGTAX_PREPAID

You need to set:

Role = CounterParty
Default Calculator = FeeGrid
Settlement Amount = Checked
Property PrepaidWHT = true

 

TAX_ALLOWANCE

You need to set:

Role = CounterParty
Default Calculator = FeeGrid
Settlement Amount = Checked
Property TaxAllowance = true

 

WITHHOLDINGTAX_REALIZED

Used for redemptions.

 

8.3 Fee Grid Configurations

 

WITHHOLDINGTAX_PREPAID

You can use the following variables:

TradeAccrual correspond to the Accrual field of the trade.

LegalEntityWHT gets the WHT rate from legal entity attribute LegalEntityTaxRate_<COUNTRY>.

 

TAX_ALLOWANCE

 

WITHHOLDINGTAX_REALIZED

You can use the following variable:

WHTRate gets the WHT rate from the withholding tax configuration.

 

8.4 Pricer Measures

You can add the following pricer measures:

 

WITHHOLDINGTAX_PREPAID (fee pricer measure)

Class Name = tk.pricer.PricerMeasureGenericFee

 

TAX_ALLOWANCE (fee pricer measure)

Class Name = tk.pricer.PricerMeasureGenericFee

 

WITHHOLDINGTAX_REALIZED (fee pricer measure)

Class Name = tk.pricer.PricerMeasureGenericFee

 

ACCRUAL_WHT returns the amount of WHT for the ACCRUAL pricer measure (based on Withholding Tax Configuration rate)

ID = 918

Class Name = tk.pricer.calculators.PricerMeasureBond

 

ACCRUAL_SETTLE_DATE_WHT returns the amount of WHT for the ACCRUAL_SETTLE_DATE pricer measure (based on Withholding Tax Configuration rate)

ID = 919

Class Name = tk.pricer.calculators.PricerMeasureBond

 

Accounting Events

You can add the following accounting events:

WITHHOLDINGTAX_PREPAID

TAX_ALLOWANCE

WITHHOLDINGTAX_REALIZED

ACCRUAL_WHT

ACCRUAL_SETTLE_DATE_WHT

ACCRUAL_REAL_WHT returns the amount of WHT for the ACCRUAL_REAL accounting event (based on Withholding Tax Configuration rate)

 

9. Withholding Tax Trade Window Panel

In the Bond Trade window and the Money Market Trade window, an optional Withholding Tax panel is available for displaying the withholding tax amounts.

From the trade window, choose View > Withholding Tax to add the Withholding Tax panel.

 

Withholding Tax Details

Fields

Description

Withholding Tax

Sum of fees with fee definition property PrepaidWHT = true.

Tax Allowance

Sum of fees with fee definition property TaxAllowance = true.

Post-Tax Settlement Amount

Post-Tax Settlement Amount = Settlement Amount + Withholding Tax + Tax Allowance

Maturity Amount

Only displayed for BondMMInterest and BondMMDiscountWithAI.

Whether or not the "Apply Withholding Tax" checkbox is selected on the bond definition Market panel determines if the tax amount is removed or not.

When "Apply Withholding Tax" is selected, Maturity Amount is calculated as:

For BondMMInterest: Maturity Amount = Notional + Total Accrual - RoundDown(Total Accrual * WHT Rate)

Where Total Accrual = Round(Notional * Coupon Rate * Days/365, 0) (this is the interest cashflow)

For BondMMDiscountWithAI: Maturity Amount = Notional - RoundDown(Total Accrual * WHT Rate)

Where Total Accrual = (100 - Issue Price) /100 * Notional

When "Apply Withholding Tax" is not selected, Maturity Amount is calculated as:

For BondMMInterest: Maturity Amount = Notional + Total Accrual
For BondMMDiscountWithAI: Maturity Amount = Notional

The amount is saved in the trade keyword MaturityAmount.