Управление на Инвентара в Beancount
Инвентарната система на Beancount е мощна функция за проследяване на активи, които се купуват и продават във времето, като акции, взаимни фондове или чуждестранни валути. Тя позволява прецизно проследяване на цената на придобиване, което е от съществено значение за изчисляване на капиталови печалби и разбиране на представянето на портфейла. Този наръчник обхваща основните механики на управление на инвентара във вашия счетоводен регистър.
Основни Концепции
В основата си управ лението на инвентара се върти около проследяването на позиции. "Позиция" е просто количество от стока, държана в сметка. Beancount разграничава два основни типа позиции.
Типове Позиции
-
Обикновена Позиция (Без Цена): Това е стандартно балансово записване. То представлява количество от стока без никаква свързана цена на придобиване. Подходящо е за пари в брой или прости балансови потвърждения.
Assets:Bank:Checking 100.00 USD -
Позиция с Цена на Придобиване: Този тип позиция включва не само броя на единиците и стоката, но и цената, на която е придобита. Това е основата на инвентарното проследяване. Цената е посочена във фигурни скоби
{}.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}В този пример, ние държим 10 единици
VTSAX. Всяка единица е придобита на цена от $100.00 USD. Тази конкретна партида акции е идентифицирана като "лот".
Инвентарни Операции
Има две основни операции, които можете да извършите вър ху инвентара:
-
Увеличаване (Добавяне към инвентара): Когато купувате стока, вие увеличавате инвентара си. Вие създавате нов лот с определен брой единици и цена на придобиване.
2024-01-15 * "Buy shares"
Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"}
Assets:Bank:Checking -1250.00 USDТук, ние купуваме 50 единици
STOCKна цена от $25.00 USD за единица. Това създава лот в сметкатаAssets:Invest:STOCK. -
Намаляване (Премахване от инвентара): Когато продавате стока, вие намалявате инвентара си. Трябва да посочите от кой лот продавате. Това се прави чрез предоставяне на съвпадаща информация във фигурни скоби.
2024-01-20 * "Sell shares"
Assets:Invest:STOCK -25 STOCK {25.00 USD}
Assets:Bank:Checking 625.00 USDВ тази транзакция, ние продаваме 25 единици
STOCKот лота, който е закупен на $25.00 USD за единица.
Методи на Записване
Когато намалявате инвентар, Beancount се нуждае от правило, за да реши от кой конкретен лот да изтегли, ако няколко лота съвпадат или ако съвпадението е неясно. Това правило се нарича "метод на записване". Можете да зададете метод по подразбиране за целия си файл или да посочите един за всяка сметка.
1. STRICT (По подразбиране)
Методът STRICT е методът по подразбиране и най-безопасният метод на записване. Той налага изрично и недвусмислено съвпадение.
2024-01-01 open Assets:Invest:STOCK "STRICT"
- Изисква Точно Съвпадение на Лота: Трябва да предоставите достатъчно информация в записването за намаляване (
{...}), за да идентифицирате еднозначно лота, който се продава. - Грешки при Неясни Съвпадения: Ако предоставената информация съвпада с няколко лота, Beancount ще генерира грешка, принуждавайки ви да бъдете по-конкретни.
- Изключение: Ако записването за намаляване премахне точно общия брой единици, държани в сметка, е позволено празно обозначение на цена (
{}).
2. FIFO (Първи влязъл, Първи излязъл)
Методът FIFO автоматично записва намаленията спрямо най-старите налични лотове първо.
2024-01-01 open Assets:Invest:STOCK "FIFO"
- Автоматично Разрешаване: Той разрешава неяснотата, като избира най-старите съвпадащи лотове.
- Хронологично Съвпадение: Това е често срещан счетоводен метод, при който приемате, че продавате активите, които сте държали най-дълго. Това е задължителният метод за данъчни цели в много страни.
3. 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от лота, който струва 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.