Скриптуемые Рабочие Процессы с Beancount и Fava
Beancount (инструмент бухгалтерского учета в виде обычного текста с двойной записью) и Fava (его веб-интерфейс) обладают высокой расширяемостью и возможностью написания скриптов. Их конструкция позволяет автоматизировать финансовые задачи, создавать собственные отчеты и настраивать оповещения, написав скрипты на Python. По словам одного из пользователей: "Мне очень нравится, что мои данные представлены в таком удобном формате, и мне нравится, что я могу автоматизировать все, что угодно. Нет API лучше, чем файл на вашем диске; его легко интегрировать." Это руководство проведет вас через создание скриптуемых рабочих процессов — от простой автоматизации для начинающих до продвинутых плагинов Fava.
Начало р аботы: Запуск Beancount как скрипта Python
Прежде чем углубляться в конкретные задачи, убедитесь, что у вас установлен Beancount (например, через pip install beancount). Поскольку Beancount написан на Python, вы можете использовать его как библиотеку в своих собственных скриптах. Общий подход заключается в следующем:
-
Загрузите свою бухгалтерскую книгу Beancount: Используйте загрузчик Beancount для разбора файла
.beancountв объекты Python. Например:from beancount import loader
entries, errors, options_map = loader.load_file("myledger.beancount")
if errors:
print("Errors:", errors)Это даст вам список
entries(транзакции, балансы и т. д.) иoptions_mapс метаданными. Все ваши счета, транзакции и балансы теперь доступны в коде. -
Используйте язык запросов Beancount (BQL): Вместо ручной итерации вы можете выполнять SQL-подобные запросы к данным. Например, чтобы получить общую сумму расходов по месяцам, вы можете использовать API запросов:
from beancount.query import query
q = query.Query(entries, options_map)
result = q.query("SELECT month, sum(position) WHERE account ~ 'Expenses' GROUP BY month")
print(result)Здесь используется система запросов Beancount для агрегирования данных. (По сути, это похоже на то, что делает команда
bean-query, но здесь вы используете ее в скрипте.) Фактически, автор Beancount отмечает, что вы можете загрузить файл и вызватьrun_query()непосредственно через API Python, избегая необходимости вызывать внешние команды в цикле. -
Настройте структуру проекта: Организуйте свои скрипты вместе с вашей бухгалтерской книгой. Распространенная структура - это наличие каталогов для импортеров (для получения/разбора внешних данных), отчетов или запросов (для скриптов анализа) и документов (для хранения загруженных выписок). Например, один пользователь хранит:
importers/- пользовательские скрипты импорта Python (с тестами),queries/- скрипты для создания отчетов (запускаемые черезpython3 queries/...),documents/- загруженные банковские CSV/PDF, организованные по счетам.
С помощью этой настройки вы можете запускать скрипты вручную (например, python3 queries/cash_flow.py) или планировать их (через cron или task runner) для автоматизации рабочего процесса.
Автоматизация задач сверки
Сверка означает, что ваша бухгалтерская книга соответствует внешним записям (банковским выпискам, отчетам по кредитным картам и т. д.). Простой текстовый формат Beancount и API Python позволяют автоматизировать большую часть этого процесса.