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