Add structured AI analysis output and invoice ID validation
This commit is contained in:
1 parent
12bc2a1822
commit
5b697ee200
8 files changed
+298
-16
No files matched your search
@@ -25,11 +25,32 @@ Unterscheide Dateistrukturfehler von fachlichen Rechnungsfehlern.
|
||||
Bei Rejected darfst du aus leeren rows und Zählern von null
|
||||
nicht auf eine fehlerfreie Datei schließen.
|
||||
|
||||
Antworte auf Deutsch:
|
||||
1. Eine kurze Zusammenfassung.
|
||||
2. Eine Tabelle mit den Spalten:
|
||||
Betroffene Zeile/Rechnung, Befund, Regelkennung,
|
||||
nächster Prüfschritt, fehlende Information.
|
||||
Ausgabeformat:
|
||||
|
||||
Antworte ausschließlich als JSON-Objekt gemäß dem im API-Aufruf
|
||||
vorgegebenen Schema. Verwende keine Markdown-Codeblöcke.
|
||||
|
||||
- summary: Kurze deutsche Zusammenfassung. Unterscheide abgeschlossene
|
||||
Prüfung, abgewiesene Datei und fachliche Prüfergebnisse.
|
||||
- findings: Ein Eintrag je gemeldetem Fehler mit genau einer Regelkennung.
|
||||
Übernimm ausschließlich Fehler aus dem Prüfbericht.
|
||||
- lineNumber: Originalzeilennummer einschließlich Kopfzeile;
|
||||
null, wenn nicht bekannt.
|
||||
- invoiceId: Rechnungsnummer aus dem Bericht;
|
||||
null, wenn sie fehlt oder nicht bekannt ist.
|
||||
- description: Belegter Fehlerbefund auf Deutsch.
|
||||
- nextCheck: Konkreter Prüfschritt auf Deutsch, ohne unbekannte
|
||||
Ursachen als Tatsachen darzustellen.
|
||||
- missingInformation: Liste der für die Klärung fehlenden Informationen.
|
||||
Verwende eine leere Liste, wenn keine fehlen.
|
||||
- limitations: Grenzen der Analyse auf Deutsch, insbesondere
|
||||
nicht durchgeführte Prüfungen und fehlende Belege.
|
||||
|
||||
Bei Rejected beschreiben die findings ausschließlich Dateifehler.
|
||||
Erfinde keine fachlichen Rechnungsfehler.
|
||||
|
||||
Ohne gemeldete Fehler ist findings eine leere Liste.
|
||||
Die Analyse erteilt keine Importfreigabe.
|
||||
|
||||
Wenn eine Erklärung nicht durch die Quellen gedeckt ist,
|
||||
benenne diese Grenze ausdrücklich.
|
||||
@@ -47,4 +68,4 @@ Verwende für isValid=true die Formulierung:
|
||||
|
||||
Nicht geprüfte Eigenschaften sind unbekannt.
|
||||
Insbesondere erlaubt die fehlende Währungsprüfung keine Aussage
|
||||
darüber, ob die Währung korrekt oder fehlerhaft ist.
|
||||
darüber, ob die Währung korrekt oder fehlerhaft ist.
|
||||
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"summary": {
|
||||
"type": "string"
|
||||
},
|
||||
"findings": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"lineNumber": {
|
||||
"type": ["integer", "null"],
|
||||
"description": "Zeilennummer aus dem Prüfbericht, einschließlich Kopfzeile; null, falls unbekannt."
|
||||
},
|
||||
"invoiceId": {
|
||||
"type": ["string", "null"],
|
||||
"description": "Rechnungsnummer aus dem Prüfbericht; null, falls sie fehlt oder nicht bekannt ist."
|
||||
},
|
||||
"ruleId": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"CSV-001",
|
||||
"INV-001",
|
||||
"INV-002",
|
||||
"INV-003",
|
||||
"INV-004"
|
||||
]
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Durch den Prüfbericht belegter Fehlerbefund."
|
||||
},
|
||||
"nextCheck": {
|
||||
"type": "string",
|
||||
"description": "Nächster Prüfschritt, ohne unbekannte Ursachen als Tatsachen darzustellen."
|
||||
},
|
||||
"missingInformation": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"lineNumber",
|
||||
"invoiceId",
|
||||
"ruleId",
|
||||
"description",
|
||||
"nextCheck",
|
||||
"missingInformation"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"limitations": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"summary",
|
||||
"findings",
|
||||
"limitations"
|
||||
],
|
||||
"additionalProperties": false
|
||||
}
|
||||
@@ -174,4 +174,42 @@ Bewertung: für diesen Testlauf bestanden.
|
||||
### Grenzen
|
||||
Je ein manueller C#-Testlauf pro Fall.
|
||||
Keine Aussage über zuverlässige Wiederholbarkeit oder andere Eingaben.
|
||||
Die Antworten werden bislang als Freitext ausgegeben und manuell geprüft.
|
||||
Die Antworten werden bislang als Freitext ausgegeben und manuell geprüft.
|
||||
|
||||
## Strukturierte C#-Testläufe vom 11.09.2026
|
||||
|
||||
### Konfiguration
|
||||
- Modellbereitstellung: importassist-analysis
|
||||
- Antwortschema: docs/ai-analysis.schema.json
|
||||
- Structured Outputs mit aktiviertem strikten Modus
|
||||
- Deserialisierung in InvoiceAnalysis und AnalysisFinding
|
||||
- Maximale Ausgabetokens: 2000
|
||||
|
||||
### Completed-Bericht
|
||||
- JSON erfolgreich in C# eingelesen.
|
||||
- Sechs Befunde mit korrekten Zeilen und Regelkennungen.
|
||||
- limitations korrekt als Liste auf oberster Ebene.
|
||||
- Fehlende Rechnungsnummer in Zeile 6 als leerer String statt null.
|
||||
Das Schema erlaubt diesen String; die semantische Vorgabe wurde verletzt.
|
||||
- Empfehlung zur Änderung auf einen positiven Betrag zu pauschal.
|
||||
Der fachlich richtige Betrag muss zuerst anhand der Quelle geklärt werden.
|
||||
- Tokenverbrauch: 1894 Eingabe, 874 Ausgabe.
|
||||
|
||||
Bewertung: Struktur bestanden, fachliche Prüfung teilweise bestanden.
|
||||
|
||||
### Rejected-Bericht
|
||||
- JSON erfolgreich in C# eingelesen.
|
||||
- Genau ein Befund: CSV-001, Zeile 3, invoiceId null.
|
||||
- Keine konkrete Fehlerursache erfunden.
|
||||
- Fehlende Originalzeile und ausgebliebene fachliche Prüfung benannt.
|
||||
- Tokenverbrauch: 1662 Eingabe, 236 Ausgabe.
|
||||
|
||||
Bewertung: festgelegte Kriterien in diesem Lauf bestanden.
|
||||
|
||||
### Offene Punkte
|
||||
- Leere oder ausschließlich aus Leerzeichen bestehende invoiceId
|
||||
zusätzlich in C# zurückweisen; bei fehlender Nummer ist null vorgesehen.
|
||||
- Korrekturvorschläge müssen den fachlich richtigen Quellwert respektieren.
|
||||
- Ablehnungen, abgebrochene Antworten und ungültige Antwortstrukturen
|
||||
werden im Code behandelt, wurden aber noch nicht gezielt getestet.
|
||||
- Einzelne erfolgreiche Läufe belegen keine zuverlässige Wiederholbarkeit.
|
||||
Reference in new issue
Block a user