Herausforderung
Das Unternehmen verfügte über eine Plattform, mit der Kunden IBAN-Konten mit mehreren Währungen erstellen und verwalten konnten. Den Kunden wurde pro Transaktion in Rechnung gestellt, und die Höhe der Gebühr variierte in Abhängigkeit von bestimmten Parametern. Die Berechnung dieser Gebühr und die anschließende Rechnungsstellung war eine alltägliche, zeitaufwändige Aufgabe, die das Unternehmen automatisieren wollte.
Für die Entwicklung des Rechnungsautomatisierungssystems waren mehr Programmierer erforderlich, als das Unternehmen intern hatte. Es erreichte mehrere Entwickler, darunter Elinext. Wir haben schnell reagiert, hatten die entsprechenden Fähigkeiten und konnten die Aufgabe ohne weiteres angehen, sodass wir für den Job ausgewählt wurden.
Lösung
Der Kunde kam mit einer umfassenden Idee für das Rechnungsautomatisierungssystem zu uns. Es lag an uns, das System zu konzipieren, Anforderungen zu definieren und den Arbeitsumfang einzugrenzen. Wir haben uns die Beschreibung des Kunden über das potenzielle Produkt angehört und die Ärmel hochgekrempelt.
Bei Projekten wie diesem funktioniert keine Methode besser als Scrum, das wir schon lange verwenden. Zweimal in der Woche haben wir einen Videoanruf mit dem Kunden durchgeführt, um sicherzustellen, dass wir auf dem richtigen Weg waren. Der Kunde beteiligte sich im Zuge der Entwicklung der Idee immer aktiver an der Definition der Produktdetails.
In zwei Wochen wussten wir genau, was wir bauen mussten.
Wir haben das System als eine Reihe von asynchronen Modulen aufgebaut. Um dem Kunden zu helfen, Geld zu sparen, haben wir den Code querkompiliert und in Amazons DynamoDB Local platziert. Daher wird es nur ausgeführt, wenn jemand das System verwendet.
Wir haben verschiedene Methoden verwendet, um sicherzustellen, dass das System wie erwartet funktioniert. Dazu gehörten die kontinuierliche Integration mit Jenkins und Tests, sowohl automatisiert als auch manuell.
In Bezug auf die funktionale Struktur des Systems sind die drei Hauptteile Ereignisse, Verträge und ein Dashboard.
Events
Das System des Kunden zeichnet alle Transaktionen als Ereignisse auf. Hat ein Kunde Geld erhalten? Ein Ereignis wird aufgezeichnet. Haben sie Geld geschickt? Ein weiteres Ereignis wird aufgezeichnet. Für jedes Ereignis berechnet das System dem Kunden eine Gebühr. Alle Ereignisse haben vier Parameter: ID, Zeitstempel, Menge und Typ.
Wir mussten die Gruppierung von Veranstaltungen automatisieren, Gebühren basierend auf ihren Parametern berechnen und Rechnungen entsprechend erstellen. Dafür haben wir Verträge erstellt.
Verträge
Verträge funktionieren als digitale Vereinbarungen innerhalb des Systems, die Geschäftsregeln umfassen, die für jeden Kunden einzigartig sind. Diese Regeln legen fest, wie das System die Gebühr für jede Veranstaltung basierend auf der Art der Veranstaltung, der Zeit und dem verarbeiteten Geldbetrag (Menge) berechnet.
Systemadministratoren können Verträge verwenden, um Rechnungen zu erstellen, ohne Informationen zu sammeln und Gebühren manuell zu berechnen. Sie müssen lediglich einen Kunden und einen Abrechnungsbereich auswählen. Das System erstellt eine Rechnung, indem es den Vertrag und die Ereignisse des Kunden abgleicht.
Dashboard
Administratoren können Rechnungen über das Dashboard erstellen, bearbeiten, in der Vorschau anzeigen, ausstellen, per E-Mail versenden und genehmigen.
Sobald ein Administrator eine Rechnung ausgestellt hat, kann der Kunde diese genehmigen und der Rechnungsstatus ändert sich in „Genehmigt“. Der Administrator kann dann die Rechnung endgültig genehmigen und per E-Mail an den Kunden senden. Danach zieht das System automatisch Gelder vom Konto des Kunden ab.
Der Status ändert sich für jede Phase des Lebenszyklus der Rechnung (genehmigt, ausstehend, bezahlt usw.).
Ergebnis
Wir brauchten drei Monate, um das automatisierte Rechnungssystem mit sehr wenigen Anfangsvorgaben des Kunden aufzubauen. In den folgenden drei Monaten haben wir die Software basierend auf dem Feedback der Benutzer verbessert.
Der Kunde plant, Nutzern zu ermöglichen, ihre Kunden innerhalb der Plattform zu belasten.