BudgetTracker-另一个用于个人理财的开源工具

怎么了


几年前,我对获得被动收入产生了兴趣,并决定尝试使用p2b平台进行投资。 一段时间后,人们发现资金非常分散,分布在地点,银行,债务中,这使人们很难了解情况。 我无法回答两个最重要的问题:
我有多少钱?


趋势如何? 我变得更富或更穷吗?


KDPV

图片


必须以某种方式将信息收集在一起并保持最新状态。


该问题的解决方案如下:


Google表格中的表格


优点:快速,灵活,免费
缺点:需要手动更新数据


最初,我使用了这个选项,但是要维持它很累人:我不得不去许多个人帐户,然后从那里重写数据。 此外,某些资产的波动性很大,因此数据的不规则性影响了决策的质量。


专业解决方案


在大多数情况下,这些都是相同的表,只是具有一个不错的/便捷的界面。
在极少数情况下,可以与几家银行进行整合,但在我尝试过的所有情况下-都是不稳定且不可靠的。 还使您不必从网上银行提供用户名/密码,也不必与非标准数据源集成。


很明显,您必须自己编写一个合适的服务-这是使财务数据接收完全自动化的唯一方法,同时又不必担心将详细信息传输给第三方的情况。 另外,它将允许实现任何期望的接口。 因此,开始了BudgetTracker项目,我已经成功使用了两年。 它可以作为源下载和/或作为现成的Docker容器安装在您自己的服务器上。


主要思想


您如何看待金融有两个方面。 一方面,存在当前状态(有条件-现在帐户“ X”上有“ Y”笔钱),另一方面,有交易(有条件-在时间T上用“ UUU”钱购买“ XX”)。


财务的这两个方面实际上是相互独立的,但是对于了解总体趋势是必不可少的。 一个简单的例子是我们拥有类似于定期购买的存款的资产(例如,债券)。
为了建立这种资产(和预测)价值变化的图表,重要的是不要考虑购买。


资料来源


有不同的提供程序-数据源,例如,从客户银行收集数据。


支持的提供商列表
  • FX-汇率:欧元,美元
  • LiveCoin-加密货币交换
  • Penenza
  • 阿尔法银行
  • 阿尔法资本
  • Alpha Direct
  • 阿尔法流
  • 模块银行
  • ModuleMoney
  • 雷菲森
  • 债务和贷款(用于手动输入的债务)
  • POST-api,用于从外部系统接收任意数据

由于某些提供商需要SMS身份验证,因此还可以通过IFTTT与SMS集成(仅适用于Android手机)。


提供商每天都会收集每个帐户的状态以及所有交易的列表,并将其保存在数据库中。 为此,Chrome启动,并在Selenium的帮助下从在线银行提取必要的数据。


帐目


每个帐户的状态形成以下形式的表格:


图片


这样就可以查看每个帐户的详细信息和状况,但是却无助于了解全局,也无法回答“我有多少钱?”这个简单问题。
为了回答这个问题,添加了对“计算列”的支持,您可以在其中指定一个公式,例如:


图片


但是除了特定的值外,我还希望查看趋势,排放量和预测-换句话说,请查看此值的动态变化(有时不仅是一个)。


为此,存在“主页”的概念,您可以在其中配置各个窗口小部件,以便专注于特定的列/趋势。


小部件


图片


有几种类型的小部件:


  • 甜甜圈带费用(来自交易)
  • “最后值”是任意列的折线图,显示了预计的年度变化(%)和最后一天的实际变化(%)。 当它仅显示当前(最后一个)值时,也会在“紧凑”模式下发生。
  • “ Delta”-显示最近24小时,48小时,1周和1个月的列数变化
  • “甜甜圈”-用于计算列
  • “图表”-用于计算列

每种类型的窗口小部件都有其自己的大小,可以使用“箭头”彼此相对移动。 默认情况下,它们是隐藏的,并在您单击页面顶部的“眼睛”按钮时出现:
图片


另外,在创建或编辑窗口小部件时,可以更改其任何设置:
图片


交易次数


要处理事务或DDS ,有一个单独的页面,您可以在其中查看按类别分组的所有事务。
图片


每笔交易都有一种“类型”的交易-它是“收入”,“费用”或“转移”。 手动设置翻译以从主页的图表中排除翻译。


可以简化没有交易的提供者的资产计划时间表。 例如,股票市场。 您可以购买股票,它们也可以上涨价格,在图表上,您通常只希望看到第二种事件。


如果数据提供者没有交易支持

在这种情况下,可以在列属性中添加自动生成的交易,并且在购买时编辑购买股票的交易并将类型设置为“转让”非常方便。


类别和类型既可以手动设置(必须先获取它们),也可以基于规则设置。 在为交易设置类别时,它会自动将其自身安装在具有相同描述的所有其他交易上(将来也将应用于类似的交易)。 除了手动为交易设置类别外,您还可以添加正则表达式或子字符串形式的规则,以自动将类别设置为所有合适的交易。


还有一个单独的部分“债务”,您可以在其中手动进行债务。 对于每个债务,您都可以类似地为交易设置一个模板,以便在与此债务相关的新DDS出现时,剩余金额得到更新。
图片


技术栈


当前,后端运行在.NET Core 3上,前端运行在Svelte 3上。
ObjectRepository + LiteDB用于存储数据。
为了与数据源集成,使用了Selenium + Chrome捆绑包。


最初,所有内容都是完全用.NET Core编写的,但是前一段时间,前端是用Svelte重写的。
由于这种传统,与服务器的通信未达到最佳状态,因此计划将项目的这一部分重写为反应模型。


如何尝试


存储库中的docker-compose.yml文件将帮助:


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/zh-CN467427/


All Articles