EBICS — Bankanbindung¶
Überblick¶
Der EBICS-Service ermöglicht die automatische Anbindung an jede deutsche Bank über den EBICS-Standard (Electronic Banking Internet Communication Standard). Kontoauszüge werden automatisch abgerufen und eingehende Zahlungen den offenen Rechnungen im CRM zugeordnet.
Funktionen¶
- Automatischer Kontoauszug-Abruf — Täglich (MT940/camt.053) und stündlich (MT942/camt.052)
- Auto-Reconciliation — Bankumsätze werden offenen Rechnungen automatisch zugeordnet
- Mahnwesen-Integration — Zahlungseingänge stoppen Mahnläufe sofort
- Echtzeit-Cashflow — Stündliche Umsatzdaten im CRM-Dashboard
- Multi-Bankkonto — Beliebig viele Konten bei verschiedenen Banken
- GoBD-Archivierung — Rohe Kontoauszüge 10 Jahre aufbewahrt
Voraussetzungen¶
Was die Bank bereitstellt¶
Nach Beantragung eines EBICS-Zugangs stellt die Bank folgende Daten bereit:
| Information | Beschreibung |
|---|---|
| Host-ID | Technische Kennung des Bank-Servers |
| Partner-ID | Kundennummer im EBICS-System |
| User-ID | Benutzer-ID für den Zugang |
| Server-URL | URL des EBICS-Servers der Bank |
Zusätzlich müssen die gewünschten Order Types (STA, VMK, C53, C52) bei der Bank freigeschaltet werden.
Was der Kunde bereitstellt¶
| Information | Beschreibung |
|---|---|
| IBAN | Kontonummer des Bankkontos |
| BIC | Bankleitzahl (SWIFT-Code) |
| EBICS-Zugangsdaten | Host-ID, Partner-ID, User-ID (von der Bank erhalten) |
| Unterschrift | Physische Unterschrift auf dem INI-Brief |
Kein technisches Setup nötig
Der Kunde benötigt keine Software-Installation und kein Zertifikat-Management. Alles läuft über den xynap Setup-Wizard.
Einrichtung (Setup-Wizard)¶
Schritt 1: Bankdaten eingeben¶
Im CRM unter Finanzen → EBICS Bankkonten → Neues Konto die Bankdaten und EBICS-Zugangsdaten eingeben.
Schritt 2: Schlüssel generieren¶
RSA-Schlüssel werden automatisch generiert. Ein Klick auf „Schlüssel generieren" startet den Prozess.
Schritt 3: INI + HIA senden¶
Die Initialisierungsbriefe werden an die Bank gesendet. Anschließend muss der INI-Brief ausgedruckt, unterschrieben und per Post an die Bank geschickt werden.
Schritt 4: Aktivierung¶
Nach Erhalt des INI-Briefs aktiviert die Bank den Zugang (1-3 Werktage). Im Wizard auf „Aktivierung prüfen" klicken — bei Erfolg startet der automatische Abruf.
Unterstützte Formate¶
| Format | Order Type | Beschreibung | Frequenz |
|---|---|---|---|
| camt.053 | C53 | Kontoauszug (ISO 20022) | Täglich |
| camt.052 | C52 | Untertägige Umsatzdaten (ISO 20022) | Stündlich |
| MT940 | STA | Kontoauszug (SWIFT, wird abgelöst) | Täglich |
| MT942 | VMK | Untertägige Umsatzdaten (SWIFT, wird abgelöst) | Stündlich |
Format-Umstellung
Ab November 2026 stellen viele Banken MT940/MT942 ab. camt.053/052 wird automatisch bevorzugt.
Auto-Reconciliation¶
Eingehende Zahlungen werden automatisch offenen Rechnungen zugeordnet:
| Strategie | Konfidenz | Beschreibung |
|---|---|---|
| Exakte Referenz | 100% | Rechnungsnummer im Verwendungszweck oder SEPA End-to-End-ID |
| Betrag + Datum | 70% | Offener Betrag passt exakt, Datum im Fälligkeitsfenster |
| Gegenkonto IBAN | 60% | IBAN des Kunden bekannt, Betrag passt |
| Fuzzy Matching | 40% | Mustersuche im Verwendungszweck |
- Ab 85% Konfidenz: Automatische Zuordnung (CRM-Zahlung wird erstellt)
- Unter 85%: Vorschlag zur manuellen Bestätigung im Reconciliation-View
API-Endpoints¶
Alle Endpoints unter /api/v1/crm/ebics/. Authentifizierung via JWT, Tenant-Scoping automatisch.
Kontoverwaltung¶
GET /crm/ebics/accounts → Bankkonten auflisten
POST /crm/ebics/accounts → Bankkonto anlegen
GET /crm/ebics/accounts/{uuid} → Konto-Detail
PUT /crm/ebics/accounts/{uuid} → Konto bearbeiten
DELETE /crm/ebics/accounts/{uuid} → Konto deaktivieren
Schlüsselmanagement¶
POST /crm/ebics/accounts/{uuid}/keys/init → Keys generieren
POST /crm/ebics/accounts/{uuid}/keys/ini → INI an Bank senden
POST /crm/ebics/accounts/{uuid}/keys/hia → HIA an Bank senden
POST /crm/ebics/accounts/{uuid}/keys/activate → Aktivierung prüfen
GET /crm/ebics/accounts/{uuid}/keys/ini-letter → INI-Brief PDF
GET /crm/ebics/accounts/{uuid}/keys/status → Key-Status
Kontoauszüge¶
POST /crm/ebics/accounts/{uuid}/fetch → Manueller Abruf
GET /crm/ebics/statements → Auszüge filtern
GET /crm/ebics/statements/{uuid} → Auszug-Detail
GET /crm/ebics/statements/{uuid}/raw → Original-Datei (GoBD)
Transaktionen + Reconciliation¶
GET /crm/ebics/transactions → Transaktionen filtern
GET /crm/ebics/transactions/{uuid} → Detail
GET /crm/ebics/transactions/{uuid}/suggestions → Match-Vorschläge
POST /crm/ebics/transactions/{uuid}/reconcile → Manuell zuordnen
POST /crm/ebics/transactions/{uuid}/ignore → Ignorieren
POST /crm/ebics/transactions/{uuid}/undo → Rückgängig
POST /crm/ebics/reconcile/batch → Auto-Reconciliation
Dashboard¶
Berechtigungen¶
| Permission | Beschreibung |
|---|---|
ebics.view |
Bankkonten, Auszüge und Transaktionen ansehen |
ebics.manage |
Bankkonten anlegen/bearbeiten, Keys verwalten |
ebics.fetch |
Kontoauszüge manuell abrufen |
ebics.reconcile |
Zahlungen zuordnen, ignorieren, rückgängig machen |
Technische Details¶
Architektur¶
┌─────────────────┐ REST ┌──────────────┐ EBICS ┌──────────┐
│ Platform API │ ──────────── │ ebics-api │ ────────────── │ Bank │
│ (FastAPI) │ │ (Container) │ │ Server │
│ │ │ │ │ │
│ Parser │ │ Keys │ │ MT940 │
│ Reconciliation │ │ Connections │ │ camt053 │
│ Scheduler │ │ Protocol │ │ MT942 │
└─────────────────┘ └──────────────┘ │ camt052 │
└──────────┘
Scheduler¶
- Täglicher Abruf (~08:00 UTC, via CRM Daily Scheduler): Kontoauszüge (camt.053/MT940) + Auto-Reconciliation
- Stündlicher Intraday (eigener Background-Task, 07:00-20:00 UTC): Untertägige Umsätze (camt.052/MT942)
- Zeitfenster konfigurierbar via
EBICS_INTRADAY_START_HOUR/EBICS_INTRADAY_END_HOUR - Duplikat-Erkennung via SHA-256 Hash der Rohdaten
- Intraday-Auszüge werden kumulativ ersetzt (Bank liefert Tages-Kumulativ)
Key-Status Lifecycle¶
Nach dem HIA-Versand muss der INI-Brief ausgedruckt, unterschrieben und per Post an die Bank geschickt werden. Die Aktivierung durch die Bank dauert üblicherweise 1-3 Werktage. Danach kann der HPB-Download erfolgen (Button "Aktivierung prüfen").
Reconciliation-Status¶
| Status | Beschreibung |
|---|---|
unmatched |
Keine Zuordnung gefunden |
suggested |
Vorschlag vorhanden, manuelle Bestätigung nötig |
auto_matched |
Automatisch zugeordnet (Konfidenz ≥ 85%) |
manual_matched |
Manuell zugeordnet durch Benutzer |
ignored |
Als irrelevant markiert |
partial |
Teilzahlung — Rechnung nur anteilig beglichen |
Datenbank-Tabellen¶
ebics_bank_accounts— Bankkonten mit EBICS-Zugangsdaten und Key-Statusebics_bank_statements— Kontoauszüge inkl.raw_data+raw_hash(GoBD-Archivierung, 10 Jahre)ebics_bank_transactions— Einzelumsätze mit Reconciliation-Status und SEPA-Referenzen
Parser-Details¶
MT940-Parser (ebics_parsers.py):
- Bibliothek:
mt940(WoLpH/mt940) — API:mt940.MT940(io.StringIO(raw)).statements - Unterstützt Standard-SEPA-Tags (
SVWZ+,EREF+,MREF+, ...) und DK-Format-Subfelder (?30=BIC,?31=IBAN,?32=Name) - Liefert
Statement-Namedtuples mitstart_balance,end_balance,transactions
camt.053/052-Parser (ebics_parsers.py):
- Direktes XML-Parsing via Python
ElementTree(kein externes Framework) - Namespace-aware (
urn:iso:std:iso:20022:tech:xsd:camt.053.001.02) - Extrahiert
NtryRef,EndToEndId,RmtInf/Ustrd, IBAN ausRltdPties, BIC ausRltdAgts
Teststatus¶
103 Backend-Tests grün (Stand 2026-03-17):
| Test-Datei | Tests | Abdeckung |
|---|---|---|
test_ebics_parsers.py |
60 | MT940 (Standard + ABN AMRO + SEPA), camt.053 (Minimal + Real-Dateien) |
test_ebics_key_manager.py |
20 | Key-Lifecycle, Status-Transitions, Error-Handling |
test_ebics_reconciliation.py |
23 | Alle Matching-Strategien, Apply/Undo, Batch |
ebics-demobank/test_api.py |
67 | Demobank-API End-to-End |