Створювані за допомогою скриптів робочі процеси з 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 або засобу запуску завдань) для автоматизації робочого процесу.
Автоматизація завдань звірки
Звірка означає перевірку відповідності вашої бухгалтерської книги зовнішнім записам (банківським випискам, звітам за кредитними картками тощо). Бухгалтерська книга у форматі звичайного тексту Beancount і API Python дозволяють автоматизувати значну частину цього процесу.
Імпорт і зіставлення транзакцій (для початківців)
Для початківців рекомендованим підходом є використання плагінів імпорту Beancount. Ви пишете невеликий клас Python, дотримуючись протоколу імпорту Beancount, щоб проаналізувати заданий формат (CSV, OFX, PDF тощо) і створити транзакції. Потім використовуйте команду bean-extract або скрипт, щоб застосувати ці імпортери:
- Напишіть імпортер (клас Python з такими методами, як
identify(),extract()) для формату CSV вашого банку. Документація Beancount містить посібник і приклади. - Використовуйте
bean-extractу скрипті або Makefile (як у прикладіjustfile) для аналізу нових виписок. Наприклад, один робочий процес запускаєbean-extractдля всіх файлів у~/Downloadsі виводить транзакції у тимчасовий файл. - Вручну перегляньте та скопіюйте транзакції з тимчасового файлу у свою основну бухгалтерську книгу, потім запустіть
bean-check, щоб переконатися, що залишки збігаються.
Хоча цей процес все ще включає етап перевірки, значна частина трудомісткої роботи з аналізу та форматування записів автоматизована. Скрипти імпо рту можуть також автоматично призначати категорії та навіть встановлювати твердження щодо залишку (твердження очікуваних залишків) для виявлення розбіжностей. Наприклад, після імпорту ви можете мати рядок на кшталт 2025-04-30 balance Assets:Bank:Checking 1234.56 USD, який підтверджує кінцевий залишок. Коли ви запускаєте bean-check, Beancount перевірить, чи всі ці твердження щодо залишку правильні, і позначить будь-які помилки, якщо транзакції відсутні або дублюються. Це найкраща практика: автоматично генеруйте твердження щодо залишку для кожного звітного періоду, щоб комп’ютер міг виявляти не узгоджені відмінності за вас.
Спеціальні скрипти звірки (середній рівень)
Для більшого контролю ви можете написати власний скрипт Python для порівняння списку транзакцій банку (CSV або через API) із записами вашої бухгалтерської книги:
- Прочитайте зовнішні дані: проаналізуйте CSV-файл банку за допомогою модуля
csvPython (або Pandas). Нормалізуйте дані в список транзакцій, наприклад, кожна з датою, сумою та описом. - Завантажте транзакції бухгалтерської книги: використовуйте
loader.load_file, як показано раніше, щоб отримати всі записи бухгалтерської книги. Відфільтруйте цей список до потрібного рахунку (наприклад, ваш поточний рахунок) і, можливо, діапазону дат виписки. - Порівняйте та знайдіть невідповідності:
- Для кожної зовнішньої транзакції перевірте, чи існує ідентичний запис у бухгалтерській книзі (зіставте за датою та сумою, можливо, описом). Якщо не знайдено, позначте його як "новий" і, можливо, виведіть як транзакцію у форматі Beancount для перегляду.
- І навпаки, визначте будь-які записи бухгалтерської книги на цьому рахунку, які не відображаються у зовнішньому джерелі – це можуть бути помилки введення даних або транзакції, які не були проведені банком.
- Виведіть результати: надрукуйте звіт або створіть новий фрагмент
.beancountз відсутніми транз акціями.
Як приклад, скрипт спільноти під назвою reconcile.py робить саме це: враховуючи файл Beancount і вхідний CSV-файл, він друкує список нових транзакцій, які слід імпортувати, а також будь-які наявні записи бухгалтерської книги, яких немає у вхідних даних (потенційно ознака неправильної класифікації). За допомогою такого скрипту щомісячна звірка може бути такою ж простою, як його запуск, а потім додавання запропонованих транзакцій до вашої бухгалтерської книги. Один користувач Beancount зазначає, що вони "проводять процес звірки для всіх рахунків щомісяця" і використовують зростаючу колекцію коду Python для усунення значної частини ручної роботи з імпорту та звірки даних.
Порада: Під час звірки використовуйте інструменти Beancount для точності:
- Використовуйте твердження щодо залишку, як згадано вище, щоб автоматично перевіряти залишки на рахунках.
- Використовуйте директиву
pad, якщо потрібно, яка може автоматично вставляти збалансувальні записи для незначних розбіжностей заокруглення (використовуйте з обережністю). - Напишіть модульні тести для своєї логіки імпорту або звірки (Beancount надає допоміжні функції тестування). Наприклад, один робочий процес включав взяття зразка CSV-файлу, написання невдалих тестів з очікуваними транзакціями, а потім реалізацію імпортера, доки всі тести не будуть успішно пройдені. Це гарантує, що ваш скрипт імпорту працює правильно для різних випадків.
Створення спеціальних звітів і підсумків
Хоча Fava надає багато стандартних звітів (Звіт про прибутки та збитки, Баланс тощо), ви можете створювати спеціальні звіти за допомогою скриптів. Вони можуть варіюватися від простих вихідних даних консолі до файлів із форматуванням або діаграм.