BudgetTracker - un autre outil open-source pour la comptabilité des finances personnelles

Pourquoi?


Il y a quelques années, je me suis intéressé à l'obtention d'un revenu passif et j'ai décidé d'essayer d'investir en utilisant les plateformes p2b. Après un certain temps, il est devenu évident que les fonds étaient très fragmentés par sites, banques, dettes, ce qui rendait difficile la compréhension de la situation. Je n'ai pas pu répondre aux deux questions les plus importantes:
Combien d'argent ai-je?


Quelle est la tendance? Suis-je en train de devenir plus riche ou plus pauvre?


KDPV

image


Il était nécessaire de rassembler les informations ensemble et de les maintenir à jour.


Les solutions au problème étaient les suivantes:


Tableau dans Google Sheets


Avantages: fait rapidement, avec souplesse et gratuitement
Inconvénients: la nécessité de mettre à jour les données manuellement


Au début, j'ai utilisé cette option, mais le travail constant pour la maintenir était fatigant: je devais aller sur de nombreux comptes personnels et réécrire les données à partir de là. De plus, certains actifs présentaient une forte volatilité, de sorte que l'irrégularité des données affectait la qualité de la prise de décision.


Solutions spécialisées


Dans la plupart des cas, ce sont les mêmes tableaux, uniquement avec une interface agréable / pratique.
Dans de rares cas, il y a intégration avec plusieurs banques, mais dans tous les cas que j'ai essayés - c'était instable et peu fiable. Effrayé également par la nécessité de donner votre nom d'utilisateur / mot de passe sur Internet Banking et le manque d'intégration avec des sources de données non standard.


Il est devenu évident que vous deviez rédiger vous-même un service approprié - c'est le seul moyen d'automatiser complètement la réception des données financières, et en même temps de ne pas vous soucier de transférer des détails à un tiers. De plus, cela permettrait d'implémenter n'importe quelle interface souhaitée. C'est ainsi qu'a commencé le projet BudgetTracker, que j'utilise avec succès depuis maintenant deux ans. Il peut être téléchargé en tant que source et / ou installé sur votre propre serveur en tant que conteneur Docker prêt à l'emploi.


Idée principale


La façon dont vous envisagez la finance a deux aspects. D'une part, il y a un état actuel (conditionnellement - il y a maintenant "Y" d'argent sur le compte "X"), d'autre part, il y a des transactions (conditionnellement - l'achat de "XX" pour de l'argent "UUU" au temps T).


Ces deux côtés de la finance sont pratiquement indépendants l'un de l'autre, mais sont nécessaires pour comprendre la tendance générale. Un exemple simple est que nous avons un actif similaire à un dépôt (par exemple, des obligations), que nous achetons périodiquement.
Afin de construire un échéancier d'évolution de la valeur d'un tel actif (et prévision), il est important de ne pas prendre en compte les achats supplémentaires.


Sources de données


Il existe différents fournisseurs - des sources de données, par exemple, la collecte de données auprès d'une banque cliente.


Liste des fournisseurs pris en charge
  • FX - taux de change: EUR, USD
  • LiveCoin - échange de crypto-monnaie
  • Penenza
  • AlfaBank
  • Alfa Capital
  • Alpha Direct
  • Alpha Stream
  • ModuleBank
  • ModuleMoney
  • Raiffeisen
  • Dettes et prêts (pour les dettes saisies manuellement)
  • POST-api pour recevoir des données arbitraires de systèmes externes

Étant donné que certains fournisseurs nécessitent une authentification SMS, il existe également une intégration avec SMS via IFTTT (uniquement pour les téléphones Android).


Chaque jour, le fournisseur recueille le statut de chacun des comptes et une liste de toutes les transactions et les enregistre dans la base de données. Pour ce faire, Chrome démarre et avec l'aide de Selenium, les données nécessaires sont extraites des banques en ligne.


Comptes


Les états de chacun des comptes forment un tableau du formulaire:


image


Cela permet de voir les détails et l'état de chacun des comptes, mais cela n'aide pas à voir la situation dans son ensemble et ne donne pas de réponse à la simple question "combien d'argent ai-je?".
Afin de répondre à cette question, la prise en charge des «colonnes calculées» a été ajoutée, dans laquelle vous pouvez spécifier une formule, par exemple:


image


Mais en plus de la valeur spécifique, je veux aussi voir la tendance, les émissions, les prévisions - en d'autres termes, voir la dynamique de cette valeur (et parfois pas seulement une).


Pour ce faire, il existe le concept de «page principale» où vous pouvez configurer des widgets individuels afin de vous concentrer sur des colonnes / tendances spécifiques.


Widgets


image


Il existe plusieurs types de widgets:


  • Donut avec dépenses (provenant de transactions)
  • «Dernière valeur» est un graphique linéaire pour des colonnes arbitraires, montrant le changement prévu en annuel (%) et le réel pour le dernier jour (%). Cela se produit également en mode "compact", quand il affiche uniquement la valeur actuelle (dernière).
  • "Delta" - affiche les changements de colonne en nombre pour les dernières 24h, 48h, 1 semaine et 1 mois
  • «Donut» - pour les colonnes calculées
  • «Graphique» - pour les colonnes calculées

Chaque type de widget a sa propre taille, et ils peuvent être déplacés les uns par rapport aux autres à l'aide des "flèches". Par défaut, ils sont masqués et apparaissent lorsque vous cliquez sur le bouton "œil" en haut de la page:
image


De plus, lors de la création ou de la modification d'un widget, il est possible de modifier n'importe lequel de ses paramètres:
image


Les transactions


Pour travailler avec des transactions, ou DDS , il y a une page séparée où vous pouvez voir toutes les transactions groupées par catégorie.
image


Chaque transaction a un «type» de transaction - c'est «revenu», «dépense» ou «transfert». La traduction est définie manuellement pour exclure les traductions des graphiques de la page principale.


Il peut être pratique de lisser le calendrier des actifs des fournisseurs qui n'ont pas de transactions. Par exemple, le marché boursier. Vous pouvez acheter des actions, et leur prix peut également augmenter, et sur le graphique, vous ne souhaitez souvent voir que le deuxième type d'événements.


Si le fournisseur de données ne prend pas en charge les transactions

Dans ce cas, il est pratique d'ajouter des transactions générées automatiquement dans les propriétés de la colonne et, au moment de l'achat, de modifier la transaction dans laquelle les actions ont été achetées et de définir le type sur «transférer».


Les catégories et les types peuvent être définis à la fois manuellement (vous devez d'abord les obtenir) et en fonction de règles. Lorsque vous définissez une catégorie sur une transaction, il s'installe automatiquement sur toutes les autres transactions avec la même description (et sera également appliqué à des transactions similaires à l'avenir). En plus de définir manuellement la catégorie sur une transaction, vous pouvez ajouter une règle sous la forme d'une expression régulière ou d'une sous-chaîne pour définir automatiquement la catégorie sur toutes les transactions appropriées.


Il existe également une section distincte «Dettes», où vous pouvez effectuer manuellement des dettes. Pour chaque dette, vous pouvez également définir un modèle pour la transaction, de sorte que lorsque de nouveaux DDS liés à cette dette apparaissent, le montant restant est mis à jour.
image


Pile technologique


Actuellement, le backend fonctionne sur .NET Core 3, le frontend sur Svelte 3.
ObjectRepository + LiteDB est utilisé pour stocker des données.
Pour l'intégration avec les sources de données, le pack Selenium + Chrome est utilisé.


Initialement, tout était entièrement écrit en .NET Core, mais il y a quelque temps, le frontend a été réécrit dans Svelte.
En raison de cet héritage, la communication avec le serveur n'a pas été effectuée de manière optimale et il est prévu de réécrire cette partie du projet dans un modèle réactif.


Comment essayer


Le fichier docker-compose.yml dans le référentiel vous aidera à:


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 

Source: https://habr.com/ru/post/fr467427/


All Articles