Перейти до основного вмісту
Beancount.io Logo

Оголосіть ролі грошових потоків у вашій книзі: один рядок метаданих замінює здогад

Опубліковано 7 хв. читанняMike ThriftMike Thrift
Оголосіть ролі грошових потоків у вашій книзі: один рядок метаданих замінює здогад

Кожен звіт про рух грошових коштів спирається на тихе рішення, яке приймається один раз для кожного рахунку: чи є цей рахунок частиною грошових коштів, які ви пояснюєте, чи це операційна, інвестиційна або фінансова діяльність? Прийміть це рішення правильно — і звіт розповість вам, куди насправді пішли ваші гроші. Помиліться — і звіт буде впевнено вводити в оману.

До цього часу звіт про рух грошових коштів Beancount.io приймав це рішення за вас за допомогою евристик — кореневого типу рахунку плюс здогад на основі назви, які активи вважати грошима. Для більшості книг здогад був правильним більшість часу, а решту часу — мовчки неправильним. Брокерський рахунок, названий неправильно, потрапляв у неправильний розділ. Фонд грошового ринку, який є грошима в будь-якому практичному сенсі, сидів в інвестиційній діяльності, тому що його назва про це не говорила.

Починаючи з сьогодні, ви можете зробити класифікацію явною. Один рядок стандартних метаданих beancount у директиві open рахунку:

2000-01-01 open Assets:US:Brokerage
  cash-flow-role: "investing"
 
2000-01-01 open Assets:US:Marcus:Savings
  cash-flow-role: "cash"

Один ключ, чотири значення — cash, operating, investing, financing — і це вся конфігурація. Немає сторінки налаштувань, немає JSON-файлу, немає діалогу параметрів для кожного звіту. Наступного разу, коли завантажиться звіт про рух грошових коштів, потоки брокерського рахунку з'являться в розділі інвестиційної діяльності, ощадний рахунок приєднається до купи грошових коштів, зміну яких пояснює звіт, а всі інші рахунки працюватимуть точно так, як раніше.

Звіт про рух грошових коштів Beancount.io для прикладу книги: щомісячний графік чистого грошового потоку над детальними таблицями операційної та інвестиційної діяльності.

Що означає кожна роль

Звіт про рух грошових коштів сортує кожен рахунок в одну з двох ролей, і cash-flow-role відповідає на обидва питання одним словом:

  • "cash" — рахунок належить до купи грошових коштів та їх еквівалентів. Грошові рахунки ніколи не з'являються як окремі рядки; звіт пояснює зміну їхнього сукупного балансу, а перекази між двома грошовими рахунками взаємознищуються, як і має бути, коли ви переміщуєте гроші з поточного на ощадний рахунок.
  • "operating" / "investing" / "financing" — рахунок не є грошима, і його зміна за період з'являється як рядок у відповідному розділі діяльності.

За замовчуванням звіт вважає активи, назви яких містять Cash, Checking, Savings або Bank, еквівалентами грошових коштів. Оголошення ролі перевизначає це в обох напрямках. cash-flow-role: "cash" додає рахунок, який правило назви пропускає — фонд грошового ринку, гаманець стейблкоїнів. А cash-flow-role: "investing" на Assets:US:Bank:CD робить дві речі одним рядком: виключає депозитний сертифікат із грошових коштів і відносить його до інвестицій, навіть якщо його назва відповідала б правилу грошових коштів.

Ми навмисно використали один ключ замість двох. "Чи є цей рахунок грошима?" і "до якого розділу діяльності він належить?" ніколи не були незалежними питаннями — рахунок або є частиною купи грошових коштів, або належить рівно до одного розділу діяльності. Два ключі дозволили б безглузді стани, наприклад, грошовий рахунок із роллю діяльності. Один ключ робить нелегальні стани непредставними, а вся специфікація вміщується в один твіт.

Подання By Activity звіту про рух грошових коштів, що складає операційні, інвестиційні та фінансові потоки за місяць.

Класифікація, яку ви оголошуєте, — це класифікація, яку використовує кожне подання. Графік By Activity складає щомісячні операційні, інвестиційні та фінансові потоки; змініть роль рахунку — і його потоки перемістяться на правильний шар графіка, у правильний розділ звіту та правильний рядок експорту, все одночасно.

Оголошене перемагає над виведеним — і звіт показує свою роботу

Класифікація тепер визначається у строгому порядку: спочатку ваші метадані, потім вбудована евристика. І звіт чесно розповідає, що він зробив. Звіт закінчується панеллю "Грошові кошти та їх еквіваленти у цьому звіті", яка перелічує точно, які рахунки він вважав грошима при побудові цифр, а потім звіряє їх: грошові кошти на початок періоду, грошові кошти на кінець періоду та чисту зміну, яку пояснюють розділи діяльності.

Кінець звіту про рух грошових коштів: звірка чистої зміни грошових коштів та їх еквівалентів і панель із переліком рахунків, які вважалися грошима при побудові звіту.

Звіт також розрізняє класифікації, які ви оголосили, від класифікацій, які він вивів, і це розрізнення переноситься в експорт CSV та Markdown: звіт, побудований повністю з оголошених ролей, більше не несе рядок розкриття "класифікація є виведеною", тому що в цей момент класифікація — це не висновок, це частина ваших книг.

Друковані помилки обробляються так, як і має обробляти інструмент відкритого тексту. cash-flow-role: "invsting" не приймається мовчки і не ігнорується мовчки: рахунок повертається до стандартної евристики, а панель статусу позначає це — "невідоме значення cash-flow-role, використовується стандартне" — щоб помилка була видима там, де ви дивитеся, а не похована в журналі.

Якщо ви нічого не змінюєте, нічого не змінюється

Неанотовані рахунки використовують ті самі опубліковані стандартні значення, що й раніше: доходи та витрати відображаються на операційну діяльність, негрошові активи — на інвестиційну, зобов'язання та власний капітал — на фінансову, а грошові еквіваленти, визначені за назвою, формують купу грошових коштів. Існуюча книга відображається ідентично до та після цього випуску. Більшість користувачів анотуватимуть кілька рахунків — ті, де стандартне значення неправильне — і ніколи не думатимуть про решту.

Портативність також не порушена. Метадані в директивах open — це основна синтаксична конструкція beancount, яку розбирає кожен інструмент v2/v3 і ігнорує все, що не шукає цей конкретний ключ. bean-check проходить, Fava знизує плечима, а ваша книга залишається повністю придатною для використання поза Beancount.io.

Кожне подання ваших грошей узгоджується з усіма іншими

Один спільний резолвер визначає остаточну роль для кожного рахунку, і кожен споживач читає з нього:

  • Звіт про рух грошових коштів будує свої розділи діяльності та свій підсумок — чисту зміну грошових коштів та їх еквівалентів — із визначених ролей.
  • Експорт CSV, Markdown та друк несуть ті самі цифри, з розкриттям виведеної класифікації лише там, де фактично використовувалася евристика.
  • Оглядова діаграма Санкі читає ті самі оголошення, тому рахунок, позначений вами як грошовий, перестає з'являтися як вузол потоку, а ваші оголошені ролі діяльності враховуються для не-дохідних рахунків.
  • Панель статусу рахунку перестає перелічувати оголошений рахунок як "некласифікований актив".

Оглядова діаграма Санкі, що показує потік грошей від доходів через грошові кошти до категорій витрат, інвестицій та заощаджень — побудована на тих самих класифікаціях рахунків, що й звіт про рух грошових коштів.

Немає жодного способу, щоб звіт і діаграма розходилися в думці про те, що є вашими грошима, тому що існує лише одна відповідь, з якою можна не погоджуватися.

Чому книга, а не сторінка налаштувань

Це частина випуску, якою ми найбільше пишаємося. Ми розглядали інтерфейс налаштувань і відхилили його з трьох причин:

  1. Книга є джерелом істини. Класифікація, яка живе деінде, може суперечити книгам, які вона описує. Класифікація, яка живе в директиві open, подорожує разом із рахунком — через перейменування, через переміщення репозиторію, через кожного клієнта, який читає файл.
  2. Відкритий текст можна порівнювати, шукати та переглядати. Якщо ви зберігаєте свою книгу в git — а якщо ви використовуєте Beancount.io, ви це робите — правило класифікації тепер можна grep, diff та blame, і рецензент може побачити його в pull request. Сторінка налаштувань не є жодним із цих.
  3. Це працює офлайн і всюди. Будь-який редактор може оголосити роль. Будь-який майбутній клієнт, який читає книгу, отримує класифікацію безкоштовно, без жодних налаштувань для синхронізації на кожному клієнті.

З тієї ж причини класифікації навмисно не є дато-ефективними. Метадані описують природу рахунку, яка рідко змінюється; коли це стається, ви редагуєте директиву open, і ваша історія git записує, що змінилося і коли. Ця історія і є аудиторським слідом.

Спробуйте на своїй книзі

Функція зараз розгортається на всіх книгах. Оголошення ролі потребує лише текстового редактора:

  1. Відкрийте файл, де живе директива open рахунку.
  2. Додайте cash-flow-role: "cash" (або "operating", "investing", "financing") як рядок метаданих із відступом під нею.
  3. Перезавантажте звіт про рух грошових коштів. Ваше оголошення негайно перемагає над евристикою.

Почніть із рахунків, де стандартний здогад неправильний — депозитний сертифікат, який насправді не є грошима, фонд грошового ринку, який насправді є, брокерський рахунок, який ви хочете чітко віднести до інвестиційної діяльності. Решту залиште як є. Повна специфікація — прийняті значення, пріоритет, стандартні класифікації та як обробляються недійсні значення — знаходиться в довіднику Ролі грошових потоків.

Звіт про рух грошових коштів є частиною кожної книги Beancount.io, поряд зі звітом про прибутки та збитки та балансом. Якщо ви наздоганяєте, що ще вийшло цього літа — розумніші імпорти, AI-асистент із можливістю дій та перебудований мобільний застосунок — примітки до випуску 3.6 охоплюють решту.

Ваші книги вже знали, які рахунки є інвестиціями, а які — щоденними витратами. Тепер звіт про рух грошових коштів знає це теж.

Поділитися цією статтею

14 хв. читання

NVIDIA Q2 FY2027: $96,2 млрд виручки, $59,7 млрд чистого прибутку — а операційний грошовий потік скоротився вдвічі

Виручка NVIDIA у Q2 FY2027 досягла $96,2 млрд (+106% р/р) при чистому прибутку…

financial-reporting
financial-analysis
6 хв. читання

Звіт про прибутки Shopify за 2 квартал 2026 року: GMV у $115,6 млрд забезпечує зростання доходу на 34% і маржу вільного грошового потоку у 18%

Shopify у 2 кварталі 2026 року (квартал, що закінчився 30 червня 2026 року)…

financial-reporting
financial-analysis
11 хв. читання

Звіт про старіння дебіторської заборгованості: Повний посібник із захисту грошових потоків

Звіт про старіння дебіторської заборгованості групує кожен неоплачений рахунок…

accounts-receivable
cash-flow
14 хв. читання

Звітність Robinhood за Q2 2026: рекордний квартал, перший борг в історії та одноразовий прибуток, що ховається на видноті

Дохід Robinhood у Q2 2026 зріс на 32% до рекордних $1,31 млрд, а чистий…

financial-reporting
financial-management
8 хв. читання

Нараховані витрати у Beancount: Практичний посібник (з прикладами журналу копіювання та вставки)

Зрозумійте нараховані витрати та їх значення в нарахувальному обліку за…

accounting
beancount