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.
| Tabelle | Rolle |
|---|---|
transaction_import_row | RAW-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_staged | geplante Belegpositionen |
transaction_rule | Erkennungsregeln |
file | Datensatz der geladenen Datei |
bankaccount, company_bankaccount | Bankkontenstamm und Unternehmensbindung (die Liste filtert darüber) |
transaction, doc | verknüpfte Belege; ladbare Auszüge |
Laden (loaddoc)
- Lädt das Dokument der Dokumentenzentrale (lokal, Google Drive oder OneDrive); prüft den gewählten Mandanten gegen den inhaltlichen Bereich (außerhalb: 0).
- Dublettenschutz auf Dokumentebene (
isDocLoaded, mitforce=1umgehbar); die Eindeutigkeit vonrow_hashauf Zeilenebene bleibt. - Zeile in
file, formatabhängiges Parsen (bank/bankparser), Saldenaktualisierung der betroffenen Bankkonten, Kennzeichnung mitsource_doc_id, danach automatischer Engine-Lauf. - 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())
- A0: Rechnungskennungs-Token des Systems im Verwendungszweck → feste Rechnung.
- A: aktive Regeln nach
sort_order(Eigentümer- und Partnerkonto, Richtung, Textfragment, Transaktionscode, normalisierter Textvergleich). - 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. - C2: mandantenübergreifende Erkennung von Spiegelentwürfen.
- 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 Coreaccess; das Menü nutztcanSee(list).list(UNMAPPED):getList(),rules,companyaccounts,loadabledocs,filtercompanies; inhaltlicher Bereich übergetCompanyGroupFilter().run+ Coremodify:run,loaddoc, FoxPost-Endpunkte;process+ Coremodify: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.