К основному контенту

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

Предыстория

Я давно подсел на 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 пробела и сумма.
На третей строчке "категория" из которой брались деньги.
Следующая транзакция указывается через пустую строку.

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


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-редактор, и конечно же команда для ввода новой транзакции. По сути не хватает только сводок по балансу, и судя по репозиторию, появятся они не скоро.


Заключение

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

Комментарии

Популярные сообщения из этого блога

Как безопасно авторизироваться в веб-сервисе через скомпрометированное устройство?

  Поискав в интернете, побеседовав с ИИ, можно выделить bullet-proof технологию многофакторной авторизации. "Добавь TOTP и спи спокойно", говорят они. Но что, если у вас только одно устройство, и оно скомпрометировано? Например, вы едете в путешествие и берёте с собой только телефон. Можете ли вы доверять вашему телефону? Можете ли вы с него ввести пароль и с него же сгенерировать TOTP? Мне показалось, что собственному телефону я верить не могу (особенно после того, как удалив приложение одной нехорошей соцсети, через пару недель я обнаружил, что приложение снова установлено). Я задался вопросом безопасной авторизации на скомпрометированном устройстве. В голову сразу пришла идея шифрования в уме: авторизатор выдаёт вам контрольное слово, вы в уме его шифруете алгоритмом, который знаете только вы и авторизатор, и в качестве пароля вписываете результат шифрования (или хэширования). Но можно ли шифровать в уме? Простые алгоритмы шифрования Шифр Цезаря . Ключ - это число. Суть - ...

Распределённые облачные системы хранения Filecoin и Storj

Когда-то файлы хранили на дискетах, потом на дисках, потом на флэшках. Закончилось всё облаками. Тогда встал ряд различных вопросов по надёжности и приватности. С одной стороны можно просто доверить файлы гуглу или яндексу, но тогда о приватности можно забыть. C другой стороны можно завести собственное облачное хранилище, будь то дорогое железное решение от Synology, или оперсорсное на арендованной vps на nextcloud, но тут требуется вовлечение, что бы облако оставалось в рабочем состоянии (следить за апдейтами, своевременно обновлять оборудование, поддерживать резервное железо). Вместе с развитием блокчейна и развитием децентрализованных технологий web 3.0, появились и облачные хранилища, обещающие приватность, доступность и низкую цену. Предлагаю к рассмотрению 2 проекта, которые появились более 10 лет назад, и до сих пор существуют - Filecoin и Storj. Filecoin К сожалению, децентрализованные системы облачного хранилища влезли в блокчейн. Самая популярная система - filecoin . Если ...

Сплит клавиатура - Lily58

💡  Идея   Моя предыдущая механическая клавиатура была запланирована на 5 лет и они прошли. Отсюда вырос интерес. Менять просто так на аналогичную не хотелось, поэтому в глаза бросилась экзотика - сплит клавиатуры. В готовом виде в продаже ничего интересного не попалось и идея угасла, но попала в список желаемых подарков. Деду морозу тема зашла и на новый год я получил основную часть деталей от Lily58. Хотелось минималистичный девайс, но чтобы кнопок хватало для кириллицы и цифр. Так было отброшено много кандидатов, а дальше выбор был практически наугад.  🏭  Сборка Сборка оказалась очень увлекательной. Какой-то опыт пайки у меня был, но лет десять назад. Полностью спаять одну половинку заняло 2 сессии по часу. Удивило меня то, что перепрошивка заняла больше времени и усилий. Если про механическую сборку есть много мануалов, то про перепрошивку есть только отдельные универсальные на все клавиатуры. После заливки прошивки кнопки заработали. Когда была готова вторая ...