BudgetTracker - это персональное self-hosted решение для управления личными финансами и инвестициями. Основная задачу, которую решает BT - это ежедневный автоматический сбор данных и построение отчетности.
Для запуска нужен аккаунт в MSFT Azure Storage. Рекомендуемый способ запуска - Docker. Пример docker-compose файла:
version: "3.3"
services:
budgettracker:
image: diverofdark/budgettracker:master
restart: unless-stopped
environment:
Properties__IsProduction: 'true' # true если необходимо сохранять изменения в базу. false для локального запуска/отладки.
ConnectionStrings__AzureStorage: 'DefaultEndpointsProtocol=https;AccountName=...;AccountKey=ABC==;EndpointSuffix=core.windows.net' # Строка подключения к Azure Storage.
# ApplicationInsights__InstrumentationKey: '' # Ключ к Azure Application Insights, если нужна аналитика
ports:
- "80:80"
networks:
public: {}
networks:
public:
driver: bridge
На данный момент поддерживаются следующие источники данных:
- АльфаБанк
- АльфаКапитал требуется SMS-интеграция
- АльфаПоток
- Райффайзен банк
- МодульБанк требуется SMS-интеграция
- МодульДеньги
- FX: Биржевые курсы валют USD/RUB, EUR/RUB, индекса S&P 500
- LiveCoin
- Penenza
- API (POST-endpoint)
Пример запроса:
POST /post-data name=Название+счета&value=1000.0&ccy=RUB
Из каждого источника данных ежедневно собираются данные в общее табличное представление. Способ сбора данных - Selenium + ChromeWebDriver.
В случае нехватки каких-то данных(например - неуспешный парсинг) соответствующая ячейка таблицы подсвечивается черным фоном, а в подсказке видно каких данных не хватает.
Каждое значение характеризуется провайдером и названием счёта через знак /
. Например - Альфа-Банк/Блиц-доход-USD или FX/USD/RUB
На основе этих данных можно строить свои вычисляемые стобцы - например посчитать сумму всего капитала из разных источников данных с конвертацией курса валют.
Примеры таких функций:
[Альфа-Банк/Блиц-доход-USD] * [FX/USD/RUB] + [Альфа-Банк/Блиц-доход-EUR] * [FX/EUR/RUB]
На основной странице доступна система виджетов, которые берут свои значения из табличного представления.
В настоящее время проверена интеграция только с 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.* |