dot.intern - Automatisierter Kreditkarten-Prozess mit Revolut und Bexio

David Berger
30. Juli 2019

In diesem Blogbeitrag zeigen wir unseren Kreditkarten-Prozess mit Revolut und Bexio. Als junges Consulting Unternehmen wollen wir Wein predigen und auch Wein trinken hinsichtlich der Agilisierung und Digitalisierung der Gesellschaft. Willkommen in einer technischen Runde. 

Als junges Unternehmen können wir von den modernsten Lösungen profitieren. Wir haben keinen Host, keine Altlasten, keine politischen oder strukturellen Konflikte, welche Innovationen verhindern. Digitalisierung bedeutet Software. Software hat heute eine beinahe ungeheuerliche gesellschaftliche Verantwortung, so auch jüngst Uncle Bob im heise developer. Geschickte Software kann ganze Industrien revolutionieren. 

In Vergangenheit: Der Einsatz von Firmen-Kreditkarten

Wir waren zuvor unzufrieden mit unserem Kreditkarten-Prozess. Der Ablauf war ungefähr so:

  1. Kreditkarte zähneknirschend einsetzen.
  2. Beleg mit der Bexio-Scanner-App in ein anderes Format transferieren (nicht digitalisieren!).
  3. Im Bexio eine Aufwendung manuell erfassen.
  4. Konto, Betrag, Kontakt, Einsatzzweck vervollständigen.
  5. Sehr lange auf die Kreditkarten-Abrechnung warten.
  6. Nochmals auf die Kreditkarten-Abbuchung warten, das heisst, auf die effektive Belastung des Bankkontos.
  7. Kreditkarten-Abbuchung vom Bankkonto mit den einzelnen Aufwendungen abstimmen.
  8. Währungsdifferenzen, Spesen und so weiter je Kreditkarten-Abrechnung manuell ausbuchen.

Der Prozess war zäh. Er stockte bereits bei der Belegtransferierung. Allerspätestens war der Prozess-Token bei der Bankkonto-Abstimmung verloren. Die nicht abgestimmten Kreditkarten-Abbuchungen häuften sich. Niemand war zufrieden. Ich war persönlich sehr unzufrieden. Mittlerweile habe ich dank Bexio gelernt, dass die Abstimmerei zwischen Kreditkarten-Abbuchung und den einzelnen Aufwendungen mit einem (virtuellen) Kassenkonto für die Kreditkarte vereinfacht hätte werden können. So oder so blieb ein unbefriedigender manueller Restaufwand.

Die neue Macht: API

Glücklicherweise können wir unser ERP Bexio mit einer API fernsteuern. Bexio hat die API branchenüblich dokumentiert. Mit einem API-Schlüssel können wir alles tun, was die Weboberfläche auch kann. So muss es sein.

Allerdings ist unsere Hausbank nicht konkurrenzfähig. Sie hat keine API für Kreditkarten-Transaktionen. Das habe ich ehrlich gesagt auch nicht erwartet. Durch einen Tipp eines Kunden haben wir von Revolut erfahren. Denn Revolut besitzt eine branchenübliche API und hat sie zweckmässig beschrieben. Perfekt, das hat mich ermutigt.

Für alltägliche Integrationen wie zwischen Slack, HubSpot, Eventbrite und Bexio nutzen wir bereits Zapier. Zapier hat einen Revolut Trigger für neue Transaktionen, also für Karteneinsätze. Allerdings hat Bexio keine Aktion, um eine neue Aufwendung zu erfassen. Schade. Ausserdem sind Mappings in Zapier machbar (tun wir auch für z. B. Eventbrite), aber mühsam und kompliziert. 

Die Lösung: Eine eigene Software

Eine Basisanforderung war für mich die Integration in Slack. Mit Slack möchte ich den ganzen Prozess überwachen und notfalls eingreifen, z. B. Transaktionen nochmals ins Bexio exportieren oder stornieren. Ich wollte für unsere Anwendung keine gesonderte Weboberfläche entwickeln, sondern in Slack einbetten. Mit dieser Basisanforderung ist Zapier überfordert. 

dotag-blog-content-revolut-code

Als originaler IREB Requirements Engineer habe ich natürlich klassische Spezifikationstechniken genutzt, um mein Verständnis über die Software zu schärfen. Unter anderem ist eine kleine Sequenzskizze entstanden, welche den Prozess veranschaulicht.

dotag-blog-Content-Revolut-Sequenzskizze

Die Software habe ich in Python programmiert. Mit Python habe ich bereits für unseren Scrum spielerisch programmierend Workshop experimentiert. Die Software kann komplett via Slack Befehle gesteuert werden. Ein Script auf einem Server triggert periodisch eine Synchronisation. Die Software ist sowohl lokal wie auch irgendwo auf der Cloud lauffähig. Sie hat eine kleine Persistenz, die den Zustand jeder Revolut-Transaktion protokolliert. Als Entwicklungsumgebung verwende ich JetBrains PyCharm, für die Versionierung GitHub. Jede Funktion ist mit Unittests abgedeckt, ganz konsequent mit TDD bin ich aber nicht vorgegangen. 

Was kann die Software? 

Die Software hat folgende Kernfunktionen:

  • holeRevolutTransaktionen: Holt Revolut-Transaktionen
  • filtereRevolutTransaktionen: Siebt die "uninteressanten" Revolut-Transaktionen aus wie z. B. Aufladungen, zurückgewiesene Transaktionen oder Kleinstbeträge für die Kreditkartenverifizierung. Aber auch bereits erfasste Transaktionen werden hier bereits ausgefiltert
  • transformiereRevolutTransaktionen: Bringt die verbliebenen Transaktionen in ein für mein Programm genehmes "Format"
  • erstelleOderSucheKontakt: Sucht einen bestehenden Kontakt - oder erstellt einen neuen mit den wichtigsten Informationen wie Name, Stadt, Land
  • ermittleBexioKonto: Ermittelt basierend auf dem Kontakt-Kontext einen MwSt-Satz und ein Bexio-Konto, Mappings sind konfigurierbar
  • ermittleBexioBenutzer: Ermittelt basierend auf den Kreditkarten-Informationen einen Bexio-Benutzer, Mappings sind konfigurierbar
  • erstelleAufwendung: Erstellt die finale Aufwendung im Bexio, die Mappings sind konfigurierbar wie z. B. Standard-Benutzer, Standard-MwSt-Satz, Standard-Konto
  • löscheBexioKontakt: Löscht einen Bexio-Kontakt, ist nur im Fehlerfall (Rollback) und für Unittests relevant
  • löscheBexioAufwendung: Löscht eine Bexio-Aufwendung, ist nur im Fehlerfall (Rollback) und für Unittests relevant

Im Slack-Kontext hat die Software folgende Funktionen:

  • benachrichtigeBenutzerUeberErfassteAufwendung: Informiert per Slack den Benutzer, sobald die Aufwendung erfolgreich im Bexio erfasst ist
  • leseRevolutKontostand: Holt den aktuellen Kontostand und warnt den Administrator beim Unterschreiten einer konfigurierbaren Schwelle
  • ermittleMeineOffenenBexioAufwendungen: Zeigt für den Slack-User die Transaktionen, die noch keinen Beleg im Bexio haben und dem Standard-Konto zugewiesen sind
  • ermittleAlleOffenenBexioAufwendungen: Zeigt alle offenen Aufwendungen im Bexio
  • ermittlePendingRevolutTransaktionen: Zeigt alle Revolut-Transaktionen, die noch im Status "pending" sind und somit noch nicht im Bexio erfasst sind
  • ermittleOffeneRevolutTransaktionen: Zeigt alle Revolut-Transaktionen, die aus irgendeinem Grund nicht erfasst werden konnten. Diese Liste muss leer sein :-)
  • erstelleBexioAufwendungNochmals: Erstellt basierend auf einer Revolut-Transaktion eine Bexio-Aufwendung unter Missachtung der Regeln von filtereRevolutTransaktionen
  • leseRevolutTransaktionDetails: Zeigt die Details einer Revolut-Transaktion
  • sucheRevolutTransaktion: Sucht nach Revolut-Transaktionen
  • ermittleMonatssummen: Zeigt den monatlichen Revolut-Verbrauch pro Benutzer in CHF 
  • ermittleSpesenkönig: Berechnet den Spesenkönig des Monats :-)

Kundenzufriedenheit

Die dots sind sehr zufrieden mit der Lösung. Adrian Christen beispielsweise hat die Lösung in LinkedIn erwähnt. Die Lösung verschlankt den Kreditkarten-Prozess enorm. Die Stunden, die ich in die Programmierung, ins Testing und Debugging investiert habe, sind mittlerweile wieder eingespart. Ich will aber noch beobachten, ob der flotte und flüssige Kreditkarten-Prozess die Spesenmenge an sich beeinflusst. Die Software persistiert sicherheitshalber die wichtigsten Daten zu jeder Transaktion, welche über Funktionen wie z. B. ermittleSpesenkönig ausgewertet werden können. 

Mein Fazit

Eine Software ohne API, ein Produkt ohne API ist kein Produkt. Ich glaube, dass mittelfristig jedes Produkt eine API braucht. Auch der Staat, die Verwaltung brauchen eine API, Banken, Versicherungen und Spitäler und so weiter ohnehin. Wer keine API hat, verliert.

BTW: Programmieren macht Spass. Willst du spielerisch programmieren lernen, dann buche unseren Workshop:

Scrum spielerisch programmierend lernen

Keine Kommentare bis jetzt

Lass uns wissen, was du darüber denkst ...

Newsletter Anmeldung

Das könnte dich ebenfalls interessieren

diese Artikel in Effective Delivery