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:
Where Total Accrual = Round(Notional * Coupon Rate * Days/365, 0) (this is the interest cashflow)
Where Total Accrual = (100 - Issue Price) /100 * Notional When "Apply Withholding Tax" is not selected, Maturity Amount is calculated as:
The amount is saved in the trade keyword MaturityAmount. |