Class NorwegianTaxModel

java.lang.Object
neqsim.process.fielddevelopment.economics.NorwegianTaxModel
All Implemented Interfaces:
Serializable, TaxModel

public class NorwegianTaxModel extends Object implements TaxModel
Norwegian Continental Shelf petroleum tax model.

This class implements the Norwegian petroleum tax regime as of 2024, including:

  • Corporate tax (22%): Standard Norwegian corporate income tax applied to all net income
  • Special petroleum tax (56%): Additional tax on petroleum extraction income
  • Uplift deduction: Special deduction against the petroleum tax base (5.5% per year for 4 years = 22% total)
  • Loss carry-forward: Ability to carry forward losses with interest

Tax Calculation

The total marginal tax rate is 78% (22% + 56%), but the effective rate varies based on:

  • Timing of investments (uplift deductions)
  • Financing structure
  • Depreciation schedules

Example Usage

NorwegianTaxModel taxModel = new NorwegianTaxModel();

// Calculate tax for a single year
TaxResult result = taxModel.calculateTax(500.0, // Gross revenue (MUSD)
    100.0, // OPEX (MUSD)
    80.0, // Depreciation (MUSD)
    44.0 // Uplift deduction (MUSD)
);

System.out.println("Corporate tax: " + result.getCorporateTax());
System.out.println("Petroleum tax: " + result.getPetroleumTax());
System.out.println("Total tax: " + result.getTotalTax());
System.out.println("After-tax income: " + result.getAfterTaxIncome());

References

  • Norwegian Petroleum Tax Act (Petroleumsskatteloven)
  • Ministry of Finance circulars

Note: This class is maintained for backward compatibility. For new code, consider using GenericTaxModel with TaxModelRegistry.getParameters(String) for "NO".

Version:
1.0
Author:
ESOL
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • DEFAULT_CORPORATE_TAX_RATE

      public static final double DEFAULT_CORPORATE_TAX_RATE
      Corporate income tax rate (2024). This is the standard Norwegian corporate tax rate applied to all companies.
      See Also:
    • DEFAULT_PETROLEUM_TAX_RATE

      public static final double DEFAULT_PETROLEUM_TAX_RATE
      Special petroleum tax rate (2024). This additional tax applies only to petroleum extraction activities on the Norwegian Continental Shelf.
      See Also:
    • TOTAL_MARGINAL_RATE

      public static final double TOTAL_MARGINAL_RATE
      Total marginal tax rate. Sum of corporate and petroleum tax rates.
      See Also:
    • DEFAULT_UPLIFT_RATE

      public static final double DEFAULT_UPLIFT_RATE
      Annual uplift rate. The uplift is a special deduction against the petroleum tax base to compensate for the high marginal tax rate and encourage investment.
      See Also:
    • DEFAULT_UPLIFT_YEARS

      public static final int DEFAULT_UPLIFT_YEARS
      Number of years for uplift deduction. Uplift can be claimed for 4 years from the year of investment.
      See Also:
    • TOTAL_UPLIFT_PERCENTAGE

      public static final double TOTAL_UPLIFT_PERCENTAGE
      Total uplift percentage (5.5% x 4 years = 22%).
      See Also:
    • DEFAULT_DEPRECIATION_YEARS

      public static final int DEFAULT_DEPRECIATION_YEARS
      Standard depreciation period for offshore installations (years). Straight-line depreciation over 6 years.
      See Also:
    • corporateTaxRate

      private double corporateTaxRate
    • petroleumTaxRate

      private double petroleumTaxRate
    • upliftRate

      private double upliftRate
    • upliftYears

      private int upliftYears
    • depreciationYears

      private int depreciationYears
    • corporateTaxLossCarryForward

      private double corporateTaxLossCarryForward
    • petroleumTaxLossCarryForward

      private double petroleumTaxLossCarryForward
  • Constructor Details

    • NorwegianTaxModel

      public NorwegianTaxModel()
      Creates a tax model with default Norwegian petroleum tax parameters.

      Default values (2024):

      • Corporate tax rate: 22%
      • Petroleum tax rate: 56%
      • Uplift rate: 5.5% per year
      • Uplift years: 4
      • Depreciation years: 6
    • NorwegianTaxModel

      public NorwegianTaxModel(double corporateTaxRate, double petroleumTaxRate)
      Creates a tax model with custom tax rates.
      Parameters:
      corporateTaxRate - corporate tax rate (0-1)
      petroleumTaxRate - petroleum tax rate (0-1)
  • Method Details

    • calculateTax

      public TaxModel.TaxResult calculateTax(double grossRevenue, double opex, double depreciation, double uplift)
      Calculates tax for a single year.

      The calculation follows Norwegian petroleum tax rules:

      1. Calculate corporate tax base = Revenue - OPEX - Depreciation
      2. Apply loss carry-forward if available
      3. Calculate corporate tax (22% of positive tax base)
      4. Calculate petroleum tax base = Revenue - OPEX - Depreciation - Uplift
      5. Apply petroleum tax loss carry-forward if available
      6. Calculate petroleum tax (56% of positive tax base)
      Specified by:
      calculateTax in interface TaxModel
      Parameters:
      grossRevenue - total revenue for the year (any currency unit)
      opex - operating expenditure for the year (same unit as revenue)
      depreciation - depreciation deduction for the year (same unit as revenue)
      uplift - uplift deduction for the year (same unit as revenue)
      Returns:
      tax calculation result
    • calculateDepreciation

      public double calculateDepreciation(double capex, int year)
      Calculates annual depreciation using straight-line method.
      Specified by:
      calculateDepreciation in interface TaxModel
      Parameters:
      capex - total capital expenditure
      year - year number (1 = first year of depreciation)
      Returns:
      depreciation amount for the specified year
    • calculateUplift

      public double calculateUplift(double capex, int year)
      Calculates uplift deduction for a specific year.
      Specified by:
      calculateUplift in interface TaxModel
      Parameters:
      capex - total capital expenditure
      year - year number (1 = first year of uplift eligibility)
      Returns:
      uplift amount for the specified year
    • calculateEffectiveTaxRate

      public double calculateEffectiveTaxRate(double grossRevenue, double opex, double depreciation, double uplift)
      Calculates the effective tax rate for a given income structure.

      The effective rate is typically lower than the 78% marginal rate due to:

      • Uplift deductions
      • Timing of investments
      • Loss carry-forward
      Specified by:
      calculateEffectiveTaxRate in interface TaxModel
      Parameters:
      grossRevenue - total revenue
      opex - operating expenditure
      depreciation - depreciation deduction
      uplift - uplift deduction
      Returns:
      effective tax rate (0-1)
    • calculateGovernmentTake

      public double calculateGovernmentTake(double grossRevenue, double opex, double depreciation, double uplift)
      Calculates government take percentage.

      Government take includes:

      • Corporate tax
      • Petroleum tax
      • State's direct financial interest (SDFI) royalties (if applicable)
      Parameters:
      grossRevenue - total revenue
      opex - operating expenditure
      depreciation - depreciation deduction
      uplift - uplift deduction
      Returns:
      government take percentage (0-1)
    • resetLossCarryForward

      public void resetLossCarryForward()
      Resets loss carry-forward balances.

      Call this method when starting a new project evaluation to ensure losses from previous calculations don't affect the new project.

    • getTotalMarginalRate

      public double getTotalMarginalRate()
      Gets the total marginal tax rate.
      Returns:
      total marginal rate (corporate + petroleum)
    • getCorporateTaxRate

      public double getCorporateTaxRate()
      Gets the corporate tax rate.
      Returns:
      corporate tax rate (0-1)
    • setCorporateTaxRate

      public void setCorporateTaxRate(double corporateTaxRate)
      Sets the corporate tax rate.
      Parameters:
      corporateTaxRate - corporate tax rate (0-1)
    • getPetroleumTaxRate

      public double getPetroleumTaxRate()
      Gets the petroleum tax rate.
      Returns:
      petroleum tax rate (0-1)
    • setPetroleumTaxRate

      public void setPetroleumTaxRate(double petroleumTaxRate)
      Sets the petroleum tax rate.
      Parameters:
      petroleumTaxRate - petroleum tax rate (0-1)
    • getUpliftRate

      public double getUpliftRate()
      Gets the annual uplift rate.
      Returns:
      uplift rate (0-1)
    • setUpliftRate

      public void setUpliftRate(double upliftRate)
      Sets the annual uplift rate.
      Parameters:
      upliftRate - uplift rate (0-1)
    • getUpliftYears

      public int getUpliftYears()
      Gets the number of years for uplift deduction.
      Returns:
      number of uplift years
    • setUpliftYears

      public void setUpliftYears(int upliftYears)
      Sets the number of years for uplift deduction.
      Parameters:
      upliftYears - number of years
    • getDepreciationYears

      public int getDepreciationYears()
      Gets the depreciation period in years.
      Returns:
      depreciation years
    • setDepreciationYears

      public void setDepreciationYears(int depreciationYears)
      Sets the depreciation period in years.
      Parameters:
      depreciationYears - number of years
    • getCorporateTaxLossCarryForward

      public double getCorporateTaxLossCarryForward()
      Gets the current corporate tax loss carry-forward balance.
      Returns:
      loss carry-forward amount
    • getPetroleumTaxLossCarryForward

      public double getPetroleumTaxLossCarryForward()
      Gets the current petroleum tax loss carry-forward balance.
      Returns:
      loss carry-forward amount
    • createTaxModel

      public static TaxModel createTaxModel()
      Creates a TaxModel instance for Norway using the registry.

      This factory method provides integration with the country-independent tax model framework.

      Returns:
      TaxModel for Norway
    • getFiscalParameters

      public static FiscalParameters getFiscalParameters()
      Gets the fiscal parameters for Norway from the registry.
      Returns:
      Norwegian fiscal parameters
    • getParameters

      public FiscalParameters getParameters()
      Gets fiscal parameters for this model.

      Creates a FiscalParameters instance based on current model settings.

      Specified by:
      getParameters in interface TaxModel
      Returns:
      fiscal parameters for Norway
    • getCountryCode

      public String getCountryCode()
      Gets the country code.
      Specified by:
      getCountryCode in interface TaxModel
      Returns:
      "NO" for Norway
    • getCountryName

      public String getCountryName()
      Gets the country name.
      Specified by:
      getCountryName in interface TaxModel
      Returns:
      "Norway"
    • calculateRoyalty

      public double calculateRoyalty(double grossRevenue)
      Calculates royalty on gross revenue.

      Norway has no royalty - returns 0.

      Specified by:
      calculateRoyalty in interface TaxModel
      Parameters:
      grossRevenue - total revenue
      Returns:
      0 (no royalty in Norway)
    • getTotalMarginalTaxRate

      public double getTotalMarginalTaxRate()
      Gets the total marginal tax rate.
      Specified by:
      getTotalMarginalTaxRate in interface TaxModel
      Returns:
      0.78 (22% + 56%)
    • reset

      public void reset()
      Resets accumulated state.
      Specified by:
      reset in interface TaxModel
    • getLossCarryForward

      public double getLossCarryForward()
      Gets the total loss carry-forward.
      Specified by:
      getLossCarryForward in interface TaxModel
      Returns:
      sum of corporate and petroleum tax loss carry-forward