Преминете към основното съдържание

Управление на Инвентара в Beancount

Инвентарната система на Beancount е мощна функция за проследяване на активи, които се купуват и продават във времето, като акции, взаимни фондове или чуждестранни валути. Тя позволява прецизно проследяване на цената на придобиване, което е от съществено значение за изчисляване на капиталови печалби и разбиране на представянето на портфейла. Този наръчник обхваща основните механики на управление на инвентара във вашия счетоводен регистър.

Основни Концепции

inventories

В основата си управлението на инвентара се върти около проследяването на позиции. "Позиция" е просто количество от стока, държана в сметка. Beancount разграничава два основни типа позиции.

Типове Позиции

  1. Обикновена Позиция (Без Цена): Това е стандартно балансово записване. То представлява количество от стока без никаква свързана цена на придобиване. Подходящо е за пари в брой или прости балансови потвърждения.

    Assets:Bank:Checking      100.00 USD
  2. Позиция с Цена на Придобиване: Този тип позиция включва не само броя на единиците и стоката, но и цената, на която е придобита. Това е основата на инвентарното проследяване. Цената е посочена във фигурни скоби {}.

    Assets:Invest:VTSAX      10 VTSAX {100.00 USD, "lot-1"}

    В този пример, ние държим 10 единици VTSAX. Всяка единица е придобита на цена от $100.00 USD. Тази конкретна партида акции е идентифицирана като "лот".

Инвентарни Операции

Има две основни операции, които можете да извършите върху инвентара:

  1. Увеличаване (Добавяне към инвентара): Когато купувате стока, вие увеличавате инвентара си. Вие създавате нов лот с определен брой единици и цена на придобиване.

    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.

  2. Намаляване (Премахване от инвентара): Когато продавате стока, вие намалявате инвентара си. Трябва да посочите от кой лот продавате. Това се прави чрез предоставяне на съвпадаща информация във фигурни скоби.

    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: Анотация, която записва пазарна цена в момента на транзакцията. Използва се за валутни конверсии или за отбелязване на пазарната стойност на определена дата.

Ето трите сценария:

  1. Анотация на Цената (Конверсия): Използвайте @, за да конвертирате от една валута в друга.

    Assets:Forex     1000 USD @ 0.85 EUR
  2. Цена на Придобиване (Придобиване): Използвайте {}, когато купувате актив, за да установите неговата цена.

    Assets:Invest    10 STOCK {100.00 USD}
  3. И Двете (Продажба със Запис на Цена): Когато продавате актив, използвайте {}, за да идентифицирате лота, който се продава, и @, за да запишете продажната цена. Това позволява автоматизирано изчисляване на капиталови печалби.

    Assets:Invest    -10 STOCK {100.00 USD} @ 105.00 USD

    Този запис продава 10 STOCK от лота, който струва 100.00всеки,напродажнаценаот100.00 всеки, на продажна цена от 105.00 всеки.

Правила за Използване на Цената

  1. Анотациите на цените (@) не влияят на това кой лот е записан. Съвпадението на лотове се обработва изключително от цената на придобиване ({}) и метода на записване на сметката.
  2. Символът @ се използва само за:
  • Валутни конверсии.
  • Записване на пазарната стойност на актив в момента на транзакция.
  • Предоставяне на продажната цена за изчисления на капиталови печалби.

Конфигурация

Можете да конфигурирате методи на записване глобално или на базата на всяка сметка.

Глобален Метод на Записване

Можете да зададете метод на записване по подразбиране за целия си 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"

Най-добри Практики

  1. Инвентарна Организация: За да поддържате вашия регистър чист и прост, силно се препоръчва да използвате отделни сметки за всяка уникална стока, която държите.

    # ДОБРЕ: Отделни сметки по стока
    Assets:Invest:VTSAX ; Само VTSAX позиции тук
    Assets:Invest:VFIAX ; Само VFIAX позиции тук

    Избягвайте смесването на различни акции или фондове в една и съща сметка, тъй като това усложнява управлението на инвентара.

  2. Управление на Лотове:

  • Използвайте смислени етикети за лотове, особено за конкретни транзакции като данъчна реколта от загуби или служебни акции.

    Assets:Invest:STOCK  10 STOCK {100.00 USD, "tax-loss-harvest-2024"}
  • Документирайте своите сделки с коментари. Това прави вашия регистър по-лесен за четене и разбиране по-късно.

    Assets:Invest:STOCK  -10 STOCK {100.00 USD} @ 110.00 USD ; Печалба: 10%
  1. Отстраняване на Грешки: Ако срещнете грешки или неочаквано поведение, Beancount предоставя инструменти за проверка на състоянието на вашия инвентар.
  • Разгледайте Инвентарното Състояние: Инструментът bean-doctor може да ви покаже точното състояние на всички инвентари във всеки момент от вашия файл.

    Заменете <LINENO> с номера на реда точно след транзакция, за да видите нейния ефект.

  • Проверете Съвпадението на Лотове: Инструментът bean-check валидира целия ви файл. Той ще хване всички грешки при записване, като например неясни съвпадения на лотове в режим STRICT.