Zum Hauptinhalt springen

ADV Vorlagen

Die Klasse InvoiceTemplate (Namespace DPlus.ADV.Models, Datei InvoiceTemplate.cs) beschreibt eine ADV-Vorlage zur Erkennung von Werten aus einem Beleg (Rechnung oder Dokument). Die Vorlage wird in der DB-Spalte PAV_YML der Tabelle dbo.NET_PROJEKT_ADV_VORLAGEN als YAML persistiert und mit YamlDotNet (PascalCase NamingConvention) deserialisiert (siehe IAdvVorlagenOMServiceExtension.CheckTemplate).

Hinweis: Da PascalCaseNamingConvention verwendet wird, entsprechen die YAML-Schlüssel exakt den C#-Property-Namen.

Aufbau einer Vorlage

Eine Vorlage besteht aus drei Bereichen:

  1. Auswahl – wann die Vorlage greift (Identifier, Keywords, BillerId).
  2. Felderkennung – wie Werte gefunden werden (InvoiceField-Properties).
  3. Aktionen / Parameter – was nach der Erkennung mit dem Beleg passiert (Parameters, Actions, Split).

Top-Level-Properties

PropertyTypBeschreibung
Identifierstring?Eindeutiger Text/Token (z.B. UID-Nr.), bei dessen Vorkommen die Vorlage automatisch ausgewählt wird (TemplateMatcherSelectTemplates.SelectTemplatesByIdentifierAsync).
KeywordsList<List<string>>?Liste von Schlüsselwortgruppen. Eine Gruppe matched, wenn alle Wörter der inneren Liste im Belegtext vorkommen.
BillerIdstring?Fix hinterlegte Kreditor-ID (KR_ID). Wird gesetzt, wenn die Vorlage immer demselben Kreditor zugeordnet ist.
CompanyIdstring?Fix hinterlegte Mandanten-ID (CO_ID). Übersteuert die automatische Mandantenerkennung.
OrderNumberInvoiceField?Erkennungsregel für die Auftragsnummer.
SchadenNumberInvoiceField?Erkennungsregel für die Schadennummer.
VertragNumberInvoiceField?Erkennungsregel für die Vertragsnummer.
TicketNumberInvoiceField?Erkennungsregel für die Ticketnummer.
InvoiceDateInvoiceField?Erkennungsregel für das Rechnungsdatum (Wert wird als Datum geparsed).
InvoiceNumberInvoiceField?Erkennungsregel für die Rechnungsnummer.
PaymentReferenceInvoiceField?Erkennungsregel für den Zahlungsreferenz-/Verwendungszweck.
NetAmountInvoiceField?Erkennungsregel für den Nettobetrag.
TotalGrossAmountInvoiceField?Erkennungsregel für den Bruttobetrag (Gesamtbetrag).
ObjektInvoiceField?Erkennungsregel für die Objektzuordnung.
VATMatchersList<WordMatch>?WordMatch-Regeln zur Erkennung von Umsatzsteuer-Positionen über IVatDetection.
AutogeneratedInvoiceTemplate?Verschachtelte Vorlage, die durch das ADV-Lernen automatisch erzeugt wurde. Wird zusätzlich zur manuellen Vorlage angewendet.
SplitList<List<string>>?Splitregeln für Mehrfachdokumente (Dokumenten-Vorlagen): Pro Treffer einer Gruppe wird der PDF-Stapel an dieser Seite getrennt.
ParametersList<TemplateParameter>?Vorlagen-Parameter (statisch oder über Matcher), werden in den DMS-Aktionen verwendet.
ActionsList<TemplateAction>?Aktionen, die nach der Erkennung ausgeführt werden (DMS-Verlinkung, SQL, Mandantensetzen, …).
KR_IDstring?(YamlIgnore) Laufzeit-Info: aufgelöste Kreditor-ID. Wird nicht serialisiert.
PAV_IDstring?(YamlIgnore) Laufzeit-Info: Vorlagen-ID aus der DB. Wird nicht serialisiert.
PAV_NAMEstring?(YamlIgnore) Laufzeit-Info: Vorlagenname aus der DB. Wird nicht serialisiert.

InvoiceField

Beschreibt, wie ein einzelner Wert aus dem Belegtext extrahiert wird. Die Erkennung läuft in dieser Reihenfolge (siehe TemplateMatcher.MatchTemplateField):

  1. Value – Wenn gesetzt, wird dieser fixe Wert direkt zurückgegeben.
  2. Matchers – RegEx-Matcher gegen den gesamten Belegtext.
  3. MatchReplace – RegEx-Match mit anschließendem Replace.
  4. WordMatchers – Wortbasierte Suche über WordMatch (positions-/zeilenbasiert).
  5. Positions – Werte aus festen Bildschirmbereichen (WordRectangle).
PropertyTypBeschreibung
Valuestring?Fixer Wert. Wenn gesetzt, werden die übrigen Regeln nicht ausgewertet.
MatchersList<string>?RegEx-Patterns mit benannter Capture-Group (?<value>…) (oder erste Gruppe). Match gegen text.
MatchReplaceList<WordMatchReplace>?RegEx-Suche + Replace; produziert den finalen Wert per Regex.Replace.
WordMatchersList<WordMatch>?Wortbasierte Suche – siehe WordMatch.
PositionsList<WordRectangle>?Liste von Rechtecken; alle Wörter, deren Bounding-Box vollständig enthalten ist, werden zurückgegeben.
Stripstring?Zeichenmenge, die vom finalen Wert per string.Trim(chars) entfernt wird. Wirkt auf Matchers und MatchReplace.

WordMatch

Wortbasierte Erkennungsregel (z.B. „Rechnungsnummer …… RE3345565").

PropertyTypBeschreibung
Matchstring[]?Konkrete Suchwörter. Nicht zusammen mit MatchRegExpr verwenden.
MatchRegExprstring[]?RegEx-Patterns als Alternative zu Match.
IgnoreWordsRegExprstring?RegEx für Zeichen/Wörter, die zwischen Suchwort und Wert ignoriert werden (z.B. [\.:]+ für Rechnungsnummer..............RE3345565).
PartialSearchbool (default false)Wenn true, wird das Suchwort als Teilstring eines Tokens erkannt (Rechnungsnummer:RE33453).
ValueRegExprstring?RegEx, dem der gefundene Wert genügen muss (z.B. „mind. eine Ziffer").
ValueInSameLinebool?Wenn true, muss der Wert in derselben Zeile wie das Suchwort stehen.

WordMatchReplace

Such-/Ersetzen-Paar, das in InvoiceField.MatchReplace verwendet wird.

PropertyTypBeschreibung
Searchstring?RegEx für die Suche (RegexOptions.IgnoreCase).
Replacestring?Replacement-Pattern für Regex.Replace.

WordRectangle

Rechteck in OCR-Pixelkoordinaten (Top-Left/Right-Bottom). Wird zur positionsbasierten Erkennung in InvoiceField.Positions verwendet.

PropertyTypBeschreibung
Left, Top, Right, BottomintBegrenzung des Rechtecks.

TemplateParameter

Definiert einen benannten Parameter, der in Actions (DMS-Properties, SQL-Statements) referenziert werden kann.

PropertyTypBeschreibung
Namestring?Parametername (Pflicht; Parameter ohne Namen werden ignoriert).
Valuestring?Statischer Wert.
MatchersList<string>?RegEx-Matcher; der erste Treffer im Belegtext überschreibt Value.

TemplateAction

Aktion, die nach der Erkennung gegen den Beleg ausgeführt wird (siehe DocumentTemplateMatcher).

PropertyTypBeschreibung
TypeTemplateActionTypeAktionstyp (siehe unten).
Namestring?Zielname (z.B. DMS-Property oder Parameter).
Sqlstring?SQL-Statement (für ExecuteSql, SetCompany, SetDmsLink, SetDmsProperty, SetDmsConName/Subject/Number). Parameter aus Parameters/Erkennung werden gebunden.
DatabaseDatabaseAuf welcher DB das SQL ausgeführt wird.

TemplateActionType

WertBeschreibung
SetCompanyMandant über SQL bestimmen; setzt den Beleg auf den ermittelten Mandanten und verwirft konkurrierende Erkennungen.
CreateParameterParameter aus SQL-Ergebnis erzeugen.
SetDmsLinkDMS-Verknüpfung setzen (Name = Linktyp, Wert(e) aus SQL).
SetDmsPropertyDMS-Property setzen (Name = Property, Wert(e) aus SQL).
ExecuteSqlBeliebiges SQL ausführen (z.B. Insert).
SetDmsConNameDMS-Container-Name setzen (Wert = erstes SQL-Ergebnis).
SetDmsConSubjectDMS-Container-Betreff setzen.
SetDmsConNumberDMS-Container-Nummer setzen.

Database

WertBeschreibung
SystemSystemdatenbank.
CompanyAktueller Mandant.
CompanyAllAlle erkannten Mandanten.

Vorlagenauswahl

Eine Vorlage wird angewendet, wenn eine der folgenden Bedingungen zutrifft (siehe TemplateMatcherSelectTemplates):

  • Ein Wort im Beleg entspricht Identifier (case-insensitive).
  • Eine Keyword-Gruppe aus Keywords ist vollständig im Belegtext enthalten.
  • Der Kreditor wurde über BillerId aufgelöst.
  • Die Vorlage ist als „Immer verwenden" markiert (PAV_IMMER_VERWENDEN in der DB).

Eine ggf. vorhandene Autogenerated-Sub-Vorlage wird zusätzlich zur ausgewählten Vorlage angewendet.

Beispiel (YAML)

Identifier: ATU12345678
BillerId: 04557DB2-03C2-49F2-96B5-73DBCCF799F5
Keywords:
- [Rechnung, Fair, Rescue]
InvoiceNumber:
Matchers:
- 'Rechnungsnummer\s+(?<value>RE\d+)'
Strip: ' '
InvoiceDate:
WordMatchers:
- Match: [Rechnungsdatum]
ValueInSameLine: true
ValueRegExpr: '\d{2}\.\d{2}\.\d{4}'
NetAmount:
Matchers:
- 'Nettobetrag\s+(?<value>[0-9]+,[0-9]+)\s+EUR'
TotalGrossAmount:
Matchers:
- 'Gesamtbetrag\s+(?<value>[0-9]+,[0-9]+)\s+EUR'
VATMatchers:
- Match: ['20,0%', 'Mwst.']
ValueInSameLine: true
Parameters:
- Name: Sachbearbeiter
Matchers:
- 'Sachbearbeiter:\s+(?<value>\w+)'
Actions:
- Type: SetDmsProperty
Name: Kostenstelle
Database: Company
Sql: |
select KS_NAME from KOSTENSTELLEN where KS_ID = @Sachbearbeiter

Validierung

Vor dem Speichern kann eine YAML-Vorlage mit IAdvVorlagenOMServiceExtension.CheckTemplate validiert werden; Fehler liefern Zeilen-/Spaltenangabe der YamlException.