API reference / Quittio \ Country \ DE \ Builder
GermanInvoice
final readonly class in quittio/country-de
Quittio\Country\DE\Builder\GermanInvoice · Source
German special cases of an invoice, reached with the builder macro de():
InvoiceBuilder::make()->de()->smallAmount()->number(…) Quittio::invoice()->de()->deductAdvance($advanceInvoice)->…
Every method returns the builder, so the chain continues there. The $locale of the notes selects their language; locales without a text of the pack get the German text.
Constants#
| Constant | Value | Description |
|---|---|---|
ADVANCE_TYPES | [\Quittio\Core\Enums\InvoiceTypeCode::CommercialInvoice, \Quittio\Core\Enums\InvoiceTypeCode::PrepaymentInvoice, \Quittio\Core\Enums\InvoiceTypeCode::PartialInv … | Type codes of documents that can be deducted as advance invoices: invoices that request a payment, not credit notes, debit notes, corrected invoices or final invoices. |
PREPAID | 'prepaid' | deductAdvance(): the advance payment reduces the amount due (BT-113). |
RECEIVED_IN_FULL | 'full' | deductAdvance(): the advance invoice was paid in full. |
REMAINDER | 'remainder' | deductAdvance(): a negative line per VAT rate, the invoice shows the VAT of the remainder. |
Methods#
| Method | Description |
|---|---|
->__construct() | |
->advance() | Prepayment invoice (type code 386): the note "Anzahlungsrechnung. Die Leistung wird voraussichtlich am … / im … erbracht." with the expected date or, as "2027-03", month of the service (section 14.8 (4) sentence 3 UStAE). Without one, the note that the date is not agreed yet (serviceDateOpen()). A payment already received is stated with its date: the note "Die Anzahlung wurde am … vereinnahmt." and the VAT point date BT-7, to which the mapping table of KoSIT and FeRD assigns the date of receipt (section 14 (4) sentence 1 no. 6 UStG). |
->consumerDefaultNotice() | Notice that a consumer is in default 30 days after the due date (section 286 (3) BGB). |
->deductAdvance() | Final invoice (section 14 (5) sentence 2 UStG) that deducts an advance invoice with the net amounts and VAT received per rate. Only advance payments actually received are deducted: |
->discountAgreement() | Reference to an agreed reduction of the consideration whose amount is not known when the invoice is issued, e.g. a bonus or rebate agreement (section 14 (4) no. 7 UStG): the note LegalTexts::DISCOUNT_AGREEMENT naming $agreement, e.g. "der Bonusvereinbarung vom 01.01.2026". Naming the agreement is enough if its documents can be shown at short notice (section 14.5 (19) UStAE). A cash discount (Skonto) is stated in the payment terms instead. |
->newVehicle() | Intra-community supply of a new vehicle (section 14a (4) UStG): the vehicle details are the line attributes (DE-USTG-07), the lines use VatPreset::IntraCommunitySupply (DE-USTG-13). |
->propertyRelatedService() | Service in connection with a property to a non-business buyer, with the retention note (section 14 (4) no. 9 UStG). |
->selfBilled() | Self-billed invoice (type code 389) with the note "Gutschrift" (section 14 (4) no. 10 UStG). Self-billing must be agreed with the supplier beforehand (section 14 (2) sentence 2 UStG); Quittio cannot check the agreement, which is not stated on the document. |
->serviceDateOpen() | Prepayment invoice whose date of the service is not agreed yet: the note LegalTexts::SERVICE_DATE_OPEN, and DE-USTG-03 does not warn about the missing date (section 14.8 (4) sentence 5 UStAE). |
->smallAmount() | Small amount invoice of at most 250 EUR gross (section 33 UStDV; the limit of the supply date). |
->smallBusinessId() | Invoice of a small business that states its small business identification number (Kleinunternehmer-Identifikationsnummer, suffix "EX") instead of the tax number (section 34a sentence 1 no. 2 UStDV). The number is no VAT identifier: it goes to the seller's tax registration (BT-32), not to BT-31. Sets the small business flag. |
->ticket() | Ticket for the carriage of passengers (section 34 UStDV): it may always be issued as other invoice, DE-EINVOICE-01 and -02 do not apply. |
__construct()#
public function __construct(TBuilder $builder)| Parameter | Type | Description |
|---|---|---|
$builder | Quittio\Country\DE\Builder\TBuilder |
advance()#
public function advance(
Date|DateTimeInterface|string|null $expectedService,
Date|DateTimeInterface|string|null $receivedOn = null,
string $locale = 'de',
): TBuilderPrepayment invoice (type code 386): the note "Anzahlungsrechnung. Die Leistung wird voraussichtlich am … / im … erbracht." with the expected date or, as "2027-03", month of the service (section 14.8 (4) sentence 3 UStAE). Without one, the note that the date is not agreed yet (serviceDateOpen()). A payment already received is stated with its date: the note "Die Anzahlung wurde am … vereinnahmt." and the VAT point date BT-7, to which the mapping table of KoSIT and FeRD assigns the date of receipt (section 14 (4) sentence 1 no. 6 UStG).
| Parameter | Type | Description |
|---|---|---|
$expectedService | Date|DateTimeInterface|string|null | |
$receivedOn | Date|DateTimeInterface|string|null = null | |
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
consumerDefaultNotice()#
public function consumerDefaultNotice(string $locale = 'de'): TBuilderNotice that a consumer is in default 30 days after the due date (section 286 (3) BGB).
| Parameter | Type | Description |
|---|---|---|
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
deductAdvance()#
public function deductAdvance(
InvoiceData $advance,
string $locale = 'de',
Money|BigDecimal|int|string|null $received = null,
string $style = self::PREPAID,
): TBuilderFinal invoice (section 14 (5) sentence 2 UStG) that deducts an advance invoice with the net amounts and VAT received per rate. Only advance payments actually received are deducted:
- $received: the amount received (gross). Less than the advance invoice: net amount and VAT are taken out of it in proportion to the VAT rows of the advance invoice (section 14.8 (5) UStAE). RECEIVED_IN_FULL (or the full amount) deducts the advance invoice as it is. Null deducts it in full as well, but sets the flag de.advance_receipt_unconfirmed, and DE-USTG-20 asks to confirm the receipt: an advance not paid must not be deducted, one paid in part only with that part (section 14.8 (2) and (10) UStAE).
- $style: PREPAID invoices the full service with its full VAT, and the advance payment reduces the amount due (BT-113), referenced (BG-3) and itemised (BT-22, section 14.8 (7) UStAE; BMF letter of 15 October 2026, marginal no. 3, until 30 June 2030). REMAINDER adds a negative line per VAT rate with the net amount received, so the invoice states only the VAT of the remainder (remainder invoice, section 14.8 (11) UStAE); easier for the buyer's system, but not covered by an e-invoice specific statement of the BMF.
| Parameter | Type | Description |
|---|---|---|
$advance | InvoiceData | |
$locale | string = 'de' | |
$received | Brick\Money\Money|Brick\Math\BigDecimal|int|string|null = null | |
$style | string = self::PREPAID | self::PREPAID or self::REMAINDER |
- Returns
Quittio\Country\DE\Builder\TBuilder- Throws
InvalidArgumentException– for a document that is no advance invoice in the currency of the builder, or a received amount that is not greater than zero or exceeds the advance invoice
discountAgreement()#
public function discountAgreement(string $agreement, string $locale = 'de'): TBuilderReference to an agreed reduction of the consideration whose amount is not known when the invoice is issued, e.g. a bonus or rebate agreement (section 14 (4) no. 7 UStG): the note LegalTexts::DISCOUNT_AGREEMENT naming $agreement, e.g. "der Bonusvereinbarung vom 01.01.2026". Naming the agreement is enough if its documents can be shown at short notice (section 14.5 (19) UStAE). A cash discount (Skonto) is stated in the payment terms instead.
| Parameter | Type | Description |
|---|---|---|
$agreement | string | |
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
newVehicle()#
public function newVehicle(string $locale = 'de'): TBuilderIntra-community supply of a new vehicle (section 14a (4) UStG): the vehicle details are the line attributes (DE-USTG-07), the lines use VatPreset::IntraCommunitySupply (DE-USTG-13).
| Parameter | Type | Description |
|---|---|---|
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
propertyRelatedService()#
public function propertyRelatedService(string $locale = 'de'): TBuilderService in connection with a property to a non-business buyer, with the retention note (section 14 (4) no. 9 UStG).
| Parameter | Type | Description |
|---|---|---|
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
selfBilled()#
public function selfBilled(string $locale = 'de'): TBuilderSelf-billed invoice (type code 389) with the note "Gutschrift" (section 14 (4) no. 10 UStG). Self-billing must be agreed with the supplier beforehand (section 14 (2) sentence 2 UStG); Quittio cannot check the agreement, which is not stated on the document.
| Parameter | Type | Description |
|---|---|---|
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
serviceDateOpen()#
public function serviceDateOpen(string $locale = 'de'): TBuilderPrepayment invoice whose date of the service is not agreed yet: the note LegalTexts::SERVICE_DATE_OPEN, and DE-USTG-03 does not warn about the missing date (section 14.8 (4) sentence 5 UStAE).
| Parameter | Type | Description |
|---|---|---|
$locale | string = 'de' |
- Returns
Quittio\Country\DE\Builder\TBuilder
smallAmount()#
public function smallAmount(): TBuilderSmall amount invoice of at most 250 EUR gross (section 33 UStDV; the limit of the supply date).
- Returns
Quittio\Country\DE\Builder\TBuilder
smallBusinessId()#
public function smallBusinessId(string $id): TBuilderInvoice of a small business that states its small business identification number (Kleinunternehmer-Identifikationsnummer, suffix "EX") instead of the tax number (section 34a sentence 1 no. 2 UStDV). The number is no VAT identifier: it goes to the seller's tax registration (BT-32), not to BT-31. Sets the small business flag.
| Parameter | Type | Description |
|---|---|---|
$id | string |
- Returns
Quittio\Country\DE\Builder\TBuilder- Throws
InvalidArgumentException– for a number without the suffix "EX"
ticket()#
public function ticket(): TBuilderTicket for the carriage of passengers (section 34 UStDV): it may always be issued as other invoice, DE-EINVOICE-01 and -02 do not apply.
- Returns
Quittio\Country\DE\Builder\TBuilder