Финансовый учёт в текстовой консоли
Несколько лет назад передо мной встала задача вести учёт денежных расходов, чтобы в конце месяца понимать сколько и куда денег тратится.
Перебрав самые известные приложения (GnuCash, Kmymoney, aqbanking, grisbi, cbb, ledger мне по тем или иным причинами ни одно не понравилось. Кроме последнего.
Ledger — это консольная утилита, которая поможет контролировать ваши личные финансы. Моё знакомство с ней началось со статьи в блоге «Ledger — бухучёт в командной строке». И, на сколько я знаю, больше статей на русском о ней нет. Попробуем исправить это недоразумение.
Перед тем как начать читать об использовании программ для персональных финансов я бы посоветовал получить первоначальные знания о бухучете (в том минимуме, в котором они нужны для домашней бухгалтерии), которые можно почерпнуть в блоге city-rat.livejournal.com, а расширить знания о личных финансах, кредитах и кредитных картах например в статьях Макса Крайнова. Это необязательно, но знания о том, как управлять личными финансами будут отлично дополнять знания о том, чем управлять этими финансами.
Если коротко описать возможности этой утилиты, то я бы выделил среди них такие:
— поддержка двойной записи. Это позволяет одновременно отследить источники получения и направления расходования средств.
— открытый формат хранения данных: проводки хранятся в обычных текстовых файлах (как я люблю).
— гибкое создание отчётов: по счетам, проводкам и т.д.
— поддержки нескольких счетов: банковские, долговые, инвестиционные, кредитные, наличные
— поддержки нескольких валют (да, даже Bitcoin)
— простой и достаточно удобный консольный интерфейс
— импорт из формата CSV, экспорт в формат OFX
— нет никакой автоматики: ledger никак не меняет ваши данные. И это на мой взгляд правильно. Там где начинаются автоматические операции с финансами, заканчивается контроль над этими финансами.
— открытый исходный код (распространяется под BSD лицензией).
Принцип работы такой: вы вносите проводки в файл, потом на основе собранных данных делаете отчёты о потраченных средствах и т.д.
Организация файлов
Можно вносить все проводки в единственный текстовый файл, но для меня это было неудобно и я сделал так: сделал общий файл и включил в него файлы с проводками за каждый год.
Выглядит это так:
~$ cat .ledger/sergeyb-finance.dat
;; N RUR
N ₽
! account sergeyb
! include sergeyb-finance-2012.dat
! include sergeyb-finance-2013.dat
! include sergeyb-finance-2014.dat
! include sergeyb-finance-2015.dat
! include sergeyb-finance-2016.dat
! apply end
~$
В начале файла указана валюта, которую ledger будет использовать по умолчанию для всех проводок, где она не указана. Файл sergeyb-finance.dat экспортируется в переменной окружения LEDGER_FILE, чтобы не приходилось его каждый раз указывать в опциях утилиты.
Каждый файл начинается с указания года:
~$ head -1 .ledger/sergeyb-finance-2014.dat
Y2014
Если вы будете использовать несколько валют в проводках, то имеет смысл поддерживать файл с курсами валют. Его можно задать в переменной окружения LEDGER_PRICE_DB или конфигурационном файле:
~$ cat .ledgerrc
--wide
--pager /usr/bin/less
--file /Users/sergeyb/.ledger/sergeyb-finance.dat
--price-db /Users/sergeyb/.ledger/sergeyb-finance-currency.dat
--sort date
~$
Файл с курсами валют у меня заполняется автоматически с помощью скрипта загружая данные с сайта Центрального банка Российской Федерации. Он запускается один раз в день по расписанию в crontab (5) и добавляет курсы нужных мне валют в этот файл.
~$ ccc 10 USD RUR
370.86609471
~$
Для цифровых валют (Bitcoin, Litecoin) тоже есть скрипты.
В итоге получается такой файл:
~$ head -10 .ledger/sergeyb-finance-currency.dat
; -*- ledger -*-
N $
N USD
N EUR
P 2011/05/29 EUR 40.08020851 RUR
P 2011/06/10 $ 27.79070045 RUR
P 2011/07/13 $ 28.25570737 RUR
~$
Внесение проводок
Принцип двойной записи можно кратко cформулировать так: когда в одном месте средства убывают, в другом они прибывают. Например, если после посещения магазина в кошельке убавились деньги, значит сумма в одном из активов уменьшилась, а сумма на счете «расходы» увеличилась. Принцип двойной записи — это основополагающий принцип в бухгалтерии.
Согласно этому принципу в каждой записи обычно не менее двух счетов, но указывать сумму для одного из них необязательно, понятно, что изменение будет равно сумме всех других, но с противоположенным знаком:
2016-08-22 мороженое
актив:наличные ; понятно, что здесь должно быть -75
расходы:проезд 75
* активы (assets) — это то, чем вы реально располагаете. Точнее ваша собственность. Это могут ваши деньги на карманные расходы, депозит в банке, счёт в Яндекс.Деньги и т.д.;
* пассивы (liabilities) — это то, что вы кому-то должны. То есть, например, у вас может быть квартира, но вы за не должны банку;
* капитал (equity) — ваши чистые деньги. Другими словами это то, что останется, если из ваших активов вычесть ваши долги;
* прибыль (income) — вы же как-то зарабатываете? Например ваша зарплата или благодарность соседа за ремонт компьютера являются хорошим примером прибыли;
* расходы (expenses) — сходили с подругой в кино? Вот вам и расходы;
Если вы пользуетесь Vim или Sublime Text, то для внесения записей удобно использовать плагины для подсветки синтаксиса для формата ledger. Для Vim плагин есть в репозитории ledger, для Sublime Text на вики.
Как я уже писал, ledger никак не модифицирует ваши данные и исходит только из того, что в внесли вручную в файл. Но если всё-таки хочется вносить одни и те же проводки регулярно (например ежемесячные платежи за телефон), то можно автоматизировать добавление записей с поомщью опции ''ledger entry» и расписания в cron (8).
Счета можно называть как угодно и на любом языке (ledger отлично поддерживает UTF-8). Можно делать подсчета, используя двоеточие в названии счёта, например, «расходы: связь: интернет». Главное не запутаться потом в них :) Советую сделать базовые счета и потом их расширять по мере необходимости. Всё зависит от того, насколько детальный отчет вы хотите потом видеть. Для начала можно завести счета для, как минимум, пяти категорий: актив, долги, доходы, расходы и какой-нибудь счёт для уравнивания балансов. Я назвал его «собственные», в англоязычных примерах его обычно называют «equity».
Сумму в проводке можно писать так, как удобно:»$ 15»,»28 EUR»,»21 €»,»66 ₽». Ledger понимает, что разные единицы измерения нужно считать отдельно. Единицы измерения можно указывать любые, те, которые нужно учитывать. В том числе и неденежные (и программа умеет их правильно пересчитывать, если ей дать файл с историей цен).
Я до сих пор продолжаю пользоваться ledger, но если вы только выбираете инструмент для учёта финансов, то я бы советовал посмотреть ещё на beancount. В первую очередь из-за встроенных средств анализа проводок.
Полезные ссылки: документация для Ledger, сайт plaintextaccounting.org.
Комментарии (6)
25 августа 2016 в 10:40
0↑
↓
Как я понимаю защиты там нет?25 августа 2016 в 10:58
0↑
↓
Защиты от кого или от чего?25 августа 2016 в 11:00
0↑
↓
Чтобы те, кто получил доступ к файлам компьютера, не могли прочитать файлы моих финансов.25 августа 2016 в 11:13
0↑
↓
Да, никакх встроенных средств шифрования или ограничения доступа нет. Но никто не мешает воспользоваться стандартными средствами и, например, шифровать с помощью gpg.25 августа 2016 в 11:16
+2↑
↓
Используйте encfs.
25 августа 2016 в 11:30
0↑
↓
Не увидел в списке опробованных CashFly. Программка старая и гуёвая, но функционал примерно такой же, двойная запись, счета, валюты, импорт, экспорт, отчеты.