Transfer Pricing Algorithm WIP

From Wiki Algonomia
Jump to navigation Jump to search

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 (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

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