Umsatzsteuersatz (BT-152) in die Ampel aufgenommen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dfuhrmann3 2026-07-30 16:59:34 +02:00
parent ff88eca741
commit c7b3ce4146
1 changed files with 19 additions and 0 deletions

View File

@ -285,6 +285,25 @@ def collect_blockers(data, is_xrechnung):
# 0,00 ist zulaessig (kostenlose Position), negativ nicht (BR-27).
if _preis < 0:
blocker.append(f"Position {_i}: Einzelpreis (BT-146) darf nicht negativ sein.")
# BT-152 je Position: 0 % ist zulaessig (steuerbefreit), ein unlesbarer Wert nicht.
_satz = _item.get("vat_rate_percent")
if _satz not in (None, ""):
try:
float(_satz)
except (TypeError, ValueError):
blocker.append(f"Position {_i}: Umsatzsteuersatz (BT-152) ist unlesbar.")
# BT-152 Umsatzsteuersatz auf Kopfebene: die XML-Erzeugung liest ihn dort fest aus und
# scheitert sonst mit einer kryptischen Meldung. 0 % ist zulaessig (steuerbefreit).
_vat = data.get("vat_rate_percent")
if _vat in (None, ""):
blocker.append("Umsatzsteuersatz (BT-152) fehlt. Ohne ihn lässt sich die Steuer nicht "
"ausweisen und die Rechnung wird beim Empfänger abgewiesen.")
else:
try:
float(_vat)
except (TypeError, ValueError):
blocker.append("Umsatzsteuersatz (BT-152) ist unlesbar (erwartet wird eine Zahl, z.B. 19).")
_pt = str(data.get("payment_term_days") or "").strip()
if _pt == "":