Bankimport — Datenmodell, Laden, Erkennungsengine

Tabellen der Auszugszeilen und geplanten Positionen, Zeilenstatus, Laden aus der Dokumentenzentrale, Schritte der Erkennungsengine, Liste und Rechte.

Aus den Zeilen („RAW-Zeilen“) von Kontoauszügen (OTP-XML, UniCredit/CAMT-BkToCstmrStmt-XML, Erste-CSV) erzeugt die Erkennungsengine (Regeln + Rechnungsabgleich) geplante Belegpositionen („staged“), aus denen beim Abschluss Bankbuchungsbelege werden. Die Auszugsdateien liegen in der Dokumentenzentrale.

Datenmodell

Die Tabellennamen tragen in der Datenbank das eigene Präfix der Installation.

TabelleRolle
transaction_import_rowRAW-Auszugszeile; Status: 0 New, 1 Recognized (staged), 2 Booked, 3 Retry, 4 Manual, 5 Skipped; source_doc_id, row_hash, bankaccount_id, owner_account, matched_rule_id
transaction_import_stagedgeplante Belegpositionen
transaction_ruleErkennungsregeln
fileDatensatz der geladenen Datei
bankaccount, company_bankaccountBankkontenstamm und Unternehmensbindung (die Liste filtert darüber)
transaction, docverknüpfte Belege; ladbare Auszüge

Laden (loaddoc)

  1. Lädt das Dokument der Dokumentenzentrale (lokal, Google Drive oder OneDrive); prüft den gewählten Mandanten gegen den inhaltlichen Bereich (außerhalb: 0).
  2. Dublettenschutz auf Dokumentebene (isDocLoaded, mit force=1 umgehbar); die Eindeutigkeit von row_hash auf Zeilenebene bleibt.
  3. Zeile in file, formatabhängiges Parsen (bank/bankparser), Saldenaktualisierung der betroffenen Bankkonten, Kennzeichnung mit source_doc_id, danach automatischer Engine-Lauf.
  4. Antwort: neue, ergänzte, unveränderte Zeilen; nicht zugeordnete und keinem Unternehmen verbundene Konten; jetzt einem Mandanten zugeordnete Konten. Fehlende Auszugskonten werden auch in den Stamm aufgenommen.

Erkennungsengine (run, runMatchingEngine())

  1. A0: Rechnungskennungs-Token des Systems im Verwendungszweck → feste Rechnung.
  2. A: aktive Regeln nach sort_order (Eigentümer- und Partnerkonto, Richtung, Textfragment, Transaktionscode, normalisierter Textvergleich).
  3. B: einheitliche Rechnungserkennung (suggestInvoices: Token, FoxPost, Rechnungsnummer im Verwendungszweck, Partnerbankkonto, Name + Betrag, Kartenbelastung), auf den Mandanten der Zeile gefiltert; eine beglichene Rechnung wird nicht erneut vorgeschlagen.
  4. C2: mandantenübergreifende Erkennung von Spiegelentwürfen.
  5. D: Speichern der staged-Positionen mit Rundungsbehandlung (1–2 Forint Differenz als Rundungsposition; bei großer Differenz geht der gesamte Bankbetrag auf die Rechnung).

relinkaccounts verknüpft Zeilen mit bankaccount_id = 0 nachträglich über owner_account mit dem Stamm (ohne Betrag oder Status zu schreiben) und berechnet die Salden neu.

Liste

Filter: Unternehmensgruppe + Unternehmen (nach inhaltlichem Bereich, automatische Auswahl bei nur einer Gruppe oder einem Unternehmen), Bankkonto, Importzeilen-ID, Datum, Status; Sortierung nach Valuta, Partnername, HUF-Betrag, Status; Seitengrößen 10/25/50/100/alle. Währungsdaten aus dem CAMT-Element AmtDtls; bei gebuchten Zeilen die Begleichungen je Beleg (finance/transaction::getImportRowSettlements). Das Offcanvas „Rules“ listet die Regeln mit Nutzungszahl.

Berechtigungen

  • index() prüft nur Core access; das Menü nutzt canSee(list).
  • list (UNMAPPED): getList(), rules, companyaccounts, loadabledocs, filtercompanies; inhaltlicher Bereich über getCompanyGroupFilter().
  • run + Core modify: run, loaddoc, FoxPost-Endpunkte; process + Core modify: relinkaccounts (ohne inhaltlichen Bereich).
  • debug (nur Permission-Seed, bank_perm_v2.sql): die letzte Listenabfrage (getLastListSql()); genügt auch für das SQL der Regelliste.