Warum?
Vor einigen Jahren interessierte ich mich für passives Einkommen und beschloss, mit p2b-Plattformen zu investieren. Nach einiger Zeit stellte sich heraus, dass die Mittel nach Standorten, Banken und Schulden stark fragmentiert waren, was es schwierig machte, die Situation zu verstehen. Ich konnte die beiden wichtigsten Fragen nicht beantworten:
Wie viel Geld habe ich?
Was ist der Trend? Werde ich reicher oder ärmer?
Es war notwendig, Informationen irgendwie zusammenzutragen und auf dem neuesten Stand zu halten.
Die Lösungen für das Problem waren wie folgt:
Tabelle in Google Sheets
Vorteile: schnell, flexibel und kostenlos
Nachteile: Die Notwendigkeit, Daten manuell zu aktualisieren
Zuerst habe ich diese Option verwendet, aber die ständige Arbeit, um sie aufrechtzuerhalten, war anstrengend: Ich musste zu vielen persönlichen Konten gehen und die Daten von dort neu schreiben. Darüber hinaus wiesen einige Vermögenswerte eine hohe Volatilität auf, sodass die Unregelmäßigkeit der Daten die Qualität der Entscheidungsfindung beeinträchtigte.
Spezialisierte Lösungen
In den meisten Fällen handelt es sich um dieselben Tabellen, nur mit einer schönen / praktischen Oberfläche.
In seltenen Fällen gibt es eine Integration mit mehreren Banken, aber in allen Fällen, die ich versucht habe - es war instabil und unzuverlässig. Erschreckt auch die Notwendigkeit, Ihren Benutzernamen / Ihr Passwort aus dem Internet-Banking anzugeben, und die mangelnde Integration in nicht standardmäßige Datenquellen.
Es wurde klar, dass Sie selbst einen geeigneten Service schreiben müssen - nur so können Sie den Empfang von Finanzdaten vollständig automatisieren und sich gleichzeitig keine Gedanken über die Weitergabe von Daten an Dritte machen. Darüber hinaus würde es ermöglichen, jede gewünschte Schnittstelle zu implementieren. So begann das BudgetTracker-Projekt, das ich seit zwei Jahren erfolgreich verwende. Es kann als Quelle heruntergeladen und / oder als vorgefertigter Docker-Container auf Ihrem eigenen Server installiert werden.
Hauptidee
Es gibt zwei verschiedene Seiten, wie Sie Finanzen betrachten. Einerseits gibt es den aktuellen Status (bedingt - jetzt gibt es "Y" des Geldes auf dem Konto "X"), andererseits gibt es Transaktionen (bedingt - den Kauf von "XX" für "UUU" -Geld zum Zeitpunkt T).
Diese beiden Finanzseiten sind praktisch unabhängig voneinander, aber notwendig, um den allgemeinen Trend zu verstehen. Ein einfaches Beispiel ist, dass wir einen Vermögenswert haben, der einer Einlage ähnelt (z. B. Anleihen), den wir regelmäßig kaufen.
Um ein Diagramm der Wertänderung eines solchen Vermögenswerts (und der Prognose) zu erstellen, ist es wichtig, den Kauf nicht zu berücksichtigen.
Datenquellen
Es gibt verschiedene Anbieter - Datenquellen, die beispielsweise Daten von einer Kundenbank sammeln.
Liste der unterstützten Anbieter- FX - Wechselkurse: EUR, USD
- LiveCoin - Kryptowährungsaustausch
- Penenza
- AlfaBank
- Alfa Capital
- Alpha Direct
- Alpha Stream
- ModuleBank
- ModuleMoney
- Raiffeisen
- Schulden und Kredite (für manuell eingegebene Schulden)
- POST-API zum Empfangen beliebiger Daten von externen Systemen
Da einige Anbieter eine SMS-Authentifizierung benötigen, gibt es auch eine Integration mit SMS über IFTTT (nur für Android-Telefone).
Jeden Tag sammelt der Anbieter den Status jedes Kontos und eine Liste aller Transaktionen und speichert sie in der Datenbank. Dazu startet Chrome und mit Hilfe von Selen werden die erforderlichen Daten aus Online-Banken extrahiert.
Konten
Die Status der einzelnen Konten bilden eine Tabelle des Formulars:

Dies ermöglicht es, die Details und den Zustand jedes Kontos zu sehen, aber es hilft nicht, das Gesamtbild zu sehen, und gibt keine Antwort auf die einfache Frage "Wie viel Geld habe ich?".
Um diese Frage zu beantworten, wurde die Unterstützung für "berechnete Spalten" hinzugefügt, in der Sie eine Formel angeben können, zum Beispiel:

Neben dem spezifischen Wert möchte ich aber auch den Trend, die Emissionen und die Prognosen sehen - mit anderen Worten, die Dynamik dieses Wertes (und manchmal nicht nur eines).
Dazu gibt es das Konzept der „Hauptseite“, auf der Sie einzelne Widgets konfigurieren können, um sich auf bestimmte Spalten / Trends zu konzentrieren.
Widgets

Es gibt verschiedene Arten von Widgets:
- Donut mit Kosten (aus Transaktionen)
- „Letzter Wert“ ist ein Liniendiagramm für beliebige Spalten, in dem die projizierte Änderung in Jahr (%) und die tatsächliche Änderung für den letzten Tag (%) angegeben ist. Dies geschieht auch im "Kompakt" -Modus, wenn nur der aktuelle (letzte) Wert angezeigt wird.
- "Delta" - zeigt die Spaltenänderungen in den Zahlen für die letzten 24 Stunden, 48 Stunden, 1 Woche und 1 Monat
- "Donut" - für berechnete Spalten
- "Graph" - für berechnete Spalten
Jeder Widget-Typ hat seine eigene Größe und kann mit den "Pfeilen" relativ zueinander verschoben werden. Standardmäßig sind sie ausgeblendet und werden angezeigt, wenn Sie oben auf der Seite auf die Schaltfläche "Auge" klicken:

Beim Erstellen oder Bearbeiten eines Widgets können Sie außerdem folgende Einstellungen ändern:

Transaktionen
Um mit Transaktionen oder DDS zu arbeiten , gibt es eine separate Seite, auf der Sie alle Transaktionen nach Kategorien gruppiert sehen können.

Jede Transaktion hat eine „Art“ von Transaktion - es handelt sich um „Einnahmen“, „Ausgaben“ oder „Überweisungen“. Die Übersetzung wird manuell festgelegt, um Übersetzungen aus den Diagrammen von der Hauptseite auszuschließen.
Es kann praktisch sein, den Zeitplan für Assets von Anbietern zu glätten, die keine Transaktionen haben. Zum Beispiel die Börse. Sie können Aktien kaufen und sie können auch im Preis wachsen, und auf dem Chart möchten Sie oft nur die zweite Art von Ereignissen sehen.
Wenn der Datenprovider keine Transaktionsunterstützung hatIn diesem Fall ist es praktisch, automatisch generierte Transaktionen in die Spalteneigenschaften einzufügen und zum Zeitpunkt des Kaufs die Transaktion zu bearbeiten, in der die Anteile gekauft wurden, und den Typ auf "Übertragen" zu setzen.
Kategorien und Typen können sowohl manuell (Sie müssen sie zuerst abrufen) als auch basierend auf Regeln festgelegt werden. Wenn Sie eine Kategorie für eine Transaktion festlegen, installiert sie sich automatisch bei allen anderen Transaktionen mit derselben Beschreibung (und wird in Zukunft auch auf ähnliche Transaktionen angewendet). Zusätzlich zum manuellen Festlegen der Kategorie für eine Transaktion können Sie eine Regel in Form eines regulären Ausdrucks oder einer Teilzeichenfolge hinzufügen, um die Kategorie automatisch auf alle geeigneten Transaktionen festzulegen.
Es gibt auch einen separaten Abschnitt „Schulden“, in dem Sie manuell Schulden machen können. Für jede Schuld können Sie auf ähnliche Weise eine Vorlage für die Transaktion festlegen, sodass der verbleibende Betrag aktualisiert wird, wenn neue DDS für diese Schuld angezeigt werden.

Technologischer Stapel
Derzeit läuft das Backend auf .NET Core 3, das Frontend auf Svelte 3.
ObjectRepository + LiteDB wird zum Speichern von Daten verwendet.
Für die Integration in Datenquellen wird das Selenium + Chrome-Bundle verwendet.
Ursprünglich war alles vollständig in .NET Core geschrieben, aber vor einiger Zeit wurde das Frontend in Svelte neu geschrieben.
Aufgrund dieses Erbes wurde die Kommunikation mit dem Server nicht optimal durchgeführt, und es ist geplant, diesen Teil des Projekts in ein reaktives Modell umzuschreiben.
Wie man es versucht
Die Datei docker-compose.yml im Repository hilft dabei:
version: "3.3" services: budgettracker: image: diverofdark/budgettracker:master restart: unless-stopped environment: Properties__IsProduction: 'true' # true . ConnectionStrings__LiteDb: '/data/budgettracker.db' volumes: - /dev/shm:/dev/shm # Google Chrome - /root/bt:/data ports: - "80:80" networks: public: {} networks: public: driver: bridge