Versionshistorie
Version 0.6.0 (In Entwicklung)
- PostfachOptionen/IPostfachLeser: Neuer Ablageordner
VorschlagOrdnerfuer Dokumente, die unter der Anlageschwelle blieben. Bisher kannte die Ablage nur Erfolg oder Fehler, und ein Beleg, der nur als Vorschlag gemeldet wurde, landete imVerarbeitetOrdner— neben den tatsaechlich angelegten Auftraegen und von ihnen nicht zu unterscheiden. In der Pilotphase mit angehobener Anlageschwelle ist genau diese Trennung der Arbeitsvorrat fuer die manuelle Nachkontrolle.IPostfachLeser.MarkiereVerarbeitetAsyncnimmt statt desbool erfolgjetzt das AblagezielAblage(Verarbeitet, Fehler, Vorschlag);AibeErgebnis.Ablageleitet es aus Staffel-Entscheid und Beleganlage ab. Ohne gesetztenVorschlagOrdnerbleibt das Verhalten wie bisher. - GraphPostfachLeser:
Quelledarf ein Ordnerpfad sein (Inbox/Bestellungen), aufgeloest Ebene fuer Ebene ueber die Kindordner; bisher wurden nur oberste Ordner per Anzeigename gefunden und ein Unterordner des Posteingangs brach den Start mit „Quellordner nicht gefunden" ab. Die Ablageordner entstehen jetzt unterhalb des Quellordners wie bei IMAP und Dateisystem — bisher legte Graph sie als oberste Ordner neben dem Posteingang an. Bestehende Graph-Installationen finden neue Mails deshalb ab dieser Version unterPosteingang/Verarbeitetstatt im oberstenVerarbeitet; die alten Ordner bleiben unangetastet.
Version 0.5.1
- MesoXPO.Business auf
2026.4.79-beta55angehoben (Bugfix bei den Beleganhaengen): Bisher vergab die Bibliothek die Dokumentgruppe eines neuen Belegs ausMAX(T496CMP.C014) + 1und schrieb sie nachT025.C076undT496CMP.C012. Dieser Zaehler ist kein WinLine-Schema und lief in der Praxis nicht sauber hoch — in der Folge landeten die Originalbestellungen mehrerer Auftraege in einer Gruppe, und WinLine zeigte am einzelnen Auftrag auch die Bestell-PDFs fremder Auftraege. Ab beta55 ist die Gruppe die Archiv-DokId des ersten Anhangs (Schema des MESO Archivimporters); eine am Beleg schon vorhandene Gruppe bleibt erhalten. Die Zuordnung wird damit je Beleg eindeutig. Bereits falsch gruppierte Belege muessen einmalig in der Datenbank korrigiert werden (C076 je Beleg auf die DokId seines eigenen Anhangs, C012 der Anhaenge entsprechend); der Dienst selbst verhaelt sich sonst unveraendert. Nebeneffekt:MesoAibe.DiagnoseToolzieht dieMicrosoft.Extensions.*-Pakete von 10.0.11 auf 10.0.12 nach, weil die Bibliothek diese Mindestversion verlangt.
Version 0.5.0
-
AibeServiceKonfiguration/AibeOptionen: Die Stellschrauben der Semantik-Stufe sind jetzt über
Aibe:Kierreichbar —MinAehnlichkeit,AutoAcceptKonfidenz,AmbiguitaetsAbstand,RerankBestaetigtKonfidenz,MaxRerankKandidaten,IndexTtl,IndexFehlerSperre,IndexZwischenspeicherAlle. Sie existierten inSemantikOptionender Bibliothek schon, das Service-POCO kannte sie aber nicht, sodass sie im Betrieb unveränderbar auf den Defaults standen. BesondersMinAehnlichkeitist modellabhängig: ein Embedding-Modell mit hohem Ähnlichkeits-Grundniveau macht bei0.35praktisch jeden Artikel zum Kandidaten, und ohne diesen Weg gab es dagegen keinen Hebel. Alle Felder sind nullable, ein fehlender Schlüssel behält also den Bibliotheks-Default — beiIndexZwischenspeicherAllebleibt0dabei ein gültiger Wert („Zwischenspeichern aus"). Sie stehen bewusst nicht in der ausgeliefertenappsettings.json, damit ein eingefrorener Wert spätere Default-Verbesserungen nicht blockiert -
AibeOptionen/XpoStammdatenQuelle: Neue Option
Aibe:StammdatenCacheMinuten(AibeOptionen.StammdatenCacheDauer) für die Gültigkeitsdauer des Artikel-/Preis-Zwischenspeichers, bisher fest auf dem Bibliotheks-Default von 5 Minuten. Bis zum Ablauf ist eine frisch in WinLine angelegte Artikelnummer für alle Matching-Stufen unsichtbar — auch für die Fuzzy- und Nummernstufen, die gar nicht am Embedding-Index hängen; das wurde regelmäßig als „der Embedding-Cache muss erst neu gebaut werden" fehlgedeutet.0liest bei jedem Zugriff neu, ohne Angabe bleibt es bei 5 Minuten -
MesoAibe.DiagnoseTool (neu, PR #20): Konsolen-Werkzeug fuer den Kundeneinsatz —
statuszeigt den Embedding-Cache-Stand eines Mandanten (Anzahl Eintraege, Modell/BaseUrl),rebuildstoesst den Aufbau manuell an und zeigt Fehler live in der Konsole statt nur im Servicelog,matchingtestet Artikel-Matching interaktiv inklusive Embedding/Rerank (anders alsMesoTestConsoleim Bibliotheks-Repo, das Embedding bewusst auslaesst). Reines lokales CLI-Werkzeug ohne neuen Netzwerk-Port; wird ab diesem Release als eigenes Zip-Asset ausgeliefert (sieheMesoAibe.DiagnoseTool/README.md). -
MesoAibe.DiagnoseTool: Neuer Befehl
validiere <Mandant> <dokument.eml|.pdf> [--soll <datei>] [--bericht <pfad>]— schickt eine echte eingegangene Bestellung durch dieselbe Extraktion und denselben Matching-Sammelaufruf wie der Dienst und zeigt je Position, was die Extraktion gelesen hat und was das Matching daraus macht. Damit laesst sich eine Fehlzuordnung einer der beiden Stufen zuordnen, statt sie zu erraten. Je Position erscheint das Urteilautomatisch/zu pruefen/ohne Treffer(dieselben Schwellen, die der Dienst anwendet) sowie bei mehreren Kandidaten die naechsten drei.--sollgibt eine erwartete Artikelnummer je Position vor und macht daraus eine Pruefung mit Bilanz (getroffen/falsch/nicht gefunden; der Abgleich laeuft ueber die Vergleichsform, die Nummer muss also nicht zeichengenau abgeschrieben werden),--berichtschreibt das Ergebnis als Markdown. Es wird kein Beleg angelegt und kein Import-XML geschrieben; Extraktion und Rerank kosten wie ein echter Durchlauf. Der Befehl bindet das volleAibe-Schema des Dienstes und braucht deshalb einen Extraktions-Zugang und den Mandanten-Eintrag — nur ueber ihn greift ein mandantenspezifischerExtraktionPrompt; fehlt er, laeuft die Extraktion mit dem Standard-Prompt und das Werkzeug weist darauf hin. -
MesoAibe.DiagnoseTool: Neuer Dialog-Befehl
neuimmatching-Modus — lädt Artikel, Preise und Ersatznummern sofort neu, statt den Ablauf des Zwischenspeichers (fünf Minuten) abzuwarten. Bis dahin ist eine frisch in WinLine angelegte Artikelnummer in allen Stufen unsichtbar, auch in den Fuzzy- und Nummernstufen, die gar nicht am Embedding-Index hängen — das wurde regelmäßig als „der Embedding-Cache muss erst neu gebaut werden" fehlgedeutet. Der Hinweistext sagt deshalb ausdrücklich, dassneuden Index nicht anfasst und dafürrebuild <Mandant>zuständig ist -
MesoAibe.DiagnoseTool: Der
matching-Dialog weist jetzt darauf hin, wenn eine Eingabe ohne#nach einer Nummer aussieht (kein Leerzeichen, mindestens eine Ziffer, ab drei Zeichen) und die Textsuche keinen Kandidaten über der Auto-Accept-Schwelle geliefert hat. Ohne#gilt die Eingabe als Bezeichnung, es laufen also nur die Textstufen — eine hinterlegte Artikel-, Ersatz- oder Kundenartikelnummer wird dann nicht gefunden, was leicht als „Nummer fehlt im Stamm" fehlgedeutet wird. Der Hinweis nennt den fertigen Befehl (a #<Eingabe>) und ändert nichts am Matching -
MesoAibeServiceCollectionExtensions: Neue Methode
AddMesoAibeExtraktion(optionen)— registriert nur die Extraktion samt Inhaltsteil-Aufbereitern, also den Teil vonAddMesoAibeCore, der ohne Beleganlage, WebService und Anlage-Staffel auskommt und die Konfiguration nicht validiert.AddMesoAibeCoreruft sie auf; das DiagnoseTool nutzt sie fuervalidiere, damit die Bedingung fuer den PDF-zu-Bild-Aufbereiter nicht ein zweites Mal nachgebaut wird. -
OrdnerLeser:
LiesDokument(pfad)ist jetzt oeffentlich und liefert Dokument plus Rohbytes — dieselbe Abbildung von.eml/.pdf, die die Pipeline verwendet. Das DiagnoseTool liest damit eine einzelne Datei ein, statt die Abbildung zweitgleisig nachzubauen. -
MesoXPO.Business auf
2026.4.79-beta40angehoben (Verhaltensaenderung im Artikel-Matching): Die Nummernstufen sind fehlertolerant geworden — eine genannte Artikelnummer, die sich nur in Trennzeichen unterscheidet, trifft mit Konfidenz 94 und wird ohne LLM-Aufruf uebernommen; ein Zahlendreher oder ein einzelnes falsches Zeichen erzeugt einen Kandidaten mit Konfidenz 70 unter der Auto-Accept-Schwelle, der in den Rerank geht. Der Rerank erhaelt jetzt zusaetzlich die genannte Nummer und wird auch fuer Positionen ausgeloest, die nur einen Kandidaten unter Auto-Accept haben oder gar keine Bezeichnung tragen — solche Positionen liefen bisher ungeprueft durch.AibeVerarbeitungund die Konfiguration bleiben unveraendert: die Kaskade greift ueberFindeMehrereMitEmbeddingAsyncvon allein, beide Stufen sind per Default an. Der README-Hinweis „Zahlendreher deckt der Prompt nicht ab" ist damit ueberholt und ersetzt.
Version 0.4.0
- PngKodierer (Bugfix, PR #13): Docnet/PDFium rendert PDF-Seiten mit praemultipliziertem Alpha
auf transparentem Grund; der Encoder verwarf das Alpha und lieferte fuer jede echte Seite ein
komplett schwarzes Bild. Jetzt wird gegen Weiss kompositiert (
Kanal + (255 - Alpha)), Regressionstest mit variablem Alpha. Ohne den Fix warPdfAlsBildFuerExtraktionaus 0.2.4 in der Praxis unbrauchbar. - Demo-Stack: Ollama-Profil auf das Vision-Modell
qwen2.5vlumgestellt (Rerank bleibt beim Textmodell),PdfAlsBildFuerExtraktionin beiden Profilen gesetzt; neuer Testfalltestdaten/t9_auermann_schlecht_gescannt_kein_text.pdf(Scan-PDF ohne Textlayer). - Artikelmatching-Sammelaufruf (MesoXPO.Business 4.79-beta37, PR #266 der Bibliothek):
AibeVerarbeitungruftIArtikelMatchingService.FindeMehrereMitEmbeddingAsynceinmal fuer alle Positionen eines Belegs auf stattFindeMitEmbeddingAsyncje Position — ein Embedding-Aufruf fuer alle unsicheren Positionen, hoechstens ein Rerank-Aufruf fuer alle mehrdeutigen. Verhaltensaenderung der Bibliothek: woertlich identische Bezeichnungen tragen jetzt Matchgrund"Bezeichnung (exakt)"(Konfidenz 92) statt"Bezeichnung (Fuzzy)"(85), sichere Identifier-Treffer fuehren keine"Bezeichnung (Semantik)"-Kandidaten mehr in der Liste. Demo-Stack:RerankModelaufqwen2.5vl(=ExtraktionModel) umgestellt, damit Ollama kein drittes Modell zusaetzlich zu Extraktion/Embedding vorhalten muss. - Matching-Konsolidierung (MesoXPO.Business 4.79-beta38, PR #267 der Bibliothek):
XpoArtikelStammProvider.LadePreiselaedt T043 jetzt flach ueber zwei Abfragen statt einer Abfrage je Artikel (N+1) — weilIStammdatenQuelleinMesoAibeServiceCollectionExtensionstransient registriert ist, lief die Preisladung bisher bei JEDEM Beleg kalt. Preiszeilen inaktiver Artikel (verkaufte Chargen) entfallen dabei: eine Kundenartikelnummer liefert keine inaktive Charge mehr als Kandidat mit Konfidenz 96.ArtikelMatcherfuehrt ab 2000 Artikeln einen Token-Vorfilter vor den Fuzzy-Stufen (Schwelle ueberAddStammdatenMatching(fuzzyVorfilterAb), Default 2000, in MesoAibe ungenutzt = Default) — das ist KEINE reine Performance-Massnahme: ab der Schwelle faellt jeder Fuzzy-Kandidat raus, dessen Text kein vollstaendiges Suchtoken (>=3 Zeichen) enthaelt, Tippfehler-/Abkuerzungstreffer koennen dadurch aus der Fuzzy-Kaskade verschwinden (Rueckfallnetz: die nachgelagerte Embedding-Stufe faengt das meist auf, ist aber keine Zusicherung).KundenMatchInputist[Obsolete], NachfolgerPersonenkontoMatchInput(GenannteKundennummer->GenannteKontonummer) — siehe naechster Punkt fuer die Abloesung vonKundenMatcherdurchPersonenkontoMatcherin MesoAibe. Pilot-Lauf Demo-Mandant 500M: Artikelmatching (inkl. Preisladung) je Beleg zuvor rund 22s (am Demo-Mandanten vor diesem Bump beobachtet), in einem Pilot-Lauf gemessen 0,4s (siehedocs/superpowers/pilotlauf-2026-09-05-beta38.md) — dieser Lauf hatte ausschliesslich exakte Artikelnummern-Treffer und deckt die Fuzzy-Kaskade/den Token-Vorfilter damit nicht ab. - Personenkonto-Matching (MesoXPO.Business 4.79-beta39, Issue #268 der Bibliothek):
BelegVorschlagBuilder.MatcheKundeerwartet jetztIPersonenkontoMatcherstatt der Debitor-HuelleIKundenMatcher(die Huelle bleibt in der Bibliothek bestehen, ist aber nicht mehr die Builder-Abhaengigkeit) — MesoAibes Tests instanziieren daherPersonenkontoMatcher()stattKundenMatcher().RohBelegdatentraegt neuPlzGenannt,StrasseGenannt,LandGenannt,WebsiteGenannt(von der Extraktion automatisch befuellt, kein Belegfeld-Konfigurationsaufwand), wodurch die Adress- (PLZ+Strasse-Fuzzy, 75/80) und Website-Stufe (70) der Kaskade jetzt greifen.IStammdatenQuelle/XpoStammdatenQuelleliefern zusaetzlichLadeBankverbindungen(),LadeMandant()undLadeKonten(Kontoart)(delegieren an den vorhandenenXpoKontoStammProvider);AibeVerarbeitunglaedt Bankverbindungen und Mandant und reicht sie anMatcheKundedurch (IBAN aktuell ohne Wirkung:RohBelegdatenhat bewusst keinIbanGenannt— der Anwendungsfall ist die eingehende Bestellung, nicht die Eingangsrechnung). Der tatsaechliche Effekt vonmandant: die eigene Mandanten-USt-ID wird beim USt-ID-Matching uebersprungen (Stufe 3), und die Adress-Stufe bekommt einen Land-Bonus (Konfidenz 80 statt 75, wennmandant.LandmitKontoRow.Landuebereinstimmt und keinLandGenanntim Dokument steht) — die Laenderplausibilitaet (UstIdLaenderPlausibilitaet.PasstZuLand) selbst haengt aninput.Land(RohBelegdaten.LandGenannt) und war schon vor der Mandant-Verdrahtung aktiv.KontoartbleibtKontoart.Debitor(Default, unveraendert) — Interessenten (Kennzeichen 4) bleiben aussen vor, siehe Issue #18: AIBE legt nur Auftraege an, ein Interessenten-Treffer liesse sich ohne Debitorenkonto nicht ummuenzen.
Version 0.2 (Releases 0.2.0 bis 0.2.4)
-
PdfAlsBildFuerExtraktion (neu, 0.2.4, PR #12): Option
Aibe:Ki:PdfAlsBildFuerExtraktionrendert PDF-Seiten auf dem lokalen Extraktionspfad per Docnet/PDFium zu PNG und schickt sie einem Vision-faehigenExtraktionModel, statt sie ueber den ohnetessdatawirkungslosen Tesseract-Pfad in Text zu wandeln. Behebt den AbbruchPDF '<Dateiname>' lieferte keinen Text (OCR fehlgeschlagen)bei Scan-PDFs. PNG-Encoder ohne Fremdpaket (ZLibStreamaus der BCL). Defaultfalse. -
MesoXPO.Business 4.79-beta35 (PR #259 der Bibliothek, keine Host-Aenderung): Auspraegungen (Chargen, Seriennummern, Varianten) im Artikel-Matching — textgleiche Chargen erscheinen nicht mehr als eigene Kandidaten, kopierte EAN/Alternativnummern/Hersteller-Codes zaehlen nur am Hauptartikel, eigene Werte treffen die Auspraegung, der Embedding-Index bettet Chargen nicht doppelt ein,
NurChargenartikelfragt T024 nicht mehr je Position ab. Neu: Ein Endtreffer auf einen Hauptartikel mit Auspraegungen ohne gewaehlte Auspraegung wird auf Konfidenz 50 gedeckelt und im Bericht als „Auspraegung offen" ausgewiesen — der WinLine-Import nimmt die reine Hauptartikelnummer an, legt aber nur die Hauptartikelzeile an. LiegtAnlage.AnlegenAbKonfidenzueber 50, endet ein solcher Beleg als Vorschlag. -
MesoXPO.Business 4.79-beta33:
NurChargenartikelder Prozedur-Aufloesung bewertet jetzt die T024-Zeile des Basisjahres des Mandanten (Bibliotheks-Bugfix inXpoProzedurArtikelZugriff, PR #255); vorher konnte irgendeine Wirtschaftsjahr-Zeile des Artikels entscheiden. -
Stammdaten-Fallback der Belegfelder (MesoXPO.Business 4.79-beta32, PR #253):
KopffelderkoennenStammfeld(Pfad auf Personenkonto oder Ansprechpartner) undGruppetragen;AddMesoAibeCoreregistriert denStammfeldAnreichererder Bibliothek immer (vor den Prozedur-Aufloesungen), der Orchestrator reichtkontext.StammwerteanFinalisiereweiter. Ein Feld mitStammfeldwird immer geschrieben — WinLine importiert angezeigte Vorlagenfelder sonst leer. README-Abschnitt „Stammdaten-Fallback" mitLief.*-Beispiel. -
MesoXPO.Business 4.79-beta34: Extraktionsschema vollstaendig
required(behebtSchema is too complex), Plausibilitaetspruefung der Positionsanzahl (fail-closed, Mail landet im Fehlerordner), Stammdaten-Cache im Artikel-Provider (60 Positionen: Matching 32 s statt 1063 s),MaxTokens-Default 16384 — Vorlageappsettings.jsonentsprechend angehoben. -
MesoXPO.Business 4.79-beta32: Anbindung des Fremdsprachen-Matchings (Stufe 5b) und der generischen Prozedur-Artikelaufloesung — neue Optionen
FremdsprachenundProzedurAufloesungeninAibeOptionen/AddMesoAibeCoreund als Mandanten-Sektionen inappsettings.json; der Orchestrator reicht die Dokumentsprache ans Matching durch und uebergibt das Ergebnis der Anreicherer-Kette anFinalisiere(ersetzte Treffer, z.B. Chargen-Artikelnummern, kommen so in den Beleg; ProtokollzeileTreffer ersetzt). -
MesoAibe.Service:
Kopffelder/Positionsfelderbinden den BibliothekstypBelegfelddirekt (POCO-Spiegel entfernt) — interne Extrakt-Felder ohneVorlagenfeldsind damit konfigurierbar. -
LizenzPruefung: Lizenz-Zugangsdaten jetzt auch ueber die Konfiguration (
Aibe:Lizenz:Kundennummer/Lizenznummer) — Standardquelle im Kundeneinsatz; die UmgebungsvariablenLICENSE_CUSTOMER_NR/LICENSE_LICENSE_NRgewinnen bei Vorhandensein als Override (je Feld einzeln)
Version 0.1
- MesoAibe.Core (neu): Quellenneutraler Kern —
AibeOptionen/AnlageStaffel(Beleganlage- Konfidenz-Staffel mit getrennter Druckschwelle),BelegAnlageEntscheid(pure Entscheidung Vorschlag/Anlegen-ohne-Druck/Anlegen-mit-Druck), OrchestratorAibeVerarbeitung(Extraktion -> Matching -> Anreicherung -> Beleganlage), DI-EinstiegAddMesoAibeCore. - MesoAibe.Core (neu):
NullKontaktRerankerals Fallback, wenn keine Rerank-Quelle konfiguriert ist (weder Anthropic-Key noch BYO-Rerank-Endpunkt) — der Ansprechpartner-Schritt degradiert dann auf reine E-Mail-exakt-Suche, der Host bleibt trotzdem startfaehig. - MesoAibe.Ingest (neu):
IPostfachLeser-ImplementierungenOrdnerLeser(Dateisystem, .eml/.pdf),ImapPostfachLeser(MailKit) undGraphPostfachLeser(Microsoft Graph,ClientSecretCredential), konfiguriert je Quelle ueberPostfachOptionen. - MesoAibe.Service (neu): Standalone-Host mit
AibeServiceKonfiguration(Aibe:Ki/Aibe:Mandanten/Aibe:IntervallSekunden), Lizenzpruefung gegen den ArtikelMESO-AIBE(LICENSE_CUSTOMER_NR/LICENSE_LICENSE_NR), Intervall-WorkerAibeWorker, Serilog-Journal und Textberichte (.txt) je Dokument. - CI/CD (neu):
.github/workflows/release.yml— NuGet-Publish vonMesoAibe.Core/MesoAibe.Ingestnach GitHub Packages und self-containedwin-x64-Zip vonMesoAibe.Serviceals Release-Asset, ausgeloest beirelease: published. - GraphPostfachLeser/ImapPostfachLeser (Bugfix): Doppelanlage-Schutz — Nachrichten werden
unmittelbar nach erfolgreichem Lesen als gelesen markiert (Graph:
isRead-Patch mitisRead eq false-Filter; IMAP: Quellordner mitFolderAccess.ReadWrite,Seen-Flag), statt erst beim Verschieben in den Ablageordner. Verhindert, dass ein spaeter scheiternder Move dieselbe Nachricht beim naechsten Lauf erneut liefert. - AibeWorker (neu): zusaetzlicher, prozesslebenslanger Gurt gegen Doppelverarbeitung ueber
VerarbeiteteQuellen(Schluessel Mandant+Postfach-Index+QuellId) — siehe Abschnitt "Grenzen v1". - MesoAibe.Service/Program.cs (Bugfix):
Directory.SetCurrentDirectory(AppContext.BaseDirectory)frueh beim Start, damit relative Pfade ausappsettings.jsonauch im Windows-Dienst-Betrieb (CWDSystem32) korrekt aufloesen; ausserdem ein Top-Level-catch, das einen unerwarteten Fehler beim Host-Aufbau/-Start alsFatalloggt und mit Exit-Code 1 beendet, sowie eine Duplikatpruefung aufAibe:Mandanten[].Mandant(getrimmt, case-insensitiv) — ein doppelter Eintrag wird uebersprungen statt zwei DI-Container fuer denselben Mandanten aufzubauen. - GraphMapper (Bugfix): Absender kommt jetzt aus
Message.From(fachlicher Absender), mitMessage.Sendernur als Rueckfallebene — vorher wurde ausschliesslichSendergelesen. - GraphMapper/MimeMapper (Bugfix):
Empfangsdatumwird ueberDateTimeOffset.LocalDateTime(statt.DateTime) abgebildet, damit das Offset der Quelle nicht verloren geht und beide Quellen konsistent Maschinen-Lokalzeit liefern.
Unterstuetzung: Bei Fragen zur Verwendung oder Integration wenden Sie sich an den CSS EDV-Support.
Keine Kommentare vorhanden
Keine Kommentare vorhanden