Rechnungsanalyse- & Export-Plattform
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 abrufenGET /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
-
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
-
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
-
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
-
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 # }
