Как стать автором
Обновить

Личные финансы в формате txt

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 6.2K
Картинка из интернета. Сводка баланса в ламповых цветах терминала
Картинка из интернета. Сводка баланса в ламповых цветах терминала

Предыстория

Я давно подсел на Obsidian, и мне очень понравилась идея хранения данных в человеко-понятных форматах вроде TXT или Markdown. В таком виде вы не привязаны к конкретному инструменту и вам не надо делать экспорт данных для резервных копий. Данные сами по себе остаются готовые к чтению или модифицированию.

Чего мне не хватало, так это хорошего формата для хранения финансовых данных. Изначально, на заре появления Android, я пользовался мобильными приложениями для ведения расходов. Дважды напоролся на окончание поддержки приложения. В третий раз рисковать не стал, и перешёл на Google Sheets. За счёт функционала связки файлов (данные из одного файла можно использовать в другом. В моём случае расходы хранятся в разных файлах по месяцам, но в годовом файле есть сводка с данными из месячных файлов) я сильно влип в инфраструктуру гугла и даже не мог перейти на обычный Excel (хотя там тоже что-то подобное есть).

Более того, любые используемые мной решения работали с бинарными форматами, которые не прочитать без программы (да, excel - это xml, но его тоже нормальным не назовёшь).

И тут, открыв очередную трэш-статью, начав читать гневные комментарии, наткнулся на человека, который ведёт расходы в TXT формате. Причём технический человек, со знанием программирования. Это показалось абсолютно тупейшим решением, но... в комментарии ниже, другой человек отписал, что тоже использует TXT для ведения личных финансов. И это уже было подозрительно.

Начал изучать вопрос и наткнулся на ledger-cli.

Формат

Ledger-cli - это оказалась командная утилита для ведения личных финансов генерации сводок по личным финансам. Суть даже не в утилите, а в формате исходных данных. Он прост, читабелен и понятен.

Пример:

2024-02-14 McDonalds ; чизбургер
  Расходы:Еда:Обеды         1.5 EUR
  Ресурсы:Банки:Revolute

2024-02-15 Burger King ; гамбургер
  Расходы:Еда:Кафе          2.5 EUR
  Ресурсы:Наличка

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

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

Картинка из интернета. Автозаполнение категории в Idea IDE
Картинка из интернета. Автозаполнение категории в Idea IDE

Ledger-cli

Ledger-cli, в свою очередь, умеет читать этот файл и выдавать полезную информацию, например:

$ ledger -f trans.txt balance
             4.0 EUR  Расходы:Еда
             2.5 EUR    Кафе
             1.5 EUR    Обеды
            -4.0 EUR  Ресурсы
            -1.5 EUR    Банки:Revolute
            -2.5 EUR    Наличка
--------------------
                   0

Это баланс по всем категориям и подкатегориям. Можно легко увидеть сколько всего было потрачено на еду, при этом видеть, сколько отдельно потрачено на категорию Кафе и сколько на категорию Обедов. Видно чем мы расплачивались - банковской карточкой или наличкой. То есть по сути это сводка по всем данным, которые мы хотим видеть в конце месяца.

А вот так можно получить баланс за конкретный период.

ledger -f trans.txt balance --limit "date>=[2024/02/01] and date<[2024/03/01]"

А вот так тоже самое, но в процентах:

ledger -f trans.txt balance --limit "date>=[2024/02/01] and date<[2024/03/01]" --percent

А ещё период можно задавать словами и вытаскивать баланс по конкретной категории

ledger -f trans.txt balance Еда -p "since 2024/01/01"
ledger -f trans.txt balance Еда -p "last month"

В общем, можно получить практически что угодно, да ещё и подкорректировать формат вывода.

Подробнее можно почитать в документации или вот тут. А вот короткая шпаргалка по формату.

А на русском есть эта статья и этот пост.

Но вот записывать транзакции ledger-cli не умеет, он их только читает и обрабатывает.

Альтернативы

Ну и самое прекрасное, вы не привязаны к ledger-cli. Вы можете читать файлы сами. А можете использовать hledger. А можете beancount. А можете obsidian-плагин - leadger-obsidian. Все эти клиенты работают по разному и написаны на разных языках, но их объединяет общий формат исходных данных. Конечно же есть нюансы, и какие-то фишки формата поддерживают не все утилиты. Из полезных ссылок ещё есть англоязычный сайт по ведению бухгалтерии в текстовых файлах, на котором можно найти более полный список утилит, и в целом углубиться в идеологию.

Картинка из интернета. Многие утилиты идут с веб-сервером из коробки, для визуализации и редактирования файла прямо в браузере.
Картинка из интернета. Многие утилиты идут с веб-сервером из коробки, для визуализации и редактирования файла прямо в браузере.

Плагин obsidian-ledger

Это трэш. Понятно, что плагин был написан с нуля, на typescript, но он оказался очень нежным к формату файла. Хотите использовать валюту EUR? А не получится, используйте €. Хотите использовать букву "ё"? Получите ошибку парсера. Используете запятую вместо точки? Все ваши транзакции помножатся на 100. Вишенкой на торте является надпись в README репозитория плагина, что пока он бесплатный, но в будущем может стать платным.

Но, главное, что если всё же подогнать свои файлы под нужный формат, они всё ещё останутся валидными для остальных, более стабильных утилит.

В остальном, плагин рисует график ваших ресурсов, позволяет гулять по периодам, смотреть транзакции в различных, выделенных вами категориях, сортировать.

Ещё есть удобный gui-редактор, и конечно же команда для ввода новой транзакции. По сути не хватает только сводок по балансу, и судя по репозиторию, появятся они не скоро.

Картинка с официального репозитория. Obsidian-плагин в действии.
Картинка с официального репозитория. Obsidian-плагин в действии.

Заключение

Забавно то, что всё это выросло из простейшего комментария, к косвенной статье, который на первый взгляд показался безумным и глупым, но при детальном изучении, оказалось, что глупым был я. Потому, если у вас есть умные мысли на тему ведения личных финансов, рекомендую обязательно отписать их в комментариях. Кто знает, к кого и к какой мысли это может привести.

Теги:
Хабы:
+22
Комментарии 29
Комментарии Комментарии 29

Публикации

Истории

Ближайшие события

Moscow QA #3 — митап по тестированию ПО
Дата 14 марта
Время 18:30 – 21:30
Место
Москва Онлайн
Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн