← Back to Portfolio
Persönliches ProjektN/AN/A

Rechnungsanalyse- & Export-Plattform

Loading...

Eine produktionsreife Dokumentenintelligenz-Plattform, die Rechnungs- und Belegdatenextraktion mit OCR und Large Language Models automatisiert. Das System verarbeitet Dokumentenbilder asynchron, extrahiert strukturierte Daten (Händler, Datum, Gesamtbetrag, Positionen) und bietet sowohl REST API als auch Web-UI-Schnittstellen zur Anzeige von Ergebnissen. Vollständig containerisiert mit Docker Compose für einfaches Deployment und Skalierung. (GitHub)

Architekturübersicht

Die Plattform folgt einer Microservices-Architektur mit klarer Trennung der Verantwortlichkeiten:

1. Frontend-Layer (React + Nginx)

  • React-Anwendung: Moderne Single-Page-Anwendung zum Hochladen von Dokumenten und Anzeigen von Extraktionsergebnissen
  • Nginx Web-Server: Dient statischen React-Build-Dateien und behandelt Reverse-Proxy
  • Benutzeroberfläche: Datei-Upload-Komponente, Beleg-Status-Checker und Ergebnisanzeige mit extrahierten Feldern

2. Backend API (FastAPI)

  • RESTful API: FastAPI-basiertes Backend mit Endpoints für:
    • POST /receipts/upload: Rechnungs-/Belegbilder hochladen (multipart/form-data)
    • GET /receipts/{receipt_id}: Verarbeitungsstatus und extrahierte Daten abrufen
    • GET /health: Health-Check-Endpoint für Monitoring
  • Async Request Handling: Non-blocking I/O für gleichzeitige Uploads
  • Dateiverwaltung: Temporäre Speicherung und Validierung hochgeladener Bilder

3. Async Processing Pipeline (Celery + Redis)

  • Task Queue: Redis als Message Broker für Celery-Tasks
  • Worker-Prozesse: Celery-Worker behandeln CPU-intensive OCR- und LLM-Verarbeitung
  • Status-Tracking: Echtzeit-Status-Updates (pending → processing → completed/error)
  • Skalierbarkeit: Horizontale Skalierung durch Hinzufügen weiterer Celery-Worker

4. OCR-Verarbeitung (Tesseract)

  • Textextraktion: Tesseract OCR-Engine extrahiert Rohtext aus Rechnungsbildern
  • Bildvorverarbeitung: Pillow-Bibliothek zur Bildoptimierung (Größenänderung, Kontrast, Graustufen)
  • Sprachunterstützung: Konfigurierbare OCR-Sprachmodelle
  • Fehlerbehandlung: Robuste Fehlerbehandlung für qualitativ minderwertige oder beschädigte Bilder

5. KI-Datenextraktion (LLM)

  • Dual-Mode-Unterstützung:
    • Cloud-Modus: OpenAI GPT-Modelle (GPT-3.5, GPT-4) via API
    • Lokaler Modus: Ollama für On-Premise-LLM-Inferenz (z.B. Llama 3, Mistral)
  • Strukturierte Extraktion: LLM parst OCR-Text zur Extraktion von:
    • Händler-/Verkäufername
    • Transaktionsdatum
    • Gesamtbetrag
    • Positionen (optional)
    • Steuerinformationen
  • Prompt Engineering: Optimierte Prompts für konsistente JSON-Ausgabe

6. Datenpersistenz (PostgreSQL)

  • Datenbankschema: SQLAlchemy ORM-Modelle für:
    • Beleg-Metadaten (ID, Upload-Zeitstempel, Status)
    • Original-Dateipfade
    • OCR-extrahierter Text (Volltext)
    • LLM-extrahierte strukturierte Felder (JSON)
  • Migrationen: Alembic für Datenbankschema-Versionierung und Migrationen
  • Abfrageoptimierung: Indizierte Felder für schnelle Status-Lookups

Technologie-Stack

Backend & Verarbeitung

  • FastAPI: Modernes Python-Web-Framework mit automatischer OpenAPI-Dokumentation
  • Celery: Verteilte Task-Queue für asynchrone Job-Verarbeitung
  • Redis: In-Memory-Datenspeicher als Celery-Broker und Result-Backend
  • PostgreSQL: Produktionsreife relationale Datenbank mit ACID-Compliance
  • SQLAlchemy: Python ORM für Datenbankabstraktion und Query-Building
  • Alembic: Datenbank-Migrations-Tool für Schema-Management

OCR & Bildverarbeitung

  • Tesseract OCR: Open-Source-OCR-Engine (via pytesseract Python-Wrapper)
  • Pillow (PIL): Python-Imaging-Bibliothek für Bildvorverarbeitung und -manipulation

KI/ML

  • OpenAI API: Cloud-basierter LLM-Service (GPT-3.5, GPT-4) für Datenextraktion
  • Ollama: Lokaler LLM-Server mit Unterstützung für Modelle wie Llama 3, Mistral, CodeLlama
  • LangChain (potenziell): Framework für Verkettung von LLM-Operationen und Prompt-Management

Frontend

  • React: Komponentenbasierte UI-Bibliothek zum Erstellen interaktiver Interfaces
  • Nginx: Hochperformanter Web-Server und Reverse-Proxy

Infrastruktur

  • Docker: Containerisierung für konsistentes Deployment über Umgebungen hinweg
  • Docker Compose: Multi-Container-Orchestrierung für alle Services
  • Umgebungsvariablen: Sichere Konfigurationsverwaltung via .env-Dateien

Funktionsweise

Verarbeitungs-Workflow

  1. Upload-Phase:

    • Benutzer lädt Rechnungsbild via React-Frontend hoch
    • FastAPI empfängt Datei, validiert Format (.png, .jpg)
    • Datei temporär gespeichert, Beleg-Datensatz in PostgreSQL mit Status "pending" erstellt
    • Beleg-ID an Benutzer zurückgegeben
  2. OCR-Phase (Celery-Task):

    • Celery-Worker nimmt OCR-Task aus Redis-Queue auf
    • Bild vorverarbeitet (Größenänderung, Kontrastverbesserung falls nötig)
    • Tesseract OCR extrahiert gesamten Text aus Bild
    • Roher OCR-Text in Datenbank gespeichert
    • Status auf "processing" aktualisiert
  3. KI-Extraktions-Phase (Celery-Task):

    • OCR-Text an LLM übergeben (OpenAI oder Ollama basierend auf Konfiguration)
    • LLM-Prompt weist Extraktion strukturierter Felder an
    • LLM gibt JSON mit Händler, Datum, Gesamtbetrag etc. zurück
    • Extrahierte Daten in PostgreSQL gespeichert
    • Status auf "processed" aktualisiert
  4. Abruf-Phase:

    • Benutzer fragt Beleg-Status via UI oder API ab
    • FastAPI ruft Daten aus PostgreSQL ab
    • Ergebnisse mit formatierten extrahierten Feldern angezeigt

Konfiguration & Setup

Umgebungsvariablen (.env)

# Datenbank-Konfiguration
DATABASE_URL=postgresql://postgres:postgres@db:5432/invoice_db

# Celery-Konfiguration
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/0

# LLM-Konfiguration
LLM_MODE=cloud  # Optionen: 'cloud' oder 'local'

# OpenAI (wenn LLM_MODE=cloud)
OPENAI_API_KEY=your_openai_api_key_here

# Ollama (wenn LLM_MODE=local)
OLLAMA_BASE_URL=http://host.docker.internal:11434

Deployment

# Alle Services bauen und starten docker-compose build docker-compose up -d # Logs anzeigen docker-compose logs -f # Services stoppen docker-compose down

Potenzielle Verbesserungen & Erweiterungen

1. Erweiterte OCR-Modelle

  • Upgrade auf Cloud-OCR-Services:
    • Google Cloud Vision API: Höhere Genauigkeit, Unterstützung für 200+ Sprachen, Handschrifterkennung
    • AWS Textract: Spezialisiert auf Dokumentenanalyse, Tabellenextraktion, Formularverständnis
    • Azure Form Recognizer: Vorgefertigte Rechnungsmodelle, automatische Feldextraktion
  • Vorteile: Bessere Genauigkeit bei qualitativ minderwertigen Bildern, Tabellenextraktion, Mehrsprachunterstützung

2. Erweiterte LLM-Integration

  • Strukturierte Output-Modelle:
    • Verwendung von OpenAIs strukturierten Outputs (JSON-Modus) für konsistentes Parsing
    • Fine-Tuning von Modellen auf rechnungsspezifischen Datensätzen für bessere Genauigkeit
  • Spezialisierte Modelle:
    • Anthropic Claude: Besser beim Befolgen komplexer Extraktionsanweisungen
    • Lokale Fine-Tuned-Modelle: Training auf Rechnungsdatensätzen für domänenspezifische Leistung
  • Mehrstufige Extraktion:
    • Erster Durchgang: Grundfelder extrahieren (Händler, Datum, Gesamtbetrag)
    • Zweiter Durchgang: Positionen, Steueraufschlüsselung, Zahlungsbedingungen extrahieren

3. Dokumentenverständnis-Frameworks

  • LangChain Document Loaders: Integration in Dokumentenverarbeitungspipelines
  • LlamaIndex: Aufbau von RAG (Retrieval-Augmented Generation) für kontextbewusste Extraktion
  • Haystack: End-to-End-NLP-Framework für Dokumenten-QA und -Extraktion

4. Erweiterte Features

  • Multi-Format-Unterstützung: PDF-Parsing (PyPDF2, pdfplumber), gescannte Dokumente
  • Batch-Verarbeitung: Mehrere Rechnungen hochladen, parallel verarbeiten
  • Export-Funktionalität: Export nach CSV, Excel, JSON oder Buchhaltungssoftware-Formaten (QuickBooks, Xero)
  • Validierung & Verifikation: Kreuzprüfung extrahierter Daten, Kennzeichnung von Anomalien
  • Duplikaterkennung: Identifizierung doppelter Rechnungen mit Fuzzy-Matching

5. Performance-Optimierungen

  • Caching: Redis-Cache für häufig abgerufene Belege
  • Bildoptimierung: Bilder vor OCR komprimieren, um Verarbeitungszeit zu reduzieren
  • Parallele Verarbeitung: Mehrere Belege gleichzeitig mit Worker-Pools verarbeiten
  • CDN-Integration: Frontend-Assets via CDN bereitstellen für schnellere Ladezeiten

6. Monitoring & Observability

  • Logging: Strukturiertes Logging mit Korrelations-IDs für Request-Tracing
  • Metriken: Prometheus-Metriken für Task-Queue-Tiefe, Verarbeitungszeiten, Fehlerraten
  • Alerting: Alerts für fehlgeschlagene Extraktionen, Queue-Backups einrichten
  • Dashboard: Grafana-Dashboard für Echtzeit-System-Monitoring

7. Sicherheitsverbesserungen

  • Authentifizierung: JWT-basierte Auth für API-Endpoints
  • Dateivalidierung: Virenscanning, Dateityp-Verifikation
  • Datenverschlüsselung: Verschlüsselung sensibler Rechnungsdaten im Ruhezustand
  • Rate Limiting: Missbrauch mit Request-Rate-Limits verhindern

8. Benutzererfahrung

  • Echtzeit-Updates: WebSocket/SSE für Live-Status-Updates
  • Fortschrittsanzeigen: OCR- und LLM-Verarbeitungsfortschritt anzeigen
  • Fehlerwiederherstellung: Fehlgeschlagene Extraktionen wiederholen, manuelle Korrekturoberfläche
  • Bulk-Operationen: Ordner mit Rechnungen hochladen, alle auf einmal verarbeiten

Anwendungsfälle

  • Buchhaltungsautomatisierung: Automatisierung der Spesenabrechnungsverarbeitung
  • AP/AR-Management: Straffung von Workflows für Verbindlichkeiten und Forderungen
  • Steuervorbereitung: Rechnungsdaten für Steuererklärung extrahieren
  • Ausgabenverfolgung: Persönliche oder geschäftliche Ausgabenkategorisierung
  • Audit-Trail: Wartung einer durchsuchbaren Datenbank aller Rechnungen

API-Beispiele

# Rechnung hochladen curl -X POST http://localhost:8000/receipts/upload \\ -F "file=@invoice.jpg" # Antwort: {"receipt_id": "abc123", "status": "pending"} # Status prüfen curl http://localhost:8000/receipts/abc123 # Antwort: # { # "receipt_id": "abc123", # "status": "processed", # "merchant": "Amazon", # "date": "2024-01-15", # "total": 129.99 # }

(View on GitHub)

Follow Me