Logo
Smart Invoice Automation: KI-gestützte Dokumentenverarbeitung mit Azure

Smart Invoice Automation: KI-gestützte Dokumentenverarbeitung mit Azure

Veröffentlicht am 24.10.2025

Einleitung: Das Problem der manuellen Rechnungsverarbeitung

Wer schon einmal im Rechnungswesen oder Ausgabenmanagement gearbeitet hat, kennt den Schmerz: Endlose PDF-Rechnungen, die per E-Mail eintreffen und deren Daten manuell in das Buchhaltungssystem eingegeben werden müssen. Lieferantenname, Rechnungsnummer, Daten, Beträge, Einzelposten – alles per Hand eingetippt. Es ist mühsam, fehleranfällig und eine massive Zeitverschwendung.

Ich wollte erkunden, wie moderne KI-Services dieses Problem lösen können, während ich gleichzeitig eine produktionsreife serverlose Architektur aufbaue. Das Ergebnis ist Smart Invoice Automation: eine KI-gestützte Plattform, die Rechnungs-PDFs und Bilder in 3-5 Sekunden verarbeitet, automatisch strukturierte Daten extrahiert und intelligent Ausgaben kategorisiert.

Dieses Projekt demonstriert die Kraft der Kombination von Azures KI-Services (Form Recognizer und OpenAI-Sprachmodell) mit einer vollständig serverlosen Architektur unter Verwendung von .NET Azure Functions, Cosmos DB und Next.js.

Was ich entwickelt habe

Smart Invoice Automation ist eine End-to-End-Dokumentenverarbeitungsplattform mit folgenden Hauptfunktionen:

Kernfunktionen:

  • Drag-and-Drop-Upload: Einfache Weboberfläche mit Unterstützung für PDF-, PNG- und JPG-Rechnungsformate
  • KI-Datenextraktion: Extrahiert automatisch Lieferantenname, Rechnungsnummer, Daten, Beträge, Währung und detaillierte Einzelposten mit Azure Form Recognizer
  • Intelligente Klassifizierung: Verwendet Azure OpenAI zur Kategorisierung von Rechnungen in Geschäftsausgabenkategorien (IT-Services, Marketing, Bürobedarf usw.) mit Konfidenzwerten und Begründungen
  • Echtzeit-Dashboard: Alle verarbeiteten Rechnungen mit Such-, Filter- und Detailansichtsfunktionen anzeigen
  • Strukturierte Speicherung: Alle Rechnungsdaten in Cosmos DB gespeichert, Originaldateien in Azure Blob Storage erhalten

Leistungsmerkmale:

  • Verarbeitungszeit: 3-5 Sekunden pro Rechnung
  • Extraktionsgenauigkeit: 95%+ bei Standardrechnungen
  • Vollständig automatisch skalierende serverlose Architektur
  • Kosten: Weniger als 5 $/Monat bei typischer Demo-Nutzung

Architektur: Eine mehrschichtige serverlose Pipeline

Das System folgt einer sauberen, serverlosen Architektur, bei der jede Komponente nach Bedarf automatisch skaliert:

User Browser → Next.js Frontend → Azure Functions API → Azure KI-Services → Datenspeicher

Die Verarbeitungspipeline

Wenn ein Benutzer eine Rechnung hochlädt, passiert Folgendes:

  1. Upload: Benutzer zieht eine Rechnungsdatei auf die Weboberfläche
  2. Speicherung: Datei wird in Azure Blob Storage mit organisierter Ordnerstruktur (YYYY/MM/) hochgeladen
  3. SAS-Token-Generierung: Eine zeitlich begrenzte Shared Access Signature wird erstellt, um sicheren Zugriff zu ermöglichen
  4. Extraktion: Azure Form Recognizer analysiert das Dokument mit seinem vortrainierten Rechnungsmodell
  5. Klassifizierung: Extrahierte Daten werden zur Ausgabenkategorisierung an das Azure OpenAI-Sprachmodell gesendet
  6. Persistierung: Kombinierte Ergebnisse werden mit Metadaten in Cosmos DB gespeichert
  7. Anzeige: Frontend erhält die verarbeiteten Daten und zeigt sie dem Benutzer an

Der gesamte Prozess ist asynchron, erscheint dem Benutzer jedoch synchron und wird in 3-5 Sekunden abgeschlossen.

Technologieentscheidungen

Backend (.NET Azure Functions):

  • Isolated Worker Process für bessere Leistung und Flexibilität
  • Drei HTTP-gesteuerte Funktionen: Upload, GetInvoices, GetInvoiceById
  • Service-Layer-Muster für saubere Trennung der Belange
  • Durchgehend Async/Await für optimalen Durchsatz

Frontend (Next.js):

  • App Router mit Server- und Client-Komponenten
  • TypeScript für Typsicherheit über den gesamten Stack
  • Tailwind CSS für responsives Design
  • Modulare Komponentenarchitektur

KI-Services:

  • Azure Form Recognizer für Document Intelligence
  • Azure OpenAI Service für Klassifizierung
  • Beide Services geben Konfidenzwerte zur Qualitätskontrolle zurück

Datenschicht:

  • Azure Cosmos DB (Serverless-Modus) für Rechnungsmetadaten
  • Azure Blob Storage für Originaldokumentdateien
  • Organisierte Speicherung mit datumsbasierten Ordnern

Implementierung im Detail

Herausforderung 1: Umgang mit der asynchronen Natur von Form Recognizer

Das Problem: Azure Form Recognizer verwendet ein asynchrones Verarbeitungsmodell. Man übermittelt ein Dokument und erhält eine URL zum Abrufen der Ergebnisse. Dies machte es schwierig, Benutzern eine schnelle Antwort zu liefern.

Die Lösung: Ich implementierte einen Polling-Mechanismus mit exponentiellem Backoff direkt in der Azure Function. Die Funktion übermittelt das Dokument an Form Recognizer und fragt dann die Ergebnis-URL ab, bis die Verarbeitung abgeschlossen ist. Aus Benutzersicht bleibt der gesamte Prozess synchron – sie laden hoch und warten auf Ergebnisse.

// Vereinfachte Polling-Logik
var analyzeOperation = await client.AnalyzeDocumentFromUriAsync(
WaitUntil.Completed,
"prebuilt-invoice",
documentUri
);
var result = analyzeOperation.Value;

Dieser Ansatz hält die Architektur einfach und ermöglicht schnelle Antwortzeiten (3-5 Sekunden). Die serverlose Natur bedeutet, dass wir nur für die tatsächliche Verarbeitungszeit zahlen.

Herausforderung 2: Vielfältige Rechnungsformate

Das Problem: Rechnungen gibt es in wildesten unterschiedlichen Formaten – verschiedene Layouts, Strukturen, Sprachen und Designstile. Einen Parser zu entwickeln, der alle Variationen verarbeitet, wäre nahezu unmöglich.

Die Lösung: Das vortrainierte Rechnungsmodell von Azure Form Recognizer ist auf Tausende von Rechnungsformaten weltweit trainiert. Es verarbeitet die meisten Standardrechnungen mit 95%+ Genauigkeit out of the box. Der Service gibt Konfidenzwerte für jedes extrahierte Feld zurück, was es uns ermöglicht, in Zukunft manuelle Überprüfungsworkflows für Ergebnisse mit geringer Konfidenz zu implementieren.

Wichtige extrahierte Felder:

  • Lieferanteninformationen (Name, Adresse, Steuernummer)
  • Rechnungsmetadaten (Nummer, Datum, Fälligkeitsdatum)
  • Finanzdaten (Zwischensumme, Steuer, Gesamtbetrag, Währung)
  • Einzelposten (Beschreibung, Menge, Einzelpreis, Betrag)

Herausforderung 3: Konsistente Ausgabenklassifizierung

Das Problem: Ausgaben konsistent ohne vordefinierte Regeln zu kategorisieren, ist herausfordernd. Dieselbe Rechnung könnte je nach subtilen Kontexthinweisen unterschiedlich klassifiziert werden.

Die Lösung: Ich verwendete das Azure OpenAI-Sprachmodell mit einem sorgfältig gestalteten Prompt, der als „Experten-Buchhalter" agiert. Der Prompt enthält:

  1. Spezifische Kategoriedefinitionen: Klare Beschreibungen jeder Ausgabenkategorie
  2. Strukturierte JSON-Ausgabe: Erzwingt konsistentes Antwortformat
  3. Begründungsanforderung: Zwingt die KI, ihre Klassifizierungsentscheidung zu erklären
  4. Konfidenzbewertung: Bietet Transparenz für Grenzfälle
// Beispiel für die Struktur des Klassifizierungsprompts
const systemPrompt = `Du bist ein erfahrener Buchhalter...
Analysiere die Rechnung und klassifiziere sie in eine dieser Kategorien:
- IT-Services & Software
- Marketing & Werbung
- Bürobedarf
- Reisen & Transport
- Professionelle Dienstleistungen
...
Gib JSON zurück mit: category, confidence (0-1), reasoning`;

Das Reasoning-Feld erwies sich als unschätzbar wertvoll – es macht die Entscheidungsfindung der KI transparent und überprüfbar. Dies ist entscheidend für Geschäftsanwendungen, bei denen man Kategorisierungsentscheidungen rechtfertigen muss.

Herausforderung 4: Kostenoptimierung

Das Problem: KI-Services können im großen Maßstab teuer werden. Form Recognizer berechnet pro analysierter Seite, und das Sprachmodell berechnet pro verarbeitetem Token.

Die Lösung: Ich implementierte mehrere Kostenoptimierungsstrategien:

  1. Alles serverlos: Die Verwendung von Azures serverlosen Angeboten bedeutet null Kosten im Leerlauf
  2. Cosmos DB Serverless-Modus: Keine Mindestdurchsatzkosten – zahle nur für tatsächliche Lese-/Schreibvorgänge
  3. Nutzung des kostenlosen Tiers: Form Recognizer F0-Tier bietet 500 Seiten/Monat kostenlos
  4. Effiziente Prompts: Minimierte Token-Nutzung in Klassifizierungsprompts
  5. SAS-Token-Zugriff: Vermeidung redundanter Dateiübertragungen durch direkten Blob Storage-Zugriff für Form Recognizer

Ergebnis: Monatliche Kosten bleiben bei typischer Demo-Nutzung unter 5 $, während die Architektur zu Produktionsworkloads skalieren kann, indem einfach Service-Tiers aktualisiert werden.

Herausforderung 5: Sicherer Blob-Zugriff für KI-Services

Das Problem: Form Recognizer muss auf Rechnungsdateien in Blob Storage zugreifen, aber Blobs öffentlich zugänglich zu machen wäre ein Sicherheitsrisiko.

Die Lösung: Ich implementierte zeitlich begrenzte Shared Access Signature (SAS)-Token. Beim Aufruf von Form Recognizer generiert die Funktion eine temporäre SAS-URL, die nach der Verarbeitung abläuft:

var sasBuilder = new BlobSasBuilder
{
BlobContainerName = containerName,
BlobName = blobName,
Resource = "b",
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1)
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);

Dies wahrt die Sicherheit, während der KI-Service temporären Zugriff zur Durchführung seiner Analyse erhält.

Hauptfunktionen in Aktion

1. Intelligente Datenextraktion

Form Recognizer führt nicht nur OCR aus – es versteht die Dokumentstruktur. Es kann:

  • Lieferanteninformationen identifizieren, auch wenn sie sich an verschiedenen Stellen befinden
  • Tabellen von Einzelposten mit unterschiedlichen Spaltenstrukturen parsen
  • Daten in mehreren Formaten extrahieren
  • Währungssymbole und Dezimaltrennzeichen erkennen
  • Mehrseitige Rechnungen verarbeiten

2. KI-Klassifizierung mit Begründung

Das Klassifizierungssystem liefert drei Schlüsselinformationen:

  • Kategorie: Die zugewiesene Ausgabenkategorie
  • Konfidenz: Ein 0-1-Score, der Sicherheit anzeigt
  • Begründung: Eine Texterklärung, warum diese Kategorie gewählt wurde

Beispielausgabe:

{
"category": "IT Services & Software",
"confidence": 0.95,
"reasoning": "Rechnung stammt von Microsoft Azure für Cloud-Computing-Services, was unter IT-Services fällt. Hohe Konfidenz aufgrund klarer Servicebeschreibung."
}

Diese Transparenz ist für den geschäftlichen Einsatz entscheidend – Benutzer können KI-Entscheidungen verstehen und überprüfen.

3. Organisierte Datenspeicherung

Jede verarbeitete Rechnung wird als strukturiertes JSON-Dokument in Cosmos DB gespeichert:

{
"id": "uuid",
"filename": "invoice-2024-10.pdf",
"uploadDate": "2024-10-23T10:30:00Z",
"blobUrl": "https://...",
"extractedData": {
"vendorName": "Microsoft",
"invoiceNumber": "INV-12345",
"invoiceDate": "2024-10-15",
"totalAmount": 150.00,
"currency": "USD",
"lineItems": [...]
},
"classification": {
"category": "IT Services",
"confidence": 0.95,
"reasoning": "..."
},
"processingMetadata": {
"processingTimeMs": 3421,
"formRecognizerConfidence": 0.98
}
}

Die ursprüngliche Rechnungsdatei verbleibt in Blob Storage, sodass Benutzer jederzeit auf das Quelldokument verweisen können.

Was ich gelernt habe

1. Serverlose Architekturmuster

Der Aufbau einer wirklich serverlosen Anwendung erfordert anderes Denken:

  • Zustandslose Ausführung: Funktionen können sich nicht auf In-Memory-Status zwischen Aufrufen verlassen
  • Cold-Start-Optimierung: Der erste Aufruf nach Leerlaufzeit ist langsamer – Funktionen schlank halten
  • Kostenbewusstes Design: Jeder API-Aufruf und Speichervorgang hat Kosten – entsprechend entwerfen

Das Isolated Worker Process-Modell in .NET Azure Functions bietet ausgezeichnete Dependency Injection und Middleware-Unterstützung, sodass es sich wie eine Standard-.NET-Anwendung anfühlt und gleichzeitig serverlose Vorteile beibehält.

2. Prompt Engineering ist eine Produktionsfähigkeit

Konsistente Ergebnisse vom Sprachmodell zu erhalten, erforderte sorgfältiges Prompt Engineering:

  • Rollenbasierte Rahmensetzung: „Du bist ein erfahrener Buchhalter" setzt Kontext
  • Strukturierte Ausgabeanforderungen: JSON-Format spezifizieren sorgt für parsbare Antworten
  • Begründung einbeziehen: Erklärung zu erzwingen verbessert Entscheidungsqualität
  • Spezifische Beispiele: Kategoriedefinitionen bereitstellen reduziert Mehrdeutigkeit

Prompt Engineering geht nicht nur darum, die KI zum Laufen zu bringen – es geht darum, zuverlässige, konsistente, produktionsreife Ergebnisse zu erhalten.

3. Azure KI-Services-Integration

Die Arbeit mit mehreren Azure KI-Services lehrte mich:

  • Asynchrone Verarbeitungsmuster: Polling-Strategien mit exponentiellem Backoff
  • Interpretation von Konfidenzwerten: Verstehen, wann man der KI vertrauen und wann man für menschliche Überprüfung markieren sollte
  • Service-Limits und Quoten: Planung für Ratenlimits und Einschränkungen des kostenlosen Tiers
  • Fehlerbehandlung: Angemessene Degradierung, wenn KI-Services nicht verfügbar sind

4. Cosmos DB Serverless-Modus

Der Serverless-Modus von Cosmos DB ist ideal für solche Projekte:

  • Keine Mindestkosten: Perfekt für Demos und Anwendungen mit geringem Traffic
  • Automatische Skalierung: Verarbeitet Traffic-Spitzen ohne Konfiguration
  • Partition Key-Strategie: Immer noch kritisch für Query-Performance

Für hochfrequente Produktionsworkloads kann der Provisioned Throughput-Modus jedoch kostengünstiger sein.

5. Typsicherheit über Stacks hinweg

Die Verwendung von TypeScript im Frontend und C# im Backend bot:

  • Fehlerkennung zur Compile-Zeit: Typenunstimmigkeiten vor Runtime erkennen
  • Bessere IDE-Unterstützung: IntelliSense und Autocomplete verbessern Entwicklererfahrung
  • Refactoring-Sicherheit: Typprüfung stellt sicher, dass Änderungen Integrationen nicht brechen
  • Selbstdokumentierende APIs: Typen dienen als Inline-Dokumentation

6. Next.js App Router-Paradigma

Der App Router führt einen Paradigmenwechsel ein:

  • Server Components standardmäßig: Explizit in clientseitiges Rendering einsteigen
  • Streaming und Suspense: Progressive Rendering für bessere UX
  • Vereinfachtes Data Fetching: Standardmäßig serverseitig, kein getServerSideProps

Es erfordert Anpassung, aber die Leistungsvorteile und die einfachere Architektur sind es wert.

Zukünftige Erweiterungen

Dies ist ein Demonstrationsprojekt, aber hier sind produktionsreife Features, die ich hinzufügen würde:

Sicherheit & Compliance:

  • Azure AD B2C-Authentifizierung
  • RBAC (rollenbasierte Zugriffskontrolle)
  • API-Ratenlimitierung und -Drosselung
  • Audit-Logging für Compliance
  • GDPR-Datenaufbewahrungsrichtlinien

Erweiterte Funktionen:

  • Batch-Verarbeitung über Azure Queue Storage
  • Duplikaterkennung mit Content-Hashing
  • Export nach CSV, Excel oder QuickBooks
  • Mehrstufige Genehmigungsworkflows
  • Custom Form Recognizer-Modelltraining
  • Analytics-Dashboard (Ausgabentrends, Lieferantenanalyse)

Erweiterte Fähigkeiten:

  • Belegverarbeitung (nicht nur Rechnungen)
  • Mehrsprachige Unterstützung
  • OCR für handgeschriebene Belege
  • Integration mit Buchhaltungssoftware-APIs

Fazit

Smart Invoice Automation demonstriert, wie moderne Cloud-Services echte Geschäftsprobleme mit minimaler Infrastrukturkomplexität lösen können. Durch die Kombination von Azures KI-Services mit einer vollständig serverlosen Architektur habe ich ein System entwickelt, das:

  • Rechnungen mit 95%+ Genauigkeit in 3-5 Sekunden verarbeitet
  • Automatisch von null auf Tausende von Dokumenten skaliert
  • Weniger als 5 $/Monat bei typischer Nutzung kostet
  • Transparente, überprüfbare KI-Entscheidungsfindung bietet

Das Projekt zeigt Full-Stack-Cloud-Entwicklung, KI/ML-Integration, moderne Frontend-Praktiken und kostenbewusstes Architekturdesign – alles während der Lösung eines echten Geschäftsproblems.

Hinweis: Dies ist ein Demonstrations- und Lernprojekt, das entwickelt wurde, um serverlose Architekturen und KI-Service-Integration zu erforschen. Es ist nicht als öffentlicher Service deployed, aber die Architektur und Implementierungsmuster sind produktionsreif und können für reale Anwendungsfälle angepasst werden.

Möchten Sie mehr Details sehen? Sehen Sie sich dieses Projekt in meinem Portfolio an oder schauen Sie sich den Quellcode auf GitHub an.