这是一份简明而全面的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备注与文档
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重要规则
- 所有交易必须平衡:所有分录的权重之和为零。分录的权重是其金额,或者当存在成本(
{})或价格(@)时,转换到另一种货币后的金额。 - 账户必须在使用前开立;已关闭的账户不能接受分录。
- 余额断言只检查指定的货币,可以用于父账户,并在其日期的开始进行评估(因此它们排除同一天的交易)。
- 价格注释(
@单价、@@总价)确实影响平衡:它们将分录的权重设定为另一种货币。-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