Transfer Pricing Algorithm WIP: Difference between revisions

From Wiki Algonomia
Jump to navigation Jump to search
(Added and modified WIP page for Thin-Capitalisation in TP Algorithm)
(added example (Canada) of when multiple rows can coexist in Rules)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
(WIP)
== Thin-Capitalisation (“Thin-Cap”) module ==
== Thin-Capitalisation (“Thin-Cap”) module ==


=== Context ===
=== Context ===
This module plugs into the Transfer Pricing Algorithm '''''<u>after</u>''''' the TP-convergence loop and '''<u>before</u>''' the withholding-tax stage, adjusting ATP PBT and creating carry-forward variables where interest is disallowed.
This module runs '''<u>after</u>''' the TP-convergence loop and '''<u>before</u>''' the withholding-tax stage
It caps interest deductibility, adjusts '''ATP PBT''', and manages an interest carry-forward bucket.


=== Data structure additions ===
=== Data structure additions ===
Line 10: Line 9:
{| class="wikitable sortable mw-collapsible mw-collapsed"
{| class="wikitable sortable mw-collapsible mw-collapsed"
|+Input Data Points – Thin-Cap
|+Input Data Points – Thin-Cap
!Role
!Role!!Label!!Definition!!Typing!!Multiplicity behaviour!!Mandatory
!Label
!Definition
!Typing
!Multiplicity behavior
!Mandatory
|-
|-
|Financials
|Financials||ATP Debt – Related-party||Average debt owed to associated enterprises||Couple (Decimal; ISO 3 Currency)||Aggregate||No (=0 if absent)
|ATP Debt – Related-party
|Average book value of debt owed to associated enterprises during the period
|Couple (Decimal;ISO 3 Currency Code)
|If multiple defined, are aggregated for computation
|No, if absent and Thin-Cap in scope, assumed 0
|-
|-
|Financials
|Financials||ATP Debt – Third-party||Average debt owed to independent lenders||Couple (Decimal; ISO 3 Currency)||Aggregate||No (=0 if absent)
|ATP Debt – Third-party
|Average book value of debt owed to independent lenders
|Couple (Decimal;ISO 3 Currency Code)
|If multiple defined, are aggregated for computation
|No, if absent, assumed 0
|-
|-
|Financials
|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
|ATP Equity – Thin-Cap
|Book or tax equity relevant for thin-cap calculations (may differ from accounting equity)
|Couple (Decimal;ISO 3 Currency Code)
|If multiple defined, are aggregated for computation
|Yes, if Thin-Cap in scope; otherwise optional
|-
|-
|Financials
|Financials||ATP Net Interest Expense||Interest expense – interest income (post-TP)||Couple (Decimal; ISO 3 Currency)||Aggregate||Yes if Thin-Cap in scope
|ATP Net Interest Expense
|Net interest expense (interest expense – interest income) *after* TP adjustments, *before* thin-cap limitation
|Couple (Decimal;ISO 3 Currency Code)
|If multiple defined, are aggregated for computation
|Yes, if Thin-Cap in scope
|-
|-
|Financials
|Financials||ATP EBITDA||EBITDA (after TP Adjustment)||Couple (Decimal; ISO 3 Currency)||Aggregate||Only for EBITDA-based rules
|ATP EBITDA
|Earnings before interest, tax, depreciation & amortisation (post-TP, pre-thin-cap)
|Couple (Decimal;ISO 3 Currency Code)
|If multiple defined, are aggregated for computation
|No, required only for EBITDA-based rules
|-
|-
|Financials
|Financials||ATP Excess Interest Carry-forward N-1||Disallowed interest still available||Couple (Decimal; ISO 3 Currency)||Aggregate||No (default 0)
|ATP Excess Interest Carry-forward N-1
|Disallowed interest from the previous year still available for future deduction
|Couple (Decimal;ISO 3 Currency Code)
|If multiple defined, are aggregated for computation
|No, default 0
|}
|}


==== Rules ====
==== Rules ====
<small>(multiple rows per entity allowed; tightest cap wins)</small>
{| class="wikitable sortable mw-collapsible mw-collapsed"
{| class="wikitable sortable mw-collapsible mw-collapsed"
|+Input Rules – Thin-Cap
|+Input Rules – Thin-Cap
!Role
!Role!!Label!!Definition!!Typing / Domain!!Multiplicity behaviour!!Mandatory
!Label
|-
!Definition
|Thin-Cap||ATP Thin-Cap in scope||Flags whether any thin-capitalisation restriction applies to the entity.||Boolean||One per segment||No, default False
!Typing
!Multiplicity behavior
!Mandatory
|-
|-
|Thin-Cap
|Thin-Cap||ATP Thin-Cap rule type||Chooses the statutory approach.<br>• '''Fixed-Ratio''' – a cap expressed as A / B ≤ Threshold (covers debt-equity, interest-EBITDA, interest-assets, etc.).<br>• '''Safe-Harbour-None''' – no mechanical limitation; deduct all interest.||Enum:{Fixed-Ratio; Safe-Harbour-None}||Several rows may coexist when the jurisdiction has multiple interest expense limitation rules. For example, Canada [https://laws-lois.justice.gc.ca/eng/acts/I-3.3/section-18.html Income Tax Act 18.4] mentions "... on outstanding debts to specified non-residents that ... exceeds (ii) 1.5 times the equity amount of the corporation or trust for the year ...", while [https://www.canada.ca/en/revenue-agency/programs/about-canada-revenue-agency-cra/compliance/excessive-interest-financing-expenses-limitation-rules.html Excessive interest and financing expenses (IFE) limitation rules] contained in 18.2 and 18.21 mentions that "The cap on net IFE is equal to a fixed ratio of adjusted taxable income (ATI): 30% ..." ||Yes if “in scope” is True
|ATP Thin-Cap rule type
|Specifies which national limitation applies
|Single choice Enum : {Debt-Equity ; Fixed-Ratio ; EBITDA ; Group-Ratio ; Safe-Harbour-None}
|Only one value acceptable per analysis segment
|Yes if any entity flagged Thin-Cap in scope
|-
|-
|Thin-Cap
|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
|ATP Thin-Cap in scope
|Flags whether thin-capitalisation rules apply to the entity
|Boolean
|Only one value acceptable per segment
|No, default False
|-
|-
|Thin-Cap
|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
|ATP Debt/Equity Safe-Harbour ratio
|Maximum Debt ÷ Equity allowed (e.g. 3 : 1) for Debt-Equity type
|Decimal
|Only one value acceptable per segment
|Mandatory for Debt-Equity rules
|-
|-
|Thin-Cap
|Thin-Cap||ATP Fixed-Ratio threshold||Numeric limit '''T'''.<br>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
|ATP Fixed-Ratio % EBITDA
|Maximum percentage of EBITDA deductible as net interest (e.g. 30 %)
|percentage
|Only one value acceptable per segment
|Mandatory for Fixed-Ratio / EBITDA rules
|-
|-
|Thin-Cap
|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
|ATP De-minimis interest threshold
|Amount of net interest always deductible regardless of ratios
|Couple (Decimal;ISO 3 Currency Code)
|Only one value acceptable per segment
|Optional – default 0
|-
|-
|Thin-Cap
|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
|ATP Group-Ratio election
|Allows use of a group ratio if more favourable than fixed ratio
|Boolean
|Only one value acceptable per segment
|Optional – default False
|-
|-
|Thin-Cap
|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
|ATP Group-Ratio %
|Group net-interest ÷ EBITDA ratio when election taken
|percentage
|Only one value acceptable per segment
|Required if Group-Ratio election = True
|-
|-
|Thin-Cap
|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 ∞
|ATP Excess Interest carry-forward period
|Number of years disallowed interest may be carried forward
|Integer
|Only one value acceptable per segment
|Optional – default ∞
|}
|}


Line 130: Line 52:
{| class="wikitable"
{| class="wikitable"
|+New Output Data Points
|+New Output Data Points
!Role
!Role!!Label!!Definition
!Label
!Definition
|-
|-
|Taxation
|Taxation||ATP Disallowed Interest N||Interest denied in current year (−PBT)
|ATP Disallowed Interest N
|Net interest expense denied in the current year (negative adjustment to ATP PBT)
|-
|-
|Taxation
|Taxation||ATP Excess Interest Carry-forward N||Disallowed interest carried forward
|ATP Excess Interest Carry-forward N
|Disallowed interest to carry forward to future years, after utilisation tests
|}
|}


=== Computational step – Thin-Cap limitation ===
=== Computational step – Thin-Cap limitation ===
This step is performed '''entity-by-entity''' at the “Declaring Entity” level.
This step is executed '''entity-by-entity''' at the Declaring-Entity level.
 
# '''Pre-checks'''
#* If <code>Thin-Cap in scope = False</code> ⇒ skip module. 
# '''Net interest expense (NI) after de-minimis'''
#* <code>NI = max(0 ; ATP Net Interest Expense − ATP De-minimis interest threshold)</code>
# '''Allowable Interest Ceiling (AIC)'''
#* For each rule row i where rule type = Fixed-Ratio: 
#** Fetch <code>Numerator_i ← choose(NumeratorTag_i , data block)</code>
#** Fetch <code>Denominator_i ← choose(DenominatorTag_i , data block)</code>
#** if <code>Denominator_i = 0</code> → raise validation error
#** <code>Threshold_i ← ATP Fixed-Ratio threshold_i</code>
#** <code>Cap_i ← Threshold_i × Denominator_i</code>
#** if <code>NumeratorTag_i ∈ { NetInterestExpense }</code>:
#*** <code>AIC_i = min( NI , Cap_i )</code>
#** if <code>NumeratorTag_i ∈ { DebtRelatedParty ; DebtTotal }</code>:
#*** <code>AllowedDebt  = Cap_i</code>
#*** <code>ActualDebt    = Numerator_i</code>
#*** <code>AllowedInterest = NI × AllowedDebt / ActualDebt</code>  (if ActualDebt > 0)
#*** <code>AIC_i = min( NI , AllowedInterest )</code>
#** if <code>Group-Ratio election_i = True</code> (Apply group-ratio uplift if elected on this row):
#*** <code>GRCap = Group-Ratio %_i × Denominator_i</code>
#*** <code>AIC_i = min( NI , max( Cap_i , GRCap ) )</code>
#* Combine multiple rows: 
#** <code>AIC_final = MIN( AIC_i for all Fixed-Ratio rows )</code>
#** If the entity has only one row and <code>ATP Thin-Cap rule type = Safe-Harbour-None</code>:
#*** <code>AIC_final = NI</code>
# '''Current-year disallowance'''
#* <code>Disallowed_Before_Carry = max(0 ; NI − AIC_final)</code>
# '''Utilise carry-forward bucket  (FIFO single pool)'''
#* <code>Headroom = max( 0 ; AIC_final – ( NI – Disallowed_Before_Carry ) )</code> 
#* <code>Allowed_from_carry = min(ATP Excess Interest Carry-forward N-1 ; Headroom)</code> 
#* <code>Disallowed_N = Disallowed_Before_Carry − Allowed_from_carry</code>
# '''Update variables'''
## <code>ΔPBT_Thin-Cap = − Disallowed_N</code>
## <code>ATP Disallowed Interest N = Disallowed_N</code>
## <code>ATP Excess Interest Carry-forward N = Disallowed_N</code> (drops FIFO after ‘‘carry-forward period’’)
## Replace <code>ATP_PBT</code> downstream with: <code>New_ATP_PBT = ATP PBT + ΔPBT_Thin-Cap + ΔPBT_WHT (paid + due)</code>


# '''Compute the Allowable Interest Ceiling (AIC)'''
#* Debt-Equity rule: AIC = min(Net Interest (NI) ; (Debt/Equity Safe-Harbour × ATP Equity – Thin-Cap))
#* Fixed-Ratio / EBITDA rule: <nowiki>AIC = min(NI ; Fixed-Ratio % × ATP EBITDA)</nowiki>
#* Group-Ratio election: substitute the higher of Fixed-Ratio % and Group-Ratio % in the above.
# '''Apply the de-minimis threshold'''
#* If <nowiki>NI ≤ De-minimis</nowiki> → entire NI is deductible → skip to step 4.
# '''Determine current-year disallowance'''
#* <nowiki>Disallowed_N = max(0 ; NI – AIC)</nowiki> 
# '''Utilise prior-year carry-forward:'''
#* <nowiki>Allowed_from_carry = min(Excess Carry-forward N-1 ; AIC – (NI – Disallowed_N))</nowiki>
#* <nowiki>Disallowed_N = Disallowed_N – Allowed_from_carry</nowiki> 
# '''Update variables''':
## <nowiki>ΔPBT_Thin-Cap = (-1) × Disallowed_N</nowiki> 
## <nowiki>ATP Disallowed Interest N = Disallowed_N</nowiki> 
## <nowiki>ATP Excess Interest Carry-forward N = Disallowed_N</nowiki> (subject to carry-forward period) 
## Replace <nowiki>ATP PBT</nowiki> in the downstream '''Tax losses''' stage with <nowiki>New_ATP_PBT = ATP PBT + ΔPBT_Thin-Cap + ΔPBT_WHT (paid + due)</nowiki> 
=== Interaction with other modules ===
=== Interaction with other modules ===
* '''Transfer Pricing convergence''': thin-cap uses the '''post-TP''' interest figures; it does NOT trigger another TP iteration.
* '''TP convergence''' uses after TP Ajustment interest; does NOT trigger another TP loop.
* '''Withholding-tax engine''': unchanged WHT remains computed on gross interest flows.
* '''Withholding-tax''' unchanged (WHT on gross interest).
* '''Tax-loss computation''': use <nowiki>New_ATP_PBT</nowiki> that includes thin-cap adjustment.
* '''Tax-loss computation''' – starts from <code>New_ATP_PBT</code>
* '''Genetic optimiser''': may treat the '''Debt/Equity ratio''', '''interest rate''', or '''Group-Ratio election''' as additional variables, bounded by statutory rules.
* '''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 ====
{| class="wikitable"
!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 ====
{| class="wikitable"
!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  <!-- 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


=== Summary of new labels ===
* '''Step 6 Outputs'''  
;Data
  ATP Disallowed Interest N = €500 000  
:ATP Debt Related-party • ATP Debt – Third-party • ATP Equity – Thin-Cap • ATP Net Interest Expense • ATP EBITDA • ATP Excess Interest Carry-forward N-1  
  ATP Excess Interest Carry-forward N = €500 000 
;Rules
  ΔPBT_Thin-Cap = –€500 000 
:ATP Thin-Cap rule type • ATP Thin-Cap in scope • ATP Debt/Equity Safe-Harbour ratio • ATP Fixed-Ratio % EBITDA • ATP De-minimis interest threshold • ATP Group-Ratio election • ATP Group-Ratio % • ATP Excess Interest carry-forward period  
  New_ATP_PBT = ATP_PBT – €500 000 + ΔPBT_WHT
;Outputs
:ATP Disallowed Interest N • ATP Excess Interest Carry-forward N ΔPBT_Thin-Cap

Latest revision as of 16:56, 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

Input Data Points – Thin-Cap
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)

Input Rules – Thin-Cap
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 when the jurisdiction has multiple interest expense limitation rules. For example, Canada Income Tax Act 18.4 mentions "... on outstanding debts to specified non-residents that ... exceeds (ii) 1.5 times the equity amount of the corporation or trust for the year ...", while Excessive interest and financing expenses (IFE) limitation rules contained in 18.2 and 18.21 mentions that "The cap on net IFE is equal to a fixed ratio of adjusted taxable income (ATI): 30% ..." 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

New Output Data Points
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.

  1. Pre-checks
    • If Thin-Cap in scope = False ⇒ skip module.
  2. Net interest expense (NI) after de-minimis
    • NI = max(0 ; ATP Net Interest Expense − ATP De-minimis interest threshold)
  3. 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 ) )
    • 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
  4. Current-year disallowance
    • Disallowed_Before_Carry = max(0 ; NI − AIC_final)
  5. 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
  6. Update variables
    1. ΔPBT_Thin-Cap = − Disallowed_N
    2. ATP Disallowed Interest N = Disallowed_N
    3. ATP Excess Interest Carry-forward N = Disallowed_N (drops FIFO after ‘‘carry-forward period’’)
    4. 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