이 문서는 Beancount 언어 문법에 대한 간결하면서도 포괄적인 레퍼런스를 제공하며, 실용적인 구조와 규칙, 예시를 함께 다룹니다. 더 자세한 내용은 치트 시트를 참고하세요.
개요
Beancount는 평문 복식부기 회계 시스템입니다. 이 언어는 세 가지 주요 구성 요소를 중심으로 구조화되어 있습니다.
상품
상품은 항상 대문자로 작성합니다. 예: USD, EUR, AAPL, BTC, MILES, HOURS.
계정
계정은 콜론으로 구분된 대문자화된 계층적 이름입니다. 반드시 다섯 가지 루트 계정 유형 중 하나로 시작해야 합니다.
| 이름 | 유형 | 일반적인 내용 | 예시 |
|---|---|---|---|
Assets | + | 현금, 은행, 투자 | Assets:Checking |
Liabilities | - | 신용카드, 대출 | Liabilities:CreditCard |
Income | - | 급여, 이자 | Income:EmployerA |
Expenses | + | 구매, 청구서 | Expenses:Food:Dining |
Equity | - | 기초/기말 잔액 | Equity:Opening-Balances |
- 각 구성 요소는 대문자로 시작해야 하며, 콜론(
:)으로 구분되고 공백이 없어야 합니다. - 구성 요소에 숫자와 대시를 사용할 수 있습니다.
- 루트 계정 이름은 옵션을 통해 사용자 지정할 수 있습니다(아래 참조).
지시어
지시자는 Beancount 파일의 핵심 구문입니다. 대부분은 날짜로 시작하고, 그 뒤에 지시자 유형과 인수가 옵니다. 파일 순서가 아닌 날짜순(시간순)으로 처리됩니다.
일반 형식:
YYYY-MM-DD <directive> <arguments...>일반적인 지시어 및 예제
계정 개설 및 폐쇄
2023-01-01 open Assets:Checking USD,EUR ; Optionally specify allowed currencies
2023-12-31 close Assets:Checking상품 선언
2020-07-22 commodity AAPL
name: "Apple Inc."가격 선언
2022-04-30 price AAPL 150.00 USD호스팅된 원장에서 자동 평가 시세를 사용하려면 실시간 가격 설정을 참고하세요. 관리형 피드는 일반적인 날짜가 지정된 price 지시자를 제공합니다. 이는 거래 가격(@, @@)이나 로트 원가({})를 대체하지 않습니다.
메모 및 문서
2022-03-20 note Assets:Checking "Asked about refund"
2022-03-20 document Assets:Checking "statements/2022-03.pdf"거래
2024-01-05 * "Coffee Shop" "Morning coffee"
Expenses:Food 4.50 USD
Assets:Cash -4.50 USD
2024-01-06 ! "Phone Bill" "Monthly payment" #utilities ^phone
id: "INV12345" ; Metadata
Expenses:Utilities 60.00 USD
Assets:Checking분개 기능
; With cost basis
Assets:Stocks 1 AAPL {150.00 USD}
; With price annotation
Assets:Cash -100 USD @ 1.25 CAD
; With total price
Assets:Cash -100 USD @@ 125.00 CAD
; Implicit balance
Assets:Cash -100 USD
Assets:Bank잔액 확인 및 패딩
pad는 그것이 공급하는 balance보다 앞선 날짜여야 합니다. 잔액 검증은 해당 날짜의 시작 시점에 확인되기 때문입니다.
2024-06-01 pad Assets:Checking Equity:Opening-Balances
2024-06-02 balance Assets:Checking 1000.00 USD이벤트
2024-06-01 event "location" "San Francisco, CA"옵션
파일 전체 설정을 지정합니다.
option "title" "My Ledger"
option "operating_currency" "USD"
option "documents" "docs/"
option "name_assets" "Vermoegen"더 많은 내용은 옵션 레퍼런스를 참고하세요.
플러그인 및 파일 구성
plugin "beancount.plugins.module_name"
plugin "beancount.plugins.module_name" "config-string"
include "other/file.beancount"
pushtag #project
; ...
poptag #project호스팅된 Beancount.io는 지원되는 관리형 가격 URL include도 처리합니다. 이는 업스트림 Beancount의 확장 기능입니다. 호스팅 및 로컬 호환성을 위해서는 실시간 가격 설정 가이드를 참고하세요.
중요 규칙
- 모든 거래는 균형을 이루어야 합니다. 모든 기입의 가중치 합은 0이 되어야 합니다. 기입의 가중치는 그 금액이거나, 원가(
{}) 또는 가격(@)이 있을 경우 다른 통화로 환산된 값입니다. - 계정은 사용 전에 개설해야 하며, 폐쇄된 계정은 기입을 받을 수 없습니다.
- 잔액 검증은 지정된 통화만 확인하며, 상위 계정에도 사용할 수 있고, 해당 날짜의 시작 시점에 평가됩니다(따라서 같은 날의 거래는 제외됩니다).
- 가격 표기(
@는 단위당,@@는 총액)는 실제로 균형에 영향을 줍니다. 이들은 다른 통화로 기입의 가중치를 설정합니다.-100 USD @ 1.25 CAD는125 CAD의 가중치를 가지며125 CAD기입을 상쇄합니다. 가격을 제거하면 거래는 더 이상 균형을 이루지 않습니다.
일반적인 패턴
개시 잔액으로 계정 개설
두 계정을 모두 개설하고, 시작 날짜에 pad를 사용한 뒤, 다음 날 잔액을 검증합니다(잔액 검증은 해당 날짜의 시작 시점에 확인됩니다).
2024-01-01 open Assets:Checking USD
2024-01-01 open Equity:Opening-Balances
2024-01-01 pad Assets:Checking Equity:Opening-Balances
2024-01-02 balance Assets:Checking 1000.00 USD투자 거래
2024-01-01 * "Buy stock"
Assets:Broker:Stock 10 AAPL {150.00 USD}
Assets:Broker:Cash -1500.00 USD다중 통화 거래
2024-01-01 * "Currency exchange"
Assets:USD -100.00 USD @ 1.25 CAD
Assets:CAD 125.00 CAD주석
poptag #trip-to-peru
; inline comments begin with a semi-colon
* any line not starting with a valid directive is also ignored silently