Fix: ZUGFeRD-Behandlung im Streaming-Endpoint + Default-Korrektur

- 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 <noreply@anthropic.com>
This commit is contained in:
Eduard Wisch 2026-02-23 17:07:54 +01:00
parent bb84f200d0
commit 8d0e73b62c

View file

@ -778,7 +778,7 @@ def verarbeite_ordner(id: int, db: Session = Depends(get_db)):
ocr_gemacht = pdf_result.get("ocr_durchgefuehrt", False) ocr_gemacht = pdf_result.get("ocr_durchgefuehrt", False)
# ZUGFeRD behandeln basierend auf Einstellung # 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 ist_zugferd:
if zugferd_modus == "ignorieren": 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) ist_zugferd = pdf_result.get("ist_zugferd", False)
ocr_gemacht = pdf_result.get("ocr_durchgefuehrt", 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? # Direkt verschieben?
if quell_ordner["direkt_verschieben"]: if quell_ordner["direkt_verschieben"]:
ziel_basis.mkdir(parents=True, exist_ok=True) 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) datei.rename(neuer_pfad)
gesamt_stats["sortiert"] += 1 gesamt_stats["sortiert"] += 1
datei_info["neuer_name"] = neuer_pfad.name datei_info["neuer_name"] = neuer_pfad.name
datei_info["status"] = "verschoben" datei_info["status"] = "direkt_verschoben"
session.add(VerarbeiteteDatei( session.add(VerarbeiteteDatei(
original_pfad=str(datei), original_pfad=str(datei),