DiverOfDark / BudgetTracker

Персональное self-hosted решение для управления личными финансами и инвестициями.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BudgetTracker

Docker Pulls FOSSA Status Quality Gate Status

Описание

BudgetTracker - это персональное self-hosted решение для управления личными финансами и инвестициями. Основная задачу, которую решает BT - это ежедневный автоматический сбор данных и построение отчетности.

Как запустить

Рекомендуемый способ запуска - Docker. Пример docker-compose файла:

docker-compose.yml

version: "3.3"
services:
  budgettracker:
    image: diverofdark/budgettracker:master
    restart: unless-stopped
    environment:
      Properties__IsProduction: 'true' # true если необходимо сохранять изменения в базу. false для локального запуска/отладки.
      Properties__ChromeDriver: 'http://chrome:4444' # строка подключения к контейнеру с Google Chrome
      Properties__Downloads: '/data' # путь к папке с загрузками - должна быть общая папка с Chrome
      ConnectionStrings__LiteDb: '/data/budgettracker.db' # Строка подключения к LiteDb, если используется локальный файл базы
    volumes:
      - /root/bt:/data # Путь монтирования папки /data, если используется локальный файл базы
    depends_on:
     - chrome
    ports:
      - "80:80"
    networks:
      public: {}

  chrome:
    image: selenium/standalone-chrome:latest
    restart: unless-stopped
    hostname: chrome
    volumes:
      - /dev/shm:/dev/shm
      - /root/bt:/data
    ports:
      - "4444:4444"
    networks:
      public: {}

networks:
  public:
    driver: bridge

Источники данных:

На данный момент поддерживаются следующие источники данных:

  • АльфаБанк
  • АльфаДирект
  • АльфаКапитал требуется SMS-интеграция
  • Долги: создание балансов из заведенных вручную долгов
  • Райффайзен банк
  • Тинькофф-банк
  • Тинькофф-инвестиции
  • FX: Биржевые курсы валют USD/RUB, EUR/RUB, индекса S&P 500
  • API (POST-endpoint) Пример запроса:
    # Статус на сегодня:
    POST /post-data
    name=Название+счета&value=1000.0&ccy=RUB
    
    # Статус на 31 февраля 2019:
    POST /post-data
    name=Название+счета&value=1000.0&ccy=RUB&when=31.02.2019
    
    # Добавление транзакций:
    POST /post-payment
    Content-Type: application/json
    
    [
      {
        "id": "123abc",
        "account": "test-account",
        "when": "01.10.2019 12:00:00",
        "amount": "5000",
        "currency": "RUB",
        "what": "Вернули долг"
      },
      {
        "id": "124abc",
        "account": "test-account",
        "when": "02.10.2019 12:00:00",
        "amount": "100",
        "currency": "RUB",
        "what": "Купил сникерс"
      }
    ]
    
    

Табличное представление (история)

Из каждого источника данных ежедневно собираются данные в общее табличное представление. Способ сбора данных - Selenium + ChromeWebDriver.

Пример

В случае нехватки каких-то данных(например - неуспешный парсинг) соответствующая ячейка таблицы подсвечивается черным фоном, а в подсказке видно каких данных не хватает.

Каждое значение характеризуется провайдером и названием счёта через знак /. Например - Альфа-Банк/Блиц-доход-USD или FX/USD/RUB На основе этих данных можно строить свои вычисляемые стобцы - например посчитать сумму всего капитала из разных источников данных с конвертацией курса валют.

Примеры таких функций:

[Альфа-Банк/Блиц-доход-USD] * [FX/USD/RUB] + [Альфа-Банк/Блиц-доход-EUR] * [FX/EUR/RUB]

Вычисляемые столбцы

Дашборд (отчёт)

На основной странице доступна система виджетов, которые берут свои значения из табличного представления. Пример

Долги

Возможно вручную заносить долги (тех кто должен вам - с положительным знаком, и те которые вы должны - с отрицательным знаком баланса. Возможно также указать шаблон описания переводов для автоматического учета их в долгах Пример

Интеграция с SMS:

В настоящее время возможна интеграция только с Android телефонами с использованием IFTTT и Tasker. Для IFTTT используется простой рецепт с получением Android SMS и отправкой на /sms. Для Tasker используется отправка на /sms-tasker. Подробнее см. код ApiController.cs.

Для смс есть различные правила - на текущий момент они описываются регулярными выражениями для того чтобы автоматически скрывать ненужные смс (например с кодами подтверждений) и учитывать траты из SMS, полученных от банка.

Скриншот

Учет расходов

Разбор входящих СМС

Одним из вариантов учета расходов являвется парсинг SMS, полученных с телефона. Для этого надо в раздел с SMS добавить правило обработки вида "траты" с регулярным выражением для разбора текста сообщений, например для Raiffeisen:

Karta \*3436;\s+Pokupka:(?<sum>[\d.]*) (?<ccy>[A-Z]{3});\s+(?<what>.*);\s+

Обязательно наличие именованных групп sum, ccy, what с суммой траты, валютой, и описанием траты соответственно.

Для дружелюбного представления и группировки трат есть понятие категорий. Категории также используя регулярное выражение группируют траты по описанию трат. Пример использования категорий - группировка трат на такси:

| Категория | Щаблон           |
| --------- | ---------------- | 
| Taxi	    | .*GETT.*         |
| Taxi      | .*UBER.*	       |
| Taxi	    | .*Yandex\.Taxi.* |

Импорт выписки с онлайн банка

Для поддерживаемых провайдеров (Райффайзен, Альфабанк, Модульбанк) производится автоматом импорт выписок с приходом и расходом и создаются проводки в учёте.

Генерация выписки по изменению баланса

Для некоторых случаев (пример - изменение стоимости акций) удобно иметь "виртуальные" проводки, просто чтобы изменение баланса совпадало с движением денежных средств. Для этого в свойствах соответствующей колонки можно включить автоматическую генерацию проводок по балансу.

Особенности учета расходов

Бывает три категории расходов - доход, расход и перевод. В чем их отличие? Доход и расход учитываются на графиках, в оценках динамики капитала, в виджете трат. Перевод - специальный вид проводки, который задуман для обозначения переводов денег со счёта на счёт. За счёт переводов сглаживаются графики и становится валидным прогноз динамики капитала (особенно актуально для инвестиций).

License

FOSSA Status

About

Персональное self-hosted решение для управления личными финансами и инвестициями.

License:GNU General Public License v3.0


Languages

Language:C# 62.4%Language:Svelte 29.4%Language:TypeScript 5.5%Language:JavaScript 1.9%Language:Dockerfile 0.4%Language:HTML 0.3%Language:Ruby 0.1%Language:Shell 0.0%