Beancount의 재고 관리
Beancount의 재고 시스템은 주식, 뮤추얼 펀드 또는 외화와 같이 시간이 지남에 따라 사고 팔리는 자산을 추적하는 강력한 기능입니다. 자본 이득을 계산하고 포트폴리오 성과를 이해하는 데 필수적인 취득 원가를 정확하게 추적할 수 있습니다. 이 튜토리얼에서는 원장 내에서 재고를 관리하는 핵심 메커니즘을 다룹니다.
핵심 개념
핵심적으로 재고 관리는 포지션 추적을 중심으로 이루어집니다. "포지션"은 단순히 계정에 보유된 상품의 양입니다. Beancount는 두 가지 기본적인 포지션 유형을 구별합니다.
포지션 유형
-
단순 포지션 (원가 없음): 이것은 표준 잔액 게시입니다. 이는 관련 취득 원가 없이 상품의 양을 나타냅니다. 현금 또는 단순 잔액 어설션에 적합합니다.
Assets:Bank:Checking 100.00 USD
-
취득 원가가 있는 포지션: 이 유형의 포지션에는 단위 수와 상품뿐만 아니라 취득한 원가도 포함됩니다. 이것은 재고 추적의 기초입니다. 원가는 중괄호
{}
안에 지정됩니다.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lot-1"}
이 예제에서는
VTSAX
10단위를 보유하고 있습니다. 각 단위는 100.00 USD의 비용으로 취득했습니다. 이 특정 주식 배치는 "lot"으로 식별됩니다.
재고 작업
재고에 대해 수행할 수 있는 두 가지 주요 작업이 있습니다.
-
증가 (재고에 추가): 상품을 구매하면 재고가 증가합니다. 특정 단위 수와 취득 원가로 새 lot을 만듭니다.
2024-01-15 * "주식 구매"
Assets:Invest:STOCK 50 STOCK {25.00 USD, "lot-1"}
Assets:Bank:Checking -1250.00 USD여기서는 단위당 25.00 USD의 비용으로
STOCK
50단위를 구매합니다. 그러면Assets:Invest:STOCK
계정에 lot이 생성됩니다. -
감소 (재고에서 제거): 상품을 판매하면 재고가 감소합니다. 판매하는 lot을 지정해야 합니다. 이는 중괄호 안에 일치하는 정보를 제공하여 수행됩니다.
2024-01-20 * "주식 판매"
Assets:Invest:STOCK -25 STOCK {25.00 USD}
Assets:Bank:Checking 625.00 USD이 거래에서는 단위당 25.00 USD로 구매한 lot에서
STOCK
25단위를 판매합니다.
부킹 방법
재고를 줄일 때 Beancount는 여러 lot이 일치하거나 일치가 모호한 경우 풀할 특정 lot을 결정하는 규칙이 필요합니다. 이 규칙을 "부킹 방법"이라고 합니다. 전체 파일에 대한 기본 방법을 설정하거나 각 계정에 대해 하나를 지정할 수 있습니다.
1. STRICT (기본값)
STRICT
방법은 기본값이자 가장 안전한 부킹 방법입니다. 명시적이고 명확한 일치를 적용합니다.
2024-01-01 open Assets:Invest:STOCK "STRICT"
- 정확한 lot 일치 필요: 판매되는 lot을 고유하게 식별하기 위해 감소 게시 (
{...}
)에 충분한 정보를 제공해야 합니다. - 모호한 일치 시 오류 발생: 제공된 정보가 여러 lot과 일치하면 Beancount는 오류를 발생시켜 더 구체적으로 지정해야 합니다.
- 예외: 감소 게시가 계정에 보유된 총 단위 수를 정확히 제거하는 경우 빈 원가 지정자 (
{}
)가 허용됩니다.
2. FIFO (선입선출)
FIFO
방법은 사용 가능한 가장 오래된 lot에 대해 자동으로 감소를 부킹합니다.
2024-01-01 open Assets:Invest:STOCK "FIFO"
- 자동 해결: 가장 오래된 일치하는 lot을 선택하여 모호성을 해결합니다.
- 시간순 일치: 이것은 가장 오랫동안 보유한 자산을 판매한다고 가정하는 일반적인 회계 방법입니다. 이것은 많은 국가에서 세금 목적으로 필요한 방법입니다.
3. LIFO (후입선출)
LIFO
방법은 FIFO의 반대입니다. 사용 가능한 최신 lot에 대해 감소를 부킹합니다.
2024-01-01 open Assets:Invest:STOCK "LIFO"
- 역순: 감소 기준과 일치하는 가장 최근에 취득한 lot을 선택합니다.
- 세금 최적화: 일부 관할 구역에서는 자본 이득을 최소화하기 위해 가장 높은 취득 원가를 가진 주식을 먼저 판매하는 등 이 방법을 사용하여 세금을 최적화할 수 있습니다.
4. NONE
NONE
방법은 lot 일치를 완전히 비활성화합니다.
2024-01-01 open Assets:Invest:STOCK "NONE"
- lot 일치 없음: Beancount는 감소를 증가에 일치시키려고 시도하지 않습니다.
- 혼합된 부호 허용: 이렇게 하면 계정이 동일한 상품의 양수 및 음수 잔액을 동시에 보유할 수 있습니다. 이 동작은 Ledger CLI 도구가 상품을 처리하는 방식과 유사합니다.
Lot 사양
"lot"은 특정 시점과 가격에 취득한 특정 상품 블록입니다. 포지션을 생성하거나 줄일 때 lot 속성을 자세히 지정할 수 있습니다.
전체 사양
재고를 늘릴 때 (구매) lot에 대해 최대 세 가지 속성을 지정할 수 있습니다.
Assets:Invest:STOCK 10 STOCK {
100.00 USD, # 취득 원가 (단위당 비용)
2024-01-15, # 취득 날짜
"lot-identifier" # 고유한 문자열 레이블
}
세 가지 모두 선택 사항이지만 최소한 취득 원가를 제공하는 것이 일반적인 관행입니다.
일치 방법
재고를 줄일 때 (판매) 동일한 구문을 사용하여 판매할 lot을 지정합니다.
-
원가별 일치: 이것이 가장 일반적인 방법입니다.
Assets:Invest:STOCK -5 STOCK {100.00 USD}
-
날짜별 일치: 원가가 동일한 경우 취득 날짜를 사용하여 명확하게 구분할 수 있습니다.
Assets:Invest:STOCK -5 STOCK {2024-01-15}
-
레이블별 일치: 레이블은 lot을 식별하는 확실한 방법을 제공합니다.
Assets:Invest:STOCK -5 STOCK {"lot-identifier"}
-
모든 lot 일치: 빈 중괄호 세트
{}
는 사용 가능한 모든 lot과 일치합니다. 이것은 특정 lot이 자동으로 선택되는FIFO
또는LIFO
부킹과 함께 자주 사용됩니다.Assets:Invest:STOCK -5 STOCK {}