Zum Inhalt springen

API reference / Quittio \ Country \ DE

CountryDE

class in quittio/country-de · extends AbstractCountryPack · implements CompletesInvoices, ProvidesReferenceRates

Quittio\Country\DE\CountryDE · Source

Country pack for Germany.

Constants#

ConstantValueDescription
CODE'DE'
TRANSLATION_NAMESPACE'quittio-de'

Methods#

MethodDescription
->__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

Default: international address format.

Returns
AddressFormatter

buyerCountryRules()#

public function buyerCountryRules(): array

inherited from AbstractCountryPack

Default: no rules.

Returns
array

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).

ParameterTypeDescription
$invoiceInvoiceData
Returns
bool

code()#

public function code(): string
Returns
string

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).

ParameterTypeDescription
$invoiceInvoiceData
$settingsarray
Returns
InvoiceData

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).

Returns
CorrectionPolicy

defaults()#

public function defaults(): CountryDefaults
Returns
CountryDefaults

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.

Returns
DunningLaw

errorClassification()#

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

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

ParameterTypeDescription
$resultValidationResult
Returns
array<string, list<ValidationMessage>>

exporters()#

public function exporters(): array

inherited from AbstractCountryPack

Default: no exporters.

Returns
array

formatAliases()#

public function formatAliases(): array
Returns
array

formatRules()#

public function formatRules(): array
Returns
array

formats()#

public function formats(): array

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

Returns
array

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).

Returns
DunningLaw

legalTexts()#

public function legalTexts(): LegalTextCatalog
Returns
LegalTextCatalog

letterLayouts()#

public function letterLayouts(): array
Returns
array

locales()#

public static function locales(): list<string>

static

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

Returns
list<string>

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.

ParameterTypeDescription
$invoiceInvoiceData
Returns
MandatoryFieldList

numberingRules()#

public function numberingRules(): NumberingRules

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

Returns
NumberingRules

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).

ParameterTypeDescription
$invoiceInvoiceData
Returns
bool

paymentQr()#

public function paymentQr(): ?PaymentQrGenerator

inherited from AbstractCountryPack

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

Returns
?PaymentQrGenerator

profiles()#

public function profiles(): array
Returns
array

readers()#

public function readers(): array

inherited from AbstractCountryPack

Default: no readers.

Returns
array

referenceRates()#

public function referenceRates(): ReferenceRates

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

Returns
ReferenceRates

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).

Returns
RetentionRule

rules()#

public function rules(): array

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

Returns
array

serializers()#

public function serializers(): array

inherited from AbstractCountryPack

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

Returns
array

taxPresets()#

public function taxPresets(): TaxPresetCollection
Returns
TaxPresetCollection

translationPath()#

public function translationPath(): string
Returns
string

Die Open-Core-Pakete stehen unter der MIT-Lizenz. Die rechtlichen Formulierungen der Länderpakete sind mit einer Steuerberatung abzustimmen.