Финансовый учёт в текстовой консоли

«У хорошего бухгалтера не сойтись может только юбка.»

3ab4434694634487a9c86d4d296d4a9f.jpg

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

© Habrahabr.ru