feat: create validated ZUGFeRD invoices in one console command

This commit is contained in:
admin committed 2026-10-16 09:29:08 +02:00
1 parent e0c15fc7f2
commit a643cf5227
30 files changed
+1509 -207

No files matched your search

+15 -1
View File
@@ -1,5 +1,7 @@
from __future__ import annotations
from pathlib import Path
import re
import shutil
from dataclasses import dataclass
from typing import Optional
@@ -37,6 +39,12 @@ def build_in_folder(
out_dir = invoice_dir / out_subdir
(out_dir / "logs").mkdir(parents=True, exist_ok=True)
attachment = invoice_dir / ('Rechnung_' + re.sub(r'[^A-Za-z0-9_-]', '_', inv.meta.invoice_number) + '.pdf')
# A new build invalidates old delivery drafts and prior validation results.
for stale in [attachment, out_dir / "invoice.eml", out_dir / "manifest.json",
out_dir / "invoice.facturx.pdf", out_dir / "validation/validate_report.xml"]:
stale.unlink(missing_ok=True)
logger.info("Loaded invoice: %s (folder=%s)", inv.meta.invoice_number, invoice_dir)
logger.info("Artifacts directory: %s", out_dir)
@@ -62,6 +70,12 @@ def build_in_folder(
if do_validate:
logger.info("Validating Factur-X PDF via Mustang")
report = out_dir / "validation" / "validate_report.xml"
result.validate_report = validate(mustang_jar, result.facturx_pdf or (out_dir / "invoice.facturx.pdf"), report, logger)
try:
result.validate_report = validate(mustang_jar, result.facturx_pdf, report, logger)
except Exception:
# Failed output must not be mistaken for a ready-to-send invoice.
result.facturx_pdf.unlink(missing_ok=True)
raise
shutil.copy2(result.facturx_pdf, attachment)
return result