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#
| 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(): AddressFormatterDefault: international address format.
- Returns
AddressFormatter
buyerCountryRules()#
public function buyerCountryRules(): arrayDefault: no rules.
- Returns
array
canOmitVatIds()#
public static function canOmitVatIds(InvoiceData $invoice): boolAn 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 |
- Returns
bool
code()#
public function code(): string- Returns
string
complete()#
public function complete(InvoiceData $invoice, array $settings): InvoiceDataInvoices 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 | |
$settings | array |
- Returns
InvoiceData
correctionPolicy()#
public function correctionPolicy(): CorrectionPolicyCancellation 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(): DunningLawSection 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.
| Parameter | Type | Description |
|---|---|---|
$result | ValidationResult |
- Returns
array<string, list<ValidationMessage>>
exporters()#
public function exporters(): arrayDefault: no exporters.
- Returns
array
formatAliases()#
public function formatAliases(): array- Returns
array
formatRules()#
public function formatRules(): array- Returns
array
formats()#
public function formats(): arrayXRechnung in CII and UBL; "xrechnung" names the CII variant.
- Returns
array
germanDunningLaw()#
public static function germanDunningLaw(): DunningLawThe 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>Locales the pack ships translations for (the directories of translationPath()), e.g. ["de", "en"].
- Returns
list<string>
mandatoryOutput()#
public function mandatoryOutput(InvoiceData $invoice): MandatoryFieldListValues 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 |
- Returns
MandatoryFieldList
numberingRules()#
public function numberingRules(): NumberingRulesInvoice numbers must be unique and consecutive; gaps must be explainable.
- Returns
NumberingRules
onlyCategoryO()#
public static function onlyCategoryO(InvoiceData $invoice): boolWhether 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 |
- Returns
bool
paymentQr()#
public function paymentQr(): ?PaymentQrGeneratorDefault: none; the EPC GiroCode is used for the type "girocode".
- Returns
?PaymentQrGenerator
profiles()#
public function profiles(): array- Returns
array
readers()#
public function readers(): arrayDefault: no readers.
- Returns
array
referenceRates()#
public function referenceRates(): ReferenceRatesThe Basiszinssatz (section 247 BGB): the shipped rates plus those registered with BaseRates.
- Returns
ReferenceRates
registerTranslations()#
public static function registerTranslations(): voidMakes the pack's translations available to the active translator. Called lazily, so presets work even without a registered Quittio instance.
retention()#
public function retention(): RetentionRuleInvoices 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(): arrayMandatory information according to section 14 (4) and 14a UStG (applies to every format).
- Returns
array
serializers()#
public function serializers(): arrayDefault: no serializers; CII and UBL are built in.
- Returns
array
taxPresets()#
public function taxPresets(): TaxPresetCollection- Returns
TaxPresetCollection
translationPath()#
public function translationPath(): string- Returns
string