3 个版本

0.2.2 2024年7月27日
0.2.1 2023年12月2日
0.2.0 2023年12月2日

#17 in 金融

Download history 4/week @ 2024-05-19 99/week @ 2024-07-21 70/week @ 2024-07-28 1/week @ 2024-08-04 2/week @ 2024-08-11

172 每月下载量

GPL-3.0 或更高版本

52KB
954

Abacus-rs

CLI 纯文本会计程序

此工具是为我的个人目的编写的,尽管任何人都可以使用它或为其做出贡献。但如果你对纯文本会计很认真,请考虑使用 ledgerhledgerbeancount。或者访问 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