# Energy price calculation

> How the EMS converts the EPEX spot price into the net injection and consumption prices that drive PV curtailment and cost optimization.

Source: https://voltmasters.io/en/docs/voltmasters-platform/project-settings/energy-price-calculation/

The EMS never bases its decisions on the raw EPEX spot price directly. It first converts EPEX into the **net injection price** and the **net consumption price** using the contract parameters you configured. These net prices drive every price-based decision in the system, including PV curtailment and [cost optimization](https://voltmasters.io/en/docs/control-algorithms/cost-optimization/).

> **Note**
>
> The formulas below apply to a **dynamic** contract. Fixed, flexible and Spanish time-of-use contracts set the net prices differently, see [Energy contracts](https://voltmasters.io/en/docs/voltmasters-platform/project-settings/energy-contracts/) for how each contract type is priced.

### Supported countries and price source

Day-ahead spot prices are sourced from the **ENTSO-E Transparency Platform** for the project's **bidding zone**. The zone is derived automatically from the project's location. Coverage spans **22 European bidding zones** across the following countries:

| Country | Bidding zone | Local time |
| --- | --- | --- |
| Belgium | BE | Europe/Brussels |
| Netherlands | NL | Europe/Amsterdam |
| Luxembourg | LU | Europe/Brussels |
| France | FR | Europe/Paris |
| Germany | DE | Europe/Berlin |
| Austria | AT | Europe/Vienna |
| Switzerland | CH | Europe/Zurich |
| Great Britain | GB | Europe/London |
| Poland | PL | Europe/Warsaw |
| Spain | ES | Europe/Madrid |
| Italy | Seven zones (see below) | Europe/Rome |
| Denmark | Per project location | Europe/Copenhagen |
| Sweden | Per project location | Europe/Stockholm |
| Norway | Per project location | Europe/Oslo |
| Ukraine | UA | Europe/Kyiv |

**Countries with several bidding zones**

Some countries are not a single price area. Italy is split into its **seven bidding zones** (North, Centre-North, Centre-South, South, Calabria, Sicily and Sardinia), and Denmark, Sweden and Norway each have several zones as well. For these countries the correct zone follows from the project's location, and the day-ahead prices shown for the project are the prices of that zone, not a national average.

> **Note**
>
> Prices are retrieved in 15-minute resolution, and one year of historical prices is available for the supported zones. If a project's country is not covered, the EMS falls back to the Belgian bidding zone for its day-ahead prices.

### The formulas

Both prices are expressed in €/MWh:

```
Injection price   = (B × EPEX) − injection cost − injection distribution cost
Consumption price = (A × EPEX) + consumption cost + consumption distribution cost
```

Where:

-   **A** = consumption scaling factor
-   **B** = injection scaling factor
-   The costs are your fixed per-MWh contract components.

The **injection price** is what you actually earn (or pay) per MWh when you inject: it is the EPEX price *minus* the costs that come with injecting. Because those costs are subtracted, the injection price turns negative before EPEX itself does. The **consumption price** is what you actually pay per MWh imported: the EPEX price *plus* your consumption costs.

### Contract parameters

You configure the following parameters for your project. They correspond one-to-one with the terms in the formulas above:

| Parameter | Symbol | Effect |
| --- | --- | --- |
| Consumption scaling factor | A | Multiplies EPEX in the consumption price |
| Consumption cost | , | Added to the consumption price |
| Consumption distribution cost | , | Added to the consumption price |
| Injection scaling factor | B | Multiplies EPEX in the injection price |
| Injection cost | , | Subtracted from the injection price |
| Injection distribution cost | , | Subtracted from the injection price |

### The break-even point

> **Warning**
>
> The injection and consumption costs are **already included** in the net prices, you do not set a separate threshold anywhere. The break-even EPEX price for injection is simply the sum of your injection costs:
> 
> ```
> Break-even EPEX = injection cost + injection distribution cost
> ```
> 
> Above that EPEX price the net injection price is positive (injecting pays); below it the net injection price is negative.

### Worked example

With an injection scaling factor **B = 1**, injection cost **€5/MWh** and injection distribution cost **€1/MWh**:

```
Injection price = (1 × EPEX) − 5 − 1 = EPEX − 6
```

-   The break-even EPEX price is **6 €/MWh** (5 + 1). At exactly EPEX 6 the net injection price is 0.
-   At an EPEX price of **4.01 €/MWh**, the net injection price is `4.01 − 6 = −1.99 €/MWh`. This is negative, injecting would cost you €1.99 per MWh.
-   The injection price only becomes positive once EPEX rises **above 6 €/MWh**.

The `−1.99` in this example is not a setting or a threshold, it is the net injection price *at that moment's EPEX*. The value that price-based decisions compare against is the injection price crossing **zero**, which for this contract corresponds exactly to EPEX crossing **6 €/MWh**.

### Where these prices are used

-   **PV curtailment**: PV production is limited when the net injection price is negative.
-   [**Cost optimization**](https://voltmasters.io/en/docs/control-algorithms/cost-optimization/): the battery is charged and discharged based on the net consumption and injection prices across the forecast.
-   [**Energy cost on the energy meter dashboard**](https://voltmasters.io/en/docs/voltmasters-platform/dashboards/energy-meter-dashboard/energy-cost/): measured energy is valued at these net prices to give an indicative cost per meter. That figure is an indication, not a settlement.
