Class NorwegianTaxModel
- All Implemented Interfaces:
Serializable, TaxModel
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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classImmutable result of a tax calculation. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate doublestatic final doubleCorporate income tax rate (2024).static final intStandard depreciation period for offshore installations (years).static final doubleSpecial petroleum tax rate (2024).static final doubleAnnual uplift rate.static final intNumber of years for uplift deduction.private intprivate doubleprivate doubleprivate static final longstatic final doubleTotal marginal tax rate.static final doubleTotal uplift percentage (5.5% x 4 years = 22%).private doubleprivate int -
Constructor Summary
ConstructorsConstructorDescriptionCreates a tax model with default Norwegian petroleum tax parameters.NorwegianTaxModel(double corporateTaxRate, double petroleumTaxRate) Creates a tax model with custom tax rates. -
Method Summary
Modifier and TypeMethodDescriptiondoublecalculateDepreciation(double capex, int year) Calculates annual depreciation using straight-line method.doublecalculateEffectiveTaxRate(double grossRevenue, double opex, double depreciation, double uplift) Calculates the effective tax rate for a given income structure.doublecalculateGovernmentTake(double grossRevenue, double opex, double depreciation, double uplift) Calculates government take percentage.doublecalculateRoyalty(double grossRevenue) Calculates royalty on gross revenue.calculateTax(double grossRevenue, double opex, double depreciation, double uplift) Calculates tax for a single year.doublecalculateUplift(double capex, int year) Calculates uplift deduction for a specific year.static TaxModelCreates a TaxModel instance for Norway using the registry.doubleGets the current corporate tax loss carry-forward balance.doubleGets the corporate tax rate.Gets the country code.Gets the country name.intGets the depreciation period in years.static FiscalParametersGets the fiscal parameters for Norway from the registry.doubleGets the total loss carry-forward.Gets fiscal parameters for this model.doubleGets the current petroleum tax loss carry-forward balance.doubleGets the petroleum tax rate.doubleGets the total marginal tax rate.doubleGets the total marginal tax rate.doubleGets the annual uplift rate.intGets the number of years for uplift deduction.voidreset()Resets accumulated state.voidResets loss carry-forward balances.voidsetCorporateTaxRate(double corporateTaxRate) Sets the corporate tax rate.voidsetDepreciationYears(int depreciationYears) Sets the depreciation period in years.voidsetPetroleumTaxRate(double petroleumTaxRate) Sets the petroleum tax rate.voidsetUpliftRate(double upliftRate) Sets the annual uplift rate.voidsetUpliftYears(int upliftYears) Sets the number of years for uplift deduction.
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
DEFAULT_CORPORATE_TAX_RATE
public static final double DEFAULT_CORPORATE_TAX_RATECorporate 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_RATESpecial 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_RATETotal marginal tax rate. Sum of corporate and petroleum tax rates.- See Also:
-
DEFAULT_UPLIFT_RATE
public static final double DEFAULT_UPLIFT_RATEAnnual 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_YEARSNumber 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_PERCENTAGETotal uplift percentage (5.5% x 4 years = 22%).- See Also:
-
DEFAULT_DEPRECIATION_YEARS
public static final int DEFAULT_DEPRECIATION_YEARSStandard 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:
- Calculate corporate tax base = Revenue - OPEX - Depreciation
- Apply loss carry-forward if available
- Calculate corporate tax (22% of positive tax base)
- Calculate petroleum tax base = Revenue - OPEX - Depreciation - Uplift
- Apply petroleum tax loss carry-forward if available
- Calculate petroleum tax (56% of positive tax base)
- Specified by:
calculateTaxin interfaceTaxModel- 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:
calculateDepreciationin interfaceTaxModel- Parameters:
capex- total capital expenditureyear- 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:
calculateUpliftin interfaceTaxModel- Parameters:
capex- total capital expenditureyear- 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:
calculateEffectiveTaxRatein interfaceTaxModel- Parameters:
grossRevenue- total revenueopex- operating expendituredepreciation- depreciation deductionuplift- 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 revenueopex- operating expendituredepreciation- depreciation deductionuplift- 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
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
Gets the fiscal parameters for Norway from the registry.- Returns:
- Norwegian fiscal parameters
-
getParameters
Gets fiscal parameters for this model.Creates a FiscalParameters instance based on current model settings.
- Specified by:
getParametersin interfaceTaxModel- Returns:
- fiscal parameters for Norway
-
getCountryCode
Gets the country code.- Specified by:
getCountryCodein interfaceTaxModel- Returns:
- "NO" for Norway
-
getCountryName
Gets the country name.- Specified by:
getCountryNamein interfaceTaxModel- Returns:
- "Norway"
-
calculateRoyalty
public double calculateRoyalty(double grossRevenue) Calculates royalty on gross revenue.Norway has no royalty - returns 0.
- Specified by:
calculateRoyaltyin interfaceTaxModel- Parameters:
grossRevenue- total revenue- Returns:
- 0 (no royalty in Norway)
-
getTotalMarginalTaxRate
public double getTotalMarginalTaxRate()Gets the total marginal tax rate.- Specified by:
getTotalMarginalTaxRatein interfaceTaxModel- Returns:
- 0.78 (22% + 56%)
-
reset
-
getLossCarryForward
public double getLossCarryForward()Gets the total loss carry-forward.- Specified by:
getLossCarryForwardin interfaceTaxModel- Returns:
- sum of corporate and petroleum tax loss carry-forward
-