---
title: "En16931Calculator – API-Referenz · Quittio"
description: "Calculation according to EN 16931."
canonical_url: "https://quittio.dev/docs/api/Quittio/Core/Calculation/En16931Calculator"
locale: de
meta:
  "og:description": "Calculation according to EN 16931."
  "og:image": "https://quittio.dev/og/quittio-de.jpg"
  "og:image:alt": "Quittio: E-Rechnungen für PHP und Laravel. Rechtssicher, validiert, archiviert, mit geprüfter Beispielrechnung."
  "og:image:height": "630"
  "og:image:type": image/jpeg
  "og:image:width": "1200"
  "og:title": "En16931Calculator – API-Referenz · Quittio"
  "twitter:image": "https://quittio.dev/og/quittio-de.jpg"
  "twitter:image:alt": "Quittio: E-Rechnungen für PHP und Laravel. Rechtssicher, validiert, archiviert, mit geprüfter Beispielrechnung."
---

> Index of every page on this site: [llms.txt](https://quittio.dev/llms.txt)

[API reference](https://quittio.dev/docs/api) / [Quittio](https://quittio.dev/docs/api/Quittio) \\ [Core](https://quittio.dev/docs/api/Quittio/Core) \\ [Calculation](https://quittio.dev/docs/api/Quittio/Core/Calculation)

# En16931Calculator

final class in quittio/core · implements [`TotalsCalculator`](https://quittio.dev/docs/api/Quittio/Core/Calculation/TotalsCalculator)

`Quittio\Core\Calculation\En16931Calculator` · [Source](https://github.com/Quittio/quittio/blob/v0.7.1/packages/core/src/Calculation/En16931Calculator.php#L45)

Calculation according to EN 16931.

Amounts are rounded half up to two decimals at the defined points only. VAT is calculated per VAT group (category and rate), not per line (BR-CO-17).

With Meta::FLAG\_DECLARED\_AMOUNTS (cancellations and unchanged data of InvoiceBuilder::from() whose declared amounts another system rounded differently) and a matching fingerprint of the amount inputs (DeclaredAmounts), declared line net amounts (BT-131) within 0.02 of quantity × price ± allowances and charges (PEPPOL-EN16931-R120) and declared VAT category tax amounts (BT-117) less than one currency unit from the recalculation (BR-CO-17) are kept; otherwise the recalculated amounts are used and Meta::FLAG\_DECLARED\_AMOUNTS\_RECALCULATED is set (QUITTIO-DECLARED-AMOUNTS). Data whose amount inputs changed after the amounts were declared (fingerprint mismatch, e.g. a change with with() or in stored JSON) is recalculated completely. A declared VAT total in accounting currency (BT-111, Meta::declaredVatInTaxCurrency()) is kept within 0.01 of round2(BT-110 × exchange rate), e.g. the BT-111 of a partial cancellation aligned with the earlier ones (Corrections\\CancellationHistory). In gross price mode the rounding amount (BT-114) follows the amounts finally used, so that the amount due stays the gross amount of the lines. The CalculationPolicy decides whether declared amounts are kept, recalculated or rejected. The flags are read and written as DeclaredAmountsState.

## Methods \#

| Method | Description |
| --- | --- |
| `->__construct()` | |
| `->calculate()` | |
| `->policy()` | The policy of this calculator. |
| `->withPolicy()` | The same calculator with another policy. |

### `__construct()`#

```
public function __construct(
    LineCalculator $lineCalculator = new \Quittio\Core\Calculation\LineCalculator(),
    GrossPriceConverter $grossPriceConverter = new \Quittio\Core\Calculation\GrossPriceConverter(),
    CalculationPolicy $policy = new \Quittio\Core\Calculation\CalculationPolicy(),
)
```

| Parameter | Type | Description |
| --- | --- | --- |
| `$lineCalculator` | `[LineCalculator](https://quittio.dev/docs/api/Quittio/Core/Calculation/LineCalculator)` = `new \Quittio\Core\Calculation\LineCalculator()` | |
| `$grossPriceConverter` | `[GrossPriceConverter](https://quittio.dev/docs/api/Quittio/Core/Calculation/GrossPriceConverter)` = `new \Quittio\Core\Calculation\GrossPriceConverter()` | |
| `$policy` | `[CalculationPolicy](https://quittio.dev/docs/api/Quittio/Core/Calculation/CalculationPolicy)` = `new \Quittio\Core\Calculation\CalculationPolicy()` | |

### `calculate()`#

```
public function calculate(InvoiceData $invoice): InvoiceData
```

| Parameter | Type | Description |
| --- | --- | --- |
| `$invoice` | `[InvoiceData](https://quittio.dev/docs/api/Quittio/Core/Data/InvoiceData)` | |

<dl><dt>Returns</dt>
<dd><code><a href="https://quittio.dev/docs/api/Quittio/Core/Data/InvoiceData">InvoiceData</a></code></dd>
</dl>

### `policy()`#

```
public function policy(): CalculationPolicy
```

The policy of this calculator.

<dl><dt>Returns</dt>
<dd><code><a href="https://quittio.dev/docs/api/Quittio/Core/Calculation/CalculationPolicy">CalculationPolicy</a></code></dd>
</dl>

### `withPolicy()`#

```
public function withPolicy(CalculationPolicy $policy): self
```

The same calculator with another policy.

| Parameter | Type | Description |
| --- | --- | --- |
| `$policy` | `[CalculationPolicy](https://quittio.dev/docs/api/Quittio/Core/Calculation/CalculationPolicy)` | |

<dl><dt>Returns</dt>
<dd><code>self</code></dd>
</dl>

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://quittio.dev/#website","@type":"WebSite","description":"E-Rechnungen für PHP und Laravel: ZUGFeRD, XRechnung und Peppol erstellen, prüfen, lesen und archivieren.","inLanguage":"de-DE","name":"Quittio","url":"https://quittio.dev/","publisher":{"@id":"https://quittio.dev/#identity"},"workTranslation":{"@id":"https://quittio.dev/en#website"}},{"@id":"https://quittio.dev/docs/api/Quittio/Core/Calculation/En16931Calculator#webpage","@type":"WebPage","description":"Calculation according to EN 16931.","name":"En16931Calculator – API-Referenz","url":"https://quittio.dev/docs/api/Quittio/Core/Calculation/En16931Calculator","isPartOf":{"@id":"https://quittio.dev/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://quittio.dev/docs/api/Quittio/Core/Calculation/En16931Calculator"]}],"primaryImageOfPage":{"@id":"https://quittio.dev/#logo"}},{"@id":"https://quittio.dev/#identity","@type":"Organization","description":"Open-Source-Bibliothek für E-Rechnungen in PHP und Laravel (ZUGFeRD, XRechnung, Peppol) und Quittio Managed.","email":"kontakt@niklasforst.de","legalName":"Niklas Forst – Softwareentwicklung","name":"Quittio","url":"https://quittio.dev","founder":{"@type":"Person","name":"Niklas Forst","url":"https://quittio.dev/ueber"},"logo":{"@id":"https://quittio.dev/#logo"},"sameAs":["https://github.com/Quittio/quittio","https://packagist.org/packages/quittio/quittio"]},{"@id":"https://quittio.dev/#logo","@type":"ImageObject","caption":"Quittio","contentUrl":"https://quittio.dev/logo.png","inLanguage":"de-DE","url":"https://quittio.dev/logo.png"}]}
```