German Construction Withholding Tax — withholding on payments for construction work, exemption certificate and its end date, monthly withholding return.
Overview
Construction Subcontracting — Germany (construction withholding tax)
German localization of the dyo_soustraitance foundation, for Odoo 19 Community. Labels are in French — as is the catalog — and cite the original term in parentheses, because that is the one you read on official documents.
What the regime says. § 48 of the German Income Tax Act (Einkommensteuergesetz) requires the principal to withhold part of the payments it makes for construction work (Bauleistungen) and pay it to the tax office. It is exempt in two cases: when the contractor provides a currently valid exemption certificate (Freistellungsbescheinigung, § 48b), or when the year's payments remain below a de minimis threshold (Bagatellgrenze).
What the module does, and what matters. The exemption certificate has an end date. While it is valid, withholding is lifted automatically; on expiry, it is reinstated on its own, without anyone having to think about it. A payment dated on the last day of validity is not withheld; the same payment dated the following day is. That is exactly where companies get caught: the certificate expired in March and nobody noticed before the audit.
That date governs, and no other. § 48 Abs. 2 S. 1 EStG grants exemption upon presentation of a certificate “im Zeitpunkt der Gegenleistung gültige” — the validity stated on the certificate, assessed on the payment date. § 48b Abs. 6 EStG attaches no duration to the online check: the module therefore caches nothing. The certificate is issued subject to revocation and may be withdrawn retroactively (§ 130 AO).
What the module adds to the base
the exemption certificate as a subcontractor document, with its security number (Sicherheitsnummer), the tax office that issued it (Finanzamt) and its end date;
automatic lifting of the withholding as long as the certificate covers the payment date, and its automatic reinstatement afterwards;
the annual de minimis threshold (Bagatellgrenze), with a higher threshold when the principal (Leistungsempfänger) carries out exclusively exempt supplies within the meaning of § 4 Nr. 12 Satz 1 UStG — the condition concerns the party who pays, never the service provider (§ 48 Abs. 2 S. 1 No. 1 EStG);
the subcontractor's tax number (Steuernummer) — without it, the withholding can be neither reported nor credited, and the payment is refused;
online certificate lookup with the Federal Central Tax Office (Bundeszentralamt für Steuern, EIBE portal) as the verification source — on the understanding that it is the competent Finanzamt that issues and revokes the certificate (§ 48b Abs. 6 EStG), the BZSt being only its custodian;
the monthly return for the withholding (Anmeldung über den Steuerabzug bei Bauleistungen) — period, due date, payments withheld, total to remit.
The rate, thresholds and filing deadline are company settings, not constants in the code. Check them with your German tax advisor before relying on them. By contrast, no validity period for a verification can be configured, because none exists: what decides is the date shown on the certificate, compared with the payment date. Incidentally, the maximum three-year term of a Freistellungsbescheinigung comes from the BZSt Merkblatt — an administrative rule, not a statutory one: § 48b EStG sets none.
What the module does not do
No connection to the tax authority's portal: verification and filing are done online, and their result is recorded here with its reference. No remittance — the withholding is calculated and tracked, while its payment is handled in Accounting. No reverse-charge VAT (§ 13b UStG), which is a different regime.
Specifications
| Price | €149 excl. VAT |
|---|---|
| License | OPL-1 |
| Odoo series | 19.0: published on the Odoo Apps Store; 20.0: published on the Odoo Apps Store |
| Version | 1.1.0 |
| Edition | Odoo Community / on-premise |
| Technical name | dyo_soustraitance_de |
| Domain | Construction and real estate |
Price excluding VAT as displayed on the Odoo Apps Store; purchase and installation are done on the Store or through your Omnifloo instance.