# ImportAssist Eigenprojekt zur Weiterbildung in C#, Azure und KI-Integration. ImportAssist prüft synthetische Rechnungsdaten. Die lokale Verarbeitung läuft über eine Konsole, einen HTTP-Endpunkt oder einen Blob-Trigger mit Azurite. ## Voraussetzungen - .NET-10-SDK gemäß global.json - Azure Functions Core Tools 4 - Azurite - Unter Arch Linux: aspnet-targeting-pack Alle folgenden relativen Pfade beziehen sich auf das Repository. ## Lokal starten Terminal 1 — Azurite: ```bash "$HOME/.local/bin/azurite" \ --location "$HOME/.local/share/ImportAssist/azurite" ``` Terminal 2 — Functions-Host: ```bash cd src/ImportAssist.Functions func start ``` In local.settings.json werden folgende Values benötigt: ```json { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } ``` ## CSV prüfen Direkt über die Konsole: ```bash dotnet run --project src/ImportAssist.Cli -- samples/invoices.csv ``` Über einen Blob-Upload: ```bash dotnet run --project tools/ImportAssist.Upload -- samples/invoices.csv ``` Nach abgeschlossener Verarbeitung den Bericht lesen. BLOBNAME.csv durch den Namen aus der Upload-Ausgabe ersetzen: ```bash dotnet run --project tools/ImportAssist.Upload -- result "BLOBNAME.csv" ``` Eingaben liegen im Container imports, Berichte in results. ## CSV-Format - Kopfzeile: InvoiceId;CustomerId;Amount;Currency - Vier durch Semikolon getrennte Felder pro Zeile - Keine Anführungszeichen oder Zeilenumbrüche innerhalb eines Feldes - Beträge mit Dezimalpunkt, ohne Tausendertrennzeichen Prüfregeln: Rechnungsnummer und Kundennummer müssen vorhanden sein; der Betrag muss eine gültige positive Zahl sein. Die Währung wird bislang nicht fachlich geprüft. ## Prüfberichte - Completed: Alle Zeilen wurden fachlich geprüft. Einzelne Rechnungen können fehlerhaft sein. - Rejected: CSV-Struktur ungültig; keine fachliche Prüfung. Die Ursache steht in fileErrors. samples/invoices.csv ergibt eine gültige und vier fehlerhafte Rechnungen. samples/invoices-invalid-structure.csv wird wegen einer fehlenden Spalte in Zeile 3 abgewiesen. ## Beenden Functions-Host und Azurite jeweils mit Strg+C beenden. Azurite speichert seine Daten im angegebenen lokalen Verzeichnis. ## Aktueller Umfang Lokaler Prototyp mit synthetischen Daten. Cloud-Deployment und KI-Anbindung stehen noch aus. ## KI-Analyse aus C# `ImportAssist.Analyze` liest Analyseprompt, Schnittstellenbeschreibung und einen gespeicherten JSON-Prüfbericht ein und ruft Azure OpenAI auf. ### Lokale Konfiguration User Secrets für das Projekt initialisieren: ```bash dotnet user-secrets init --project tools/ImportAssist.Analyze ``` Folgende Konfigurationswerte im zugehörigen User-Secrets-Speicher setzen: - AzureOpenAI:Endpoint – Azure-OpenAI-Basisadresse der Ressource - AzureOpenAI:Deployment – importassist-analysis - AzureOpenAI:ApiKey – Schlüssel der Ressource API-Schlüssel ausschließlich lokal hinterlegen. User Secrets liegen außerhalb des Repositorys, sind aber unverschlüsselt. ### Ausführen Alle Befehle aus dem Repository-Hauptverzeichnis ausführen: ```bash dotnet run --project tools/ImportAssist.Analyze -- \ samples/invoices-report.json dotnet run --no-build --project tools/ImportAssist.Analyze -- \ samples/invoices-rejected-report.json ``` Azurite und der Functions-Host werden für diese gespeicherten Berichte nicht benötigt. Der Modellaufruf benötigt eine Internetverbindung. Die Analyse erscheint auf stdout; Statusmeldungen und Tokenverbrauch erscheinen auf stderr. Exitcodes: - 0: Modellantwort regulär abgeschlossen; keine fachliche Qualitätsgarantie. - 1: Konfigurations-, Datei- oder Aufruffehler. - 2: Modellantwort nicht regulär abgeschlossen. Die Antwort ist Freitext. Eine automatische fachliche Bewertung und ein verbindliches JSON-Ausgabeformat sind noch nicht implementiert.