Pull to refresh

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

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

Несколько лет назад передо мной встала задача вести учёт денежных расходов, чтобы в конце месяца понимать сколько и куда денег тратится.
Перебрав самые известные приложения (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.
Tags:
Hubs:
Total votes 15: ↑14 and ↓1 +13
Views 17K
Comments Comments 105