3 个版本
0.2.2 | 2024年7月27日 |
---|---|
0.2.1 | 2023年12月2日 |
0.2.0 | 2023年12月2日 |
#17 in 金融
172 每月下载量
52KB
954 行
Abacus-rs
CLI 纯文本会计程序
此工具是为我的个人目的编写的,尽管任何人都可以使用它或为其做出贡献。但如果你对纯文本会计很认真,请考虑使用 ledger、hledger 或 beancount。或者访问 plaintextaccounting.org 了解更多。
对于另一种基于 Rust 的方法,你也可以查看 rust_ledger,我在那里获得了一些灵感。
功能
- 双重记账式会计。
- 使用 toml 文本格式。
- 从 csv 文件导入交易。
- 余额和日记账报告。
- 按月份、季度或年度分组余额。
使用方法
Usage: abacus-rs --ledger <LEDGER> [COMMAND]
Commands:
accounts List accounts
balances Print account balance sheet report
journal Print transactions journal report
import Import transactions from csv
help Print this message or the help of the given subcommand(s)
Options:
-l, --ledger <LEDGER> Path to ledger file or directory
-h, --help Print help
-V, --version Print version
Abacus 日记账是 toml 文件,或多个 toml 文件,其中包含账户、交易和可选的,价格。
运行任何命令都需要声明账本的路径。
账户
账户以特定类型声明;资产、负债、费用、收入、权益、股票、共同基金、持仓或现金。
账户货币可以用任何术语声明。
[[account]]
open = 2023-09-30
name = "Savings Account"
type = "Assets"
currency = "USD"
[[account]]
open = 2023-09-30
name = "Dining"
type = "Expenses"
currency = "USD"
可以包含一个可选的初始余额。
[[account]]
open = 2023-09-30
name = "Savings Account"
type = "Assets"
currency = "USD"
opening_balance = 1000.00
交易
交易需要日期(YYYY-MM-DD 格式)、金额(浮点数或整数)、账户和偏移账户。偏移金额和数量可以显式声明,否则将设置为金额的相反数和一(1)。
[[transaction]]
date = 2023-10-03
amount = 100.00
account = "Dining"
offset_account = "Savings Account"
offset_amount = -100.00 # optional
quantity = 1 # optional
payee = "RESTAURAN X" # optional
note = "Meal was good" # optional
价格
声明商品价格是可选的但非常有用,可以用于定价股票或货币。
[[price]]
date = 2023-10-02
commodity = "ARS"
price = 0.00125
currency = "USD"
[[price]]
date = 2023-09-30
commodity = "VOO"
price = 390.50
currency = "USD"
打印余额
Usage: abacus-rs --ledger <LEDGER> balances [OPTIONS]
Options:
-c, --class [<CLASS>...] Filter accounts by account type
-y, --year <YEAR> Filter transactions by year
-p, --price <PRICE> Price balances at specific currency
-h, --help Print help
默认情况下,为所有账户打印账户余额。
Assets
Savings Account 3245.00 USD
Crypto Wallet 0.56 BTC
Income
Salary -2300.00 USD
Liabilities
Credit Card -200.00 USD
Expenses
Clothes 200.00 USD
Dining 55.00 USD
可以通过 -c 选项传递特定的账户类别以打印更典型的资产负债表视图。金额也可以按特定货币定价,前提是在账本中有一个 price 条目。
> abacus-rs -l example/ balances -c Assets Liabilities -p ARS
Assets
Savings Account 3017850.00 ARS
Crypto Wallet 0.56 ARS
Liabilities
Credit Card -186000.00 ARS
打印日记账
Print transactions journal report
Usage: abacus-rs --ledger <LEDGER> journal [OPTIONS]
Options:
-y, --year <YEAR> Filter transactions by year
-c, --class <CLASS> Filter accounts by account type
-a, --account <ACCOUNT> Filter accounts by account name
-p, --payee <PAYEE> Filter transactions by payee
-h, --help Print help
日记账是账本中现有交易的列表。
可以通过年份、账户类别、名称或收款人过滤交易。
仅列出餐饮费用的示例。
> abacus-rs -l example/ journal -a Dining
2023-10-10 | Dining | 20.00 | RESTAURANT X
2023-10-10 | Savings Account | -20.00 |
2023-10-11 | Dining | 35.00 | RESTAURANT Y
2023-10-11 | Savings Account | -35.00 |
导入交易
Import transactions from csv
Usage: abacus-rs --ledger <LEDGER> import [OPTIONS] --csv <CSV>
Options:
-c, --csv <CSV> CSV file with transactions to import
-f, --format <FORMAT> Date format
-h, --help Print help
要从 csv 文件导入交易,需要进行一些预格式化,以确保列名与 toml 文件中的名称匹配。
一些银行提供信用/借记格式报表,其他银行则使用正负号或括号表示负值,因此可能还需要进行一些数字格式化。
运行导入功能需要指定导入交易记录的toml文件和包含详细信息的csv文件。
运行导入脚本的示例。
> abacus-rs -l example/transactions.toml import -c ~/Downloads/bbva/visa/sep23.csv
Import start
Imported: CsvRow { date: "2023-09-28", account: "Taxes", ...
Imported: CsvRow { date: "2023-09-28", account: "Taxes", ...
Imported: CsvRow { date: "2023-09-28", account: "Taxes", ...
Imported: CsvRow { date: "2023-09-28", account: "Taxes", ...
Imported: CsvRow { date: "2023-09-23", account: "Dining",...
Imported: CsvRow { date: "2023-09-23", account: "Dining",...
Imported: CsvRow { date: "2023-09-23", account: "Medical ...
Import complete
依赖项
~5MB
~81K SLoC