Система инвентаризации Beancount — это мощный инструмент для отслеживания активов, которые покупаются и продаются с течением времени, таких как акции, взаимные фонды или иностранные валюты. Она позволяет точно отслеживать себестоимость, что необходимо для расчета прироста капитала и оценки эффективности портфеля. Это руководство охватывает основные механизмы управления запасами в вашей книге учета.
Основные концепции
В основе управления инвентаризацией лежит отслеживание позиций. «Позиция» — это просто количество товара, хранящегося на счете. Beancount различает два фундаментальных типа позиций.
Типы позиций
-
Простая позиция (без себестоимости): Это стандартная проводка сальдо. Она представляет количество товара без какой-либо связанной стоимости приобретения. Подходит для денежных средств или простых проверок сальдо.
Assets:Bank:Checking 100.00 USD -
Позиция с себестоимостью: Этот тип позиции включает не только количество единиц и товар, но также себестоимость, по которой он был приобретен. Это основа отслеживания запасов. Себестоимость указывается в фигурных скобках
{}.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}В этом примере мы держим 10 единиц
VTSAX. Каждая единица была приобретена по себестоимости 100,00 долларов США. Эта конкретная партия акций идентифицируется как «лот».
Операции с запасами
Существует две основные операции, которые можно выполнять с запасами:
-
Увеличение (добавление в запасы): Когда вы покупаете товар, вы увеличиваете свои запасы. Вы создаете новый лот с определенным количеством единиц и себестоимостью.
2024-01-15 * "Покупка акций" Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"} Assets:Bank:Checking -1250.00 USDЗдесь мы покупаем 50 единиц
STOCKпо цене 25,00 долларов США за единицу. Это создает лот на счетеAssets:Invest:STOCK. -
Уменьшение (изъятие из запасов): Когда вы продаете товар, вы уменьшаете свои запасы. Вы должны указать, из какого лота происходит продажа. Это делается путем указания соответствующей информации в фигурных скобках.
2024-01-20 * "Продажа акций" Assets:Invest:STOCK -25 STOCK {25.00 USD} Assets:Bank:Checking 625.00 USDВ этой транзакции мы продаем 25 единиц
STOCKиз лота, который был куплен по цене 25,00 долларов США за единицу.
Методы учета
Когда вы уменьшаете запасы, Beancount требуется правило, чтобы решить, из какого конкретного лота списывать, если совпадает несколько лотов или совпадение неоднозначно. Это правило называется «метод учета». Вы можете установить метод по умолчанию для всего файла или указать его для каждого счета.
1. STRICT (строгий) — по умолчанию
Метод STRICT является методом по умолчанию и самым безопасным. Он требует явного и однозначного сопоставления.
2024-01-01 open Assets:Invest:STOCK "STRICT"- Требует точного совпадения лота: Вы должны предоставить достаточно информации в проводке уменьшения (
{...}), чтобы однозначно идентифицировать продаваемый лот. - Ошибка при неоднозначных совпадениях: Если предоставленная информация соответствует нескольким лотам, Beancount выдаст ошибку, вынуждая вас быть более конкретными.
- Исключение: Если проводка уменьшения точно удаляет общее количество единиц, хранящихся на счете, допускается пустой спецификатор себестоимости (
{}).
2. FIFO (FIFO, «первым поступил — первым выбыл»)
Метод FIFO автоматически списывает уменьшения сначала с самых старых доступных лотов.
2024-01-01 open Assets:Invest:STOCK "FIFO"- Автоматическое разрешение: Он разрешает неоднозначность, выбирая самые старые подходящие лоты.
- Хронологическое сопоставление: Это распространенный метод бухгалтерского учета, при котором предполагается, что вы продаете активы, которые держали дольше всего. Во многих странах этот метод является обязательным для налоговых целей.
3. LIFO (LIFO, «последним поступил — первым выбыл»)
Метод LIFO противоположен FIFO. Он списывает уменьшения сначала с самых новых доступных лотов.
2024-01-01 open Assets:Invest:STOCK "LIFO"- Обратный хронологический порядок: Он выбирает лоты, приобретенные наиболее недавно, которые соответствуют критериям уменьшения.
- Налоговая оптимизация: В некоторых юрисдикциях этот метод может использоваться для налоговой оптимизации, например, при продаже акций с самой высокой себестоимостью в первую очередь для минимизации прироста капитала.
4. NONE (отсутствует)
Метод NONE полностью отключает сопоставление лотов.
2024-01-01 open Assets:Invest:STOCK "NONE"- Нет сопоставления лотов: Beancount не пытается сопоставить уменьшения с увеличениями.
- Допускает смешанные знаки: Это позволяет счету одновременно иметь как положительное, так и отрицательное сальдо по одному и тому же товару. Такое поведение аналогично тому, как инструмент Ledger CLI обрабатывает товары.
Спецификация лота
«Лот» — это конкретный блок товара, приобретенный в определенное время и по определенной цене. Когда вы создаете или уменьшаете позицию, вы можете подробно указать атрибуты ее лота.
Полная спецификация
При увеличении запасов (покупке) вы можете указать до трех атрибутов лота:
Assets:Invest:STOCK 10 STOCK {
100.00 USD, # Себестоимость (цена за единицу)
2024-01-15, # Дата приобретения
"lot-identifier" # Уникальная строковая метка
}Хотя все три являются необязательными, указание как минимум себестоимости является стандартной практикой.
Методы сопоставления
При уменьшении запасов (продаже) вы используете тот же синтаксис, чтобы указать, из какого лота (лотов) продавать.
-
Сопоставление по себестоимости: Это самый распространенный метод.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
Сопоставление по дате: Если себестоимость идентична, вы можете устранить неоднозначность, используя дату приобретения.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
Сопоставление по метке: Метки обеспечивают безошибочный способ идентификации лота.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"} -
Сопоставить любой лот: Пустой набор фигурных скобок
{}будет соответствовать любому доступному лоту. Это часто используется с методами учетаFIFOилиLIFO, где конкретный лот выбирается автоматически.Assets:Invest:STOCK -5 STOCK {}
Обработка цен
Крайне важно понимать разницу между себестоимостью ({}) и ценой (@). Они служат разным целям и не являются взаимозаменяемыми.
Цена против себестоимости
{cost}: Определяет стоимость приобретения актива. Она является частью самого инвентарного лота и используется для учета уменьшений и расчета прироста капитала.@ price: Аннотация, которая записывает рыночную цену на момент совершения транзакции. Она используется для конвертации валют или для указания рыночной стоимости на определенную дату.
Вот три сценария:
-
Аннотация цены (конвертация): Используйте
@для конвертации из одной валюты в другую.Assets:Forex 1000 USD @ 0.85 EUR -
Себестоимость (приобретение): Используйте
{}при покупке актива для установления его себестоимости.Assets:Invest 10 STOCK {100.00 USD} -
Оба варианта (продажа с записью цены): При продаже актива используйте
{}для идентификации продаваемого лота и@для записи цены продажи. Это позволяет автоматически рассчитывать прирост капитала.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDЭта запись продает 10
STOCKиз лота, который стоил 100,00 долларов каждый, по цене продажи 105,00 долларов каждый.
Правила использования цены
- Аннотации цены (
@) не влияют на то, какой лот учитывается. Сопоставление лотов осуществляется исключительно на основе себестоимости ({}) и метода учета счета. - Символ
@используется только для:
- Конвертации валют.
- Записи рыночной стоимости актива на момент совершения транзакции.
- Предоставления цены продажи для расчета прироста капитала.
Конфигурация
Вы можете настроить методы учета глобально или для каждого счета.
Глобальный метод учета
Вы можете установить метод учета по умолчанию для всего файла Beancount, используя директиву option.
option "booking_method" "STRICT"Доступные варианты: "STRICT", "FIFO", "LIFO" и "NONE".
Переопределение для каждого счета
Часто бывает полезно использовать разные методы для разных счетов. Например, вы можете захотеть FIFO для пенсионного счета, но STRICT для брокерского счета, облагаемого налогом, чтобы гарантировать продажу конкретных налоговых лотов. Вы можете установить метод учета при открытии счета.
2024-01-01 open Assets:Retirement:401K "FIFO"
2024-01-01 open Assets:Taxable:Stock "STRICT"Рекомендации
-
Организация запасов: Чтобы ваша книга учета была чистой и простой, настоятельно рекомендуется использовать отдельные счета для каждого уникального товара, которым вы владеете.
# ХОРОШО: Отдельные счета по товарам Assets:Invest:VTSAX ; Только позиции VTSAX здесь Assets:Invest:VFIAX ; Только позиции VFIAX здесьИзбегайте смешивания разных акций или фондов на одном счете, так как это усложняет управление запасами.
-
Управление лотами:
-
Используйте осмысленные метки для лотов, особенно для конкретных транзакций, таких как сбор убытков от налогообложения или гранты на акции сотрудникам.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
Документируйте свои сделки комментариями. Это сделает вашу книгу учета более удобной для чтения и понимания в будущем.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; Прибыль: 10%
- Отладка: Если вы столкнулись с ошибками или неожиданным поведением, Beancount предоставляет инструменты для проверки состояния ваших запасов.
-
Проверка состояния запасов: Инструмент
bean-doctorможет показать точное состояние всех запасов в любой точке вашего файла.Замените
<LINENO>на номер строки сразу после транзакции, чтобы увидеть ее эффект. -
Проверка сопоставления лотов: Инструмент
bean-checkпроверяет весь ваш файл. Он выявит любые ошибки учета, такие как неоднозначные совпадения лотов в режимеSTRICT.