---
title: "CountryDE – API-Referenz · Quittio"
description: "Country pack for Germany."
canonical_url: "https://quittio.dev/docs/api/Quittio/Country/DE/CountryDE"
locale: de
meta:
  "og:description": "Country pack for Germany."
  "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": "CountryDE – 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) \\ [Country](https://quittio.dev/docs/api/Quittio/Country) \\ [DE](https://quittio.dev/docs/api/Quittio/Country/DE)

# CountryDE

class in quittio/country-de · extends [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack) · implements [`CompletesInvoices`](https://quittio.dev/docs/api/Quittio/Core/Countries/Capabilities/CompletesInvoices), [`ProvidesReferenceRates`](https://quittio.dev/docs/api/Quittio/Core/Countries/Capabilities/ProvidesReferenceRates)

`Quittio\Country\DE\CountryDE` · [Source](https://github.com/Quittio/quittio/blob/v0.7.1/packages/country-de/src/CountryDE.php#L49)

Country pack for Germany.

## Constants \#

| Constant | Value | Description |
| --- | --- | --- |
| `CODE` | `'DE'` | |
| `TRANSLATION_NAMESPACE` | `'quittio-de'` | |

## Methods \#

| Method | Description |
| --- | --- |
| `->__construct()` | |
| `->addressFormatter()` | Default: international address format. |
| `->buyerCountryRules()` | Default: no rules. |
| `::canOmitVatIds()` | An invoice of category O only with a VAT identifier that complete() may leave out: the seller states its tax number instead (section 14 (4) sentence 1 no. 2 UStG), and there is no tax representative, whose VAT identifier EN 16931 requires (BR-56) and forbids (BR-O-02). |
| `->code()` | |
| `->complete()` | Invoices to consumers get the notice that the consumer is in default 30 days after the due date and receipt of the invoice (LegalTexts::CONSUMER\_DEFAULT, subject PMT): without it the 30 days do not apply to consumers (section 286 (3) sentence 1 BGB). Not for credit notes, not twice, and not with the setting consumer\_default\_notice = false (quittio.countries.de). |
| `->correctionPolicy()` | Cancellation by credit note, correction by cancel and reissue. A self-billed invoice sent as XRechnung (with a Leitweg-ID) is cancelled by a negative self-billed invoice (389): the self-billed credit note (261) is not among the type codes of XRechnung (warning BR-DE-17). Confirmed by a tax adviser in October 2026 (legal review in the README). |
| `->defaults()` | |
| `->dunningLaw()` | Section 288 BGB: base rate plus 9 points (business) or 5 points (consumer), flat rate of 40 EUR for business debtors, consumer default after 30 days with notice. |
| `->errorClassification()` | Groups findings by the error classes of the BMF letter of 15 October 2025. |
| `->exporters()` | Default: no exporters. |
| `->formatAliases()` | |
| `->formatRules()` | |
| `->formats()` | XRechnung in CII and UBL; "xrechnung" names the CII variant. |
| `::germanDunningLaw()` | The dunning law of section 288 BGB without an instance of the pack (whose constructor registers the builder macros). |
| `->legalTexts()` | |
| `->letterLayouts()` | |
| `::locales()` | Locales the pack ships translations for (the directories of translationPath()), e.g. \["de", "en"]. |
| `->mandatoryOutput()` | Values the PDF must show in addition to the base fields. Paths with "\[\*]" apply to every index; paths without a value in the view model are skipped. |
| `->numberingRules()` | Invoice numbers must be unique and consecutive; gaps must be explainable. |
| `::onlyCategoryO()` | Whether only supplies not subject to VAT (category O) are invoiced, so that EN 16931 forbids the VAT identifiers of seller and buyer (BR-O-02). |
| `->paymentQr()` | Default: none; the EPC GiroCode is used for the type "girocode". |
| `->profiles()` | |
| `->readers()` | Default: no readers. |
| `->referenceRates()` | The Basiszinssatz (section 247 BGB): the shipped rates plus those registered with BaseRates. |
| `::registerTranslations()` | Makes the pack's translations available to the active translator. Called lazily, so presets work even without a registered Quittio instance. |
| `->retention()` | Invoices are business records: 8 years from the end of the calendar year of issue (section 14b UStG, section 147 AO as amended in 2025). |
| `->rules()` | Mandatory information according to section 14 (4) and 14a UStG (applies to every format). |
| `->serializers()` | Default: no serializers; CII and UBL are built in. |
| `->taxPresets()` | |
| `->translationPath()` | |

### `__construct()`#

```
public function __construct()
```

### `addressFormatter()`#

```
public function addressFormatter(): AddressFormatter
```

inherited from [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack)

Default: international address format.

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

### `buyerCountryRules()`#

```
public function buyerCountryRules(): array
```

inherited from [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack)

Default: no rules.

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

### `canOmitVatIds()`#

```
public static function canOmitVatIds(InvoiceData $invoice): bool
```

static

An invoice of category O only with a VAT identifier that complete() may leave out: the seller states its tax number instead (section 14 (4) sentence 1 no. 2 UStG), and there is no tax representative, whose VAT identifier EN 16931 requires (BR-56) and forbids (BR-O-02).

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

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

### `code()`#

```
public function code(): string
```

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

### `complete()`#

```
public function complete(InvoiceData $invoice, array $settings): InvoiceData
```

Invoices to consumers get the notice that the consumer is in default 30 days after the due date and receipt of the invoice (LegalTexts::CONSUMER\_DEFAULT, subject PMT): without it the 30 days do not apply to consumers (section 286 (3) sentence 1 BGB). Not for credit notes, not twice, and not with the setting consumer\_default\_notice = false (quittio.countries.de).

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

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

### `correctionPolicy()`#

```
public function correctionPolicy(): CorrectionPolicy
```

Cancellation by credit note, correction by cancel and reissue. A self-billed invoice sent as XRechnung (with a Leitweg-ID) is cancelled by a negative self-billed invoice (389): the self-billed credit note (261) is not among the type codes of XRechnung (warning BR-DE-17). Confirmed by a tax adviser in October 2026 (legal review in the README).

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

### `defaults()`#

```
public function defaults(): CountryDefaults
```

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

### `dunningLaw()`#

```
public function dunningLaw(): DunningLaw
```

Section 288 BGB: base rate plus 9 points (business) or 5 points (consumer), flat rate of 40 EUR for business debtors, consumer default after 30 days with notice.

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

### `errorClassification()`#

```
public function errorClassification(
    ValidationResult $result,
): array<string, list<ValidationMessage>>
```

Groups findings by the error classes of the BMF letter of 15 October 2025.

| Parameter | Type | Description |
| --- | --- | --- |
| `$result` | `[ValidationResult](https://quittio.dev/docs/api/Quittio/Core/Validation/ValidationResult)` | |

<dl><dt>Returns</dt>
<dd><code>array&lt;string, list&lt;<a href="https://quittio.dev/docs/api/Quittio/Core/Validation/ValidationMessage">ValidationMessage</a>&gt;&gt;</code></dd>
</dl>

### `exporters()`#

```
public function exporters(): array
```

inherited from [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack)

Default: no exporters.

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

### `formatAliases()`#

```
public function formatAliases(): array
```

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

### `formatRules()`#

```
public function formatRules(): array
```

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

### `formats()`#

```
public function formats(): array
```

XRechnung in CII and UBL; "xrechnung" names the CII variant.

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

### `germanDunningLaw()`#

```
public static function germanDunningLaw(): DunningLaw
```

static

The dunning law of section 288 BGB without an instance of the pack (whose constructor registers the builder macros).

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

### `legalTexts()`#

```
public function legalTexts(): LegalTextCatalog
```

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

### `letterLayouts()`#

```
public function letterLayouts(): array
```

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

### `locales()`#

```
public static function locales(): list<string>
```

static

Locales the pack ships translations for (the directories of translationPath()), e.g. \["de", "en"].

<dl><dt>Returns</dt>
<dd><code>list&lt;string&gt;</code></dd>
</dl>

### `mandatoryOutput()`#

```
public function mandatoryOutput(InvoiceData $invoice): MandatoryFieldList
```

Values the PDF must show in addition to the base fields. Paths with "\[\*]" apply to every index; paths without a value in the view model are skipped.

| 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/Countries/MandatoryFieldList">MandatoryFieldList</a></code></dd>
</dl>

### `numberingRules()`#

```
public function numberingRules(): NumberingRules
```

Invoice numbers must be unique and consecutive; gaps must be explainable.

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

### `onlyCategoryO()`#

```
public static function onlyCategoryO(InvoiceData $invoice): bool
```

static

Whether only supplies not subject to VAT (category O) are invoiced, so that EN 16931 forbids the VAT identifiers of seller and buyer (BR-O-02).

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

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

### `paymentQr()`#

```
public function paymentQr(): ?PaymentQrGenerator
```

inherited from [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack)

Default: none; the EPC GiroCode is used for the type "girocode".

<dl><dt>Returns</dt>
<dd><code>?<a href="https://quittio.dev/docs/api/Quittio/Core/Pdf/Qr/PaymentQrGenerator">PaymentQrGenerator</a></code></dd>
</dl>

### `profiles()`#

```
public function profiles(): array
```

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

### `readers()`#

```
public function readers(): array
```

inherited from [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack)

Default: no readers.

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

### `referenceRates()`#

```
public function referenceRates(): ReferenceRates
```

The Basiszinssatz (section 247 BGB): the shipped rates plus those registered with BaseRates.

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

### `registerTranslations()`#

```
public static function registerTranslations(): void
```

static

Makes the pack's translations available to the active translator. Called lazily, so presets work even without a registered Quittio instance.

### `retention()`#

```
public function retention(): RetentionRule
```

Invoices are business records: 8 years from the end of the calendar year of issue (section 14b UStG, section 147 AO as amended in 2025).

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

### `rules()`#

```
public function rules(): array
```

Mandatory information according to section 14 (4) and 14a UStG (applies to every format).

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

### `serializers()`#

```
public function serializers(): array
```

inherited from [`AbstractCountryPack`](https://quittio.dev/docs/api/Quittio/Core/Countries/AbstractCountryPack)

Default: no serializers; CII and UBL are built in.

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

### `taxPresets()`#

```
public function taxPresets(): TaxPresetCollection
```

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

### `translationPath()`#

```
public function translationPath(): string
```

<dl><dt>Returns</dt>
<dd><code>string</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/Country/DE/CountryDE#webpage","@type":"WebPage","description":"Country pack for Germany.","name":"CountryDE – API-Referenz","url":"https://quittio.dev/docs/api/Quittio/Country/DE/CountryDE","isPartOf":{"@id":"https://quittio.dev/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://quittio.dev/docs/api/Quittio/Country/DE/CountryDE"]}],"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"}]}
```