Transfer Pricing Algorithm WIP: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 170: | Line 170: | ||
ATP Excess Interest Carry-forward N = €500 000 | ATP Excess Interest Carry-forward N = €500 000 | ||
ΔPBT_Thin-Cap = –€500 000 | ΔPBT_Thin-Cap = –€500 000 | ||
New_ATP_PBT = | New_ATP_PBT = ATP_PBT – €500 000 + ΔPBT_WHT |
Revision as of 16:18, 13 June 2025
Thin-Capitalisation (“Thin-Cap”) module
Context
This module runs after the TP-convergence loop and before the withholding-tax stage. It caps interest deductibility, adjusts ATP PBT, and manages an interest carry-forward bucket.
Data structure additions
Data
Role | Label | Definition | Typing | Multiplicity behaviour | Mandatory |
---|---|---|---|---|---|
Financials | ATP Debt – Related-party | Average debt owed to associated enterprises | Couple (Decimal; ISO 3 Currency) | Aggregate | No (=0 if absent) |
Financials | ATP Debt – Third-party | Average debt owed to independent lenders | Couple (Decimal; ISO 3 Currency) | Aggregate | No (=0 if absent) |
Financials | ATP Equity – Thin-Cap | Equity figure prescribed by local thin-cap rules | Couple (Decimal; ISO 3 Currency) | Aggregate | Yes if Thin-Cap in scope |
Financials | ATP Net Interest Expense | Interest expense – interest income (post-TP) | Couple (Decimal; ISO 3 Currency) | Aggregate | Yes if Thin-Cap in scope |
Financials | ATP EBITDA | EBITDA (after TP Adjustment) | Couple (Decimal; ISO 3 Currency) | Aggregate | Only for EBITDA-based rules |
Financials | ATP Excess Interest Carry-forward N-1 | Disallowed interest still available | Couple (Decimal; ISO 3 Currency) | Aggregate | No (default 0) |
Rules
(multiple rows per entity allowed; tightest cap wins)
Role | Label | Definition | Typing / Domain | Multiplicity behaviour | Mandatory |
---|---|---|---|---|---|
Thin-Cap | ATP Thin-Cap in scope | Flags whether any thin-capitalisation restriction applies to the entity. | Boolean | One per segment | No, default False |
Thin-Cap | ATP Thin-Cap rule type | Chooses the statutory approach. • Fixed-Ratio – a cap expressed as A / B ≤ Threshold (covers debt-equity, interest-EBITDA, interest-assets, etc.). • Safe-Harbour-None – no mechanical limitation; deduct all interest. |
Enum:{Fixed-Ratio; Safe-Harbour-None} | Several rows may coexist (e.g. 30 % EBITDA AND 3 : 1 debt-equity). | Yes if “in scope” is True |
Thin-Cap | ATP Fixed-Ratio numerator | Variable A in the ratio to be tested (what is limited). | Enum:{NetInterestExpense; DebtRelatedParty; DebtTotal} | One per Fixed-Ratio row | Yes for Fixed-Ratio |
Thin-Cap | ATP Fixed-Ratio denominator | Variable B that forms the economic base. | Enum:{EBITDA; EBIT; PBT; EquityThinCap; TotalAssets; TaxableIncome; OperatingCashFlow} | One per Fixed-Ratio row | Yes for Fixed-Ratio |
Thin-Cap | ATP Fixed-Ratio threshold | Numeric limit T. Enter 0 – 1 for percentage caps (e.g. 0.30 = 30 %) or > 1 for pure ratios (e.g. 3 = 3 : 1). |
Decimal | One per Fixed-Ratio row | Yes for Fixed-Ratio |
Thin-Cap | ATP De-minimis interest threshold | Absolute amount of net interest always deductible before applying any ratio test (e.g. €3 m in ATAD). | Couple (Decimal; ISO 3 Currency) | Several rows allowed (but typically one) | No, default 0 |
Thin-Cap | ATP Group-Ratio election | True if the taxpayer elects to substitute the Group-Ratio cap in this row (ATAD art. 4 §5; UK CIR). | Boolean | One per Fixed-Ratio row | No, default False |
Thin-Cap | ATP Group-Ratio % | Group net-interest ÷ group EBITDA used when the election above is True. | Percentage | One per Fixed-Ratio row | Yes if election = True |
Thin-Cap | ATP Excess-Interest carry-forward period | Number of years disallowed interest can be carried forward (FIFO bucket; ≥ 5 y for ATAD countries, ∞ allowed). | Integer (years) | One per segment | No, default ∞ |
Taxation / Output
Role | Label | Definition |
---|---|---|
Taxation | ATP Disallowed Interest N | Interest denied in current year (−PBT) |
Taxation | ATP Excess Interest Carry-forward N | Disallowed interest carried forward |
Computational step – Thin-Cap limitation
This step is executed entity-by-entity at the Declaring-Entity level.
- Pre-checks
- If
Thin-Cap in scope = False
⇒ skip module.
- If
- Net interest expense (NI) after de-minimis
NI = max(0 ; ATP Net Interest Expense − ATP De-minimis interest threshold)
- Allowable Interest Ceiling (AIC)
- For each rule row i where rule type = Fixed-Ratio:
- Fetch
Numerator_i ← choose(NumeratorTag_i , data block)
- Fetch
Denominator_i ← choose(DenominatorTag_i , data block)
- if
Denominator_i = 0
→ raise validation error Threshold_i ← ATP Fixed-Ratio threshold_i
Cap_i ← Threshold_i × Denominator_i
- if
NumeratorTag_i ∈ { NetInterestExpense }
:AIC_i = min( NI , Cap_i )
- if
NumeratorTag_i ∈ { DebtRelatedParty ; DebtTotal }
:AllowedDebt = Cap_i
ActualDebt = Numerator_i
AllowedInterest = NI × AllowedDebt / ActualDebt
(if ActualDebt > 0)AIC_i = min( NI , AllowedInterest )
- if
Group-Ratio election_i = True
(Apply group-ratio uplift if elected on this row):GRCap = Group-Ratio %_i × Denominator_i
AIC_i = min( NI , max( Cap_i , GRCap ) )
- Fetch
- Combine multiple rows:
AIC_final = MIN( AIC_i for all Fixed-Ratio rows )
- If the entity has only one row and
ATP Thin-Cap rule type = Safe-Harbour-None
:AIC_final = NI
- For each rule row i where rule type = Fixed-Ratio:
- Current-year disallowance
Disallowed_Before_Carry = max(0 ; NI − AIC_final)
- Utilise carry-forward bucket (FIFO single pool)
Headroom = max( 0 ; AIC_final – ( NI – Disallowed_Before_Carry ) )
Allowed_from_carry = min(ATP Excess Interest Carry-forward N-1 ; Headroom)
Disallowed_N = Disallowed_Before_Carry − Allowed_from_carry
- Update variables
ΔPBT_Thin-Cap = − Disallowed_N
ATP Disallowed Interest N = Disallowed_N
ATP Excess Interest Carry-forward N = Disallowed_N
(drops FIFO after ‘‘carry-forward period’’)- Replace
ATP_PBT
downstream with:New_ATP_PBT = ATP PBT + ΔPBT_Thin-Cap + ΔPBT_WHT (paid + due)
Interaction with other modules
- TP convergence – uses after TP Ajustment interest; does NOT trigger another TP loop.
- Withholding-tax – unchanged (WHT on gross interest).
- Tax-loss computation – starts from
New_ATP_PBT
. - Optimiser – may vary Debt/Equity Ratio or other Fixed Ratio, interest rate or Group-Ratio election. ΔPBT_Thin-Cap feeds into the objective function.
Example – Fixed-ratio cap that creates a disallowance
Data
Role | Label | Value |
---|---|---|
Matching | ATP Declaring Entity segmentation | ("Entity"; "FR001") |
Financials | ATP Debt – Related-party | (15 000 000; EUR) |
Financials | ATP Debt – Third-party | (10 000 000; EUR) |
Financials | ATP Equity – Thin-Cap | (8 000 000; EUR) |
Financials | ATP Net Interest Expense | (4 000 000; EUR) |
Financials | ATP EBITDA | (10 000 000; EUR) |
Financials | ATP Excess Interest Carry-forward N-1 | (0; EUR) |
Rules
Role | Label | Value |
---|---|---|
Thin-Cap | ATP Thin-Cap in scope | True |
Thin-Cap | ATP Thin-Cap rule type | Fixed-Ratio |
Thin-Cap | ATP Fixed-Ratio numerator | NetInterestExpense |
Thin-Cap | ATP Fixed-Ratio denominator | EBITDA |
Thin-Cap | ATP Fixed-Ratio threshold | 0.30 |
Thin-Cap | ATP De-minimis interest threshold | (500 000; EUR) |
Thin-Cap | ATP Group-Ratio election | False |
Thin-Cap | ATP Excess-Interest carry-forward period | 5 |
Thin-Cap computation
- Step 1 – Pre-checks
ATP Thin-Cap in scope = TRUE so continue with the following steps
- Step 2 – De-minimis
ATP Net Interest Expense = €4 000 000 ATP De-minimis interest threshold = €500 000 NI = max(0 ; ATP Net Interest Expense − ATP De-minimis interest threshold) = €3 500 000
- Step 3 – Fixed-ratio cap
Cap = 0.30 × EBITDA = €3 000 000 AIC_final = min(NI , Cap) = €3 000 000
- Step 4 – Disallowance before carry-forward
Disallowed_Before_Carry = NI − AIC = €500 000
- Step 5 – Utilise carry-forward
Prior bucket = €0 ⇒ Allowed_from_carry = €0 Disallowed_N = €500 000
- Step 6 – Outputs
ATP Disallowed Interest N = €500 000 ATP Excess Interest Carry-forward N = €500 000 ΔPBT_Thin-Cap = –€500 000 New_ATP_PBT = ATP_PBT – €500 000 + ΔPBT_WHT