Руководство по точности и допускам в Beancount
Управление числовой точностью является краеугольным камнем двойной бухгалтерии. В цифровом бухгалтерском учете, особенно при работе с несколькими валютами, ценами акций и дробными акциями, небольшие расхождения округления могут быстро привести к неприятным ошибкам балансировки. Beancount предоставляет сложную, но интуитивно понятную систему для обработки точности и установки приемлемых допусков. Это руководство проведет вас через то, как это работает. ⚙️
Основные понятия точности
Основная цель Beancount — гарантировать, что каждая транзакция сбалансирована до нуля. Однако вычисления, связанные с ценами или затратами, часто дают результаты с большим количеством десятичных знаков, чем практически необходимо записывать. Система допусков допускает небольшие приемлемые дисбалансы.
Автоматический вывод допусков
По умолчанию Beancount автоматически выводит требуемый допуск для каждой транзакции. Этот вывод обрабатывается индивидуально для каждой транзакции и рассчитывается отдельно для каждой задействованной валюты.
Правило простое: допуск составляет половину последнего значащего разряда чисел, представленных в проводках транзакции.
Например, рассмотрим эту покупку:
2013-04-03 * "Купить фонд"
Assets:Fund 10.22626 FUND {37.61 USD}
Assets:Cash -384.61 USD
Beancount выводит допуски следующим образом:
- Для товара
FUNDчисло10.22626имеет 5 знаков после запятой. Допуск составляет половину последней цифры, то естьFUND. - Для товара
USDчисло-384.61имеет 2 знака после запятой. Допуск составляет половину последней цифры, то естьUSD.
Правила веса транзакций
При проверке баланса транзакции Beancount вычисляет «вес» каждой проводки. Правила для этого расчета следующие:
- Простая сумма: Если проводка содержит только сумму (например,
Assets:Cash -100.00 USD), ее вес является этой точной суммой. - Ценовая проводка: Если проводка имеет цену за единицу (например,
10 FUND @ 38.46 USD), ее вес составляетколичество × цена. - Проводка затрат: Если проводка имеет общую стоимость (например,
10 FUND {384.61 USD}), ее вес является суммой общей стоимости. - Стоимость и цена: Если проводка имеет как общую стоимость, так и цену за единицу (например,
10 FUND {384.61 USD} @ 38.46 USD), для балансировки используется только общая стоимость. Цена за единицу рассматривается как комментарий или памятка.