From 8d0e73b62cd05f4c300874f0306394f1708a2ed9 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 23 Feb 2026 17:07:54 +0100 Subject: [PATCH] Fix: ZUGFeRD-Behandlung im Streaming-Endpoint + Default-Korrektur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Streaming-Endpoint /grobsortierung/stream hatte keine ZUGFeRD-Prüfung, dadurch wurden alle PDFs (inkl. Lieferscheine) bei direkt_verschieben in den ZUGFeRD-Ordner verschoben statt nur ZUGFeRD-konforme - ZUGFeRD-Logik sauber im if ist_pdf Block mit eigenem Verschiebe-Block, korrektem Status "zugferd" und Statistik-Zählung - Inkonsistenten Default 'separieren' auf 'normal' in verarbeite_ordner korrigiert (konsistent mit Scheduler und Streaming-Endpoint) - Status "verschoben" auf "direkt_verschoben" im Streaming-Endpoint angepasst (konsistent mit DB-Status) Co-Authored-By: Claude Opus 4.6 --- Source/backend/app/routes/api.py | 50 ++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/Source/backend/app/routes/api.py b/Source/backend/app/routes/api.py index dc017c5..86843b7 100755 --- a/Source/backend/app/routes/api.py +++ b/Source/backend/app/routes/api.py @@ -778,7 +778,7 @@ def verarbeite_ordner(id: int, db: Session = Depends(get_db)): ocr_gemacht = pdf_result.get("ocr_durchgefuehrt", False) # ZUGFeRD behandeln basierend auf Einstellung - zugferd_modus = getattr(quell_ordner, 'zugferd_behandlung', 'separieren') or 'separieren' + zugferd_modus = getattr(quell_ordner, 'zugferd_behandlung', 'normal') or 'normal' if ist_zugferd: if zugferd_modus == "ignorieren": @@ -1047,6 +1047,52 @@ async def grobsortierung_stream(db: Session = Depends(get_db)): ist_zugferd = pdf_result.get("ist_zugferd", False) ocr_gemacht = pdf_result.get("ocr_durchgefuehrt", False) + # ZUGFeRD-Behandlung prüfen + zugferd_behandlung = quell_ordner.get("zugferd_behandlung", "normal") + + if zugferd_behandlung == "separieren": + if not ist_zugferd: + # Nur ZUGFeRD-PDFs verarbeiten, Rest überspringen + datei_info["status"] = "kein_zugferd_ignoriert" + yield send_event({"type": "datei_fertig", **datei_info}) + await asyncio.sleep(0) + continue + # ZUGFeRD-PDF direkt in Zielordner verschieben + ziel_basis.mkdir(parents=True, exist_ok=True) + neuer_pfad = ziel_basis / datei.name + counter = 1 + while neuer_pfad.exists(): + neuer_pfad = ziel_basis / f"{datei.stem}_{counter}{datei.suffix}" + counter += 1 + datei.rename(neuer_pfad) + gesamt_stats["sortiert"] += 1 + gesamt_stats["zugferd"] += 1 + datei_info["neuer_name"] = neuer_pfad.name + datei_info["status"] = "zugferd_verschoben" + datei_info["zugferd"] = True + session.add(VerarbeiteteDatei( + original_pfad=str(datei), + original_name=datei.name, + neuer_pfad=str(neuer_pfad), + neuer_name=neuer_pfad.name, + ist_zugferd=True, + ocr_durchgefuehrt=ocr_gemacht, + status="zugferd" + )) + yield send_event({"type": "datei_fertig", **datei_info}) + await asyncio.sleep(0) + continue + + elif zugferd_behandlung == "ignorieren" and ist_zugferd: + # ZUGFeRD-PDFs überspringen + datei_info["status"] = "zugferd_ignoriert" + gesamt_stats["zugferd"] += 1 + yield send_event({"type": "datei_fertig", **datei_info}) + await asyncio.sleep(0) + continue + + # Bei "normal" oder "regel": weiter mit Regeln/direkt_verschieben + # Direkt verschieben? if quell_ordner["direkt_verschieben"]: ziel_basis.mkdir(parents=True, exist_ok=True) @@ -1072,7 +1118,7 @@ async def grobsortierung_stream(db: Session = Depends(get_db)): datei.rename(neuer_pfad) gesamt_stats["sortiert"] += 1 datei_info["neuer_name"] = neuer_pfad.name - datei_info["status"] = "verschoben" + datei_info["status"] = "direkt_verschoben" session.add(VerarbeiteteDatei( original_pfad=str(datei),