#beancount #nushell #nu #accounting #cli

app nu_plugin_from_beancount

一个将beancount文件加载到nu结构化数据的nushell扩展

3个稳定版本

2.0.0 2023年2月22日
1.1.0 2023年2月13日
1.0.0 2023年2月11日

1108编码

无许可证 和可能 CC-PDDC

275KB
4.5K SLoC

Bean 4K SLoC // 0.0% comments Rust 421 SLoC

nu_plugin_from_beancount

License Crates.io rustc

一个将nushell扩展将beancount文件转换为nu结构化数据。

当使用nushell时,可以运行bean-example | from beancountopen my-ledger.beancount以获取一个nushell结构化表格,该表格可以进行进一步转换和处理。

示例

> bean-example | from beancount | where direcive == txn | take 1
╭───┬─────────────┬───────────┬──────┬───────┬──────────────────────────────────────┬────────────────────────────────────────────────────╮
│ # │    date     │ directive │ flag │ payee │              narration               │                      postings                      │
├───┼─────────────┼───────────┼──────┼───────┼──────────────────────────────────────┼────────────────────────────────────────────────────┤
│ 02 years ago │ txn       │ *    │       │ Opening Balance for checking account │ ╭───┬─────────────────────────┬──────────────────╮ │
│   │             │           │      │       │                                      │ │ # │         account         │      amount      │ │
│   │             │           │      │       │                                      │ ├───┼─────────────────────────┼──────────────────┤ │
│   │             │           │      │       │                                      │ │ 0 │ Assets:US:BofA:Checking │ ╭───┬─────────╮  │ │
│   │             │           │      │       │                                      │ │   │                         │ │ #USD   │  │ │
│   │             │           │      │       │                                      │ │   │                         │ ├───┼─────────┤  │ │
│   │             │           │      │       │                                      │ │   │                         │ │ 04560.14 │  │ │
│   │             │           │      │       │                                      │ │   │                         │ ╰───┴─────────╯  │ │
│   │             │           │      │       │                                      │ │ 1 │ Equity:Opening-Balances │ ╭───┬──────────╮ │ │
│   │             │           │      │       │                                      │ │   │                         │ │ #USD    │ │ │
│   │             │           │      │       │                                      │ │   │                         │ ├───┼──────────┤ │ │
│   │             │           │      │       │                                      │ │   │                         │ │ 0-4560.14 │ │ │
│   │             │           │      │       │                                      │ │   │                         │ ╰───┴──────────╯ │ │
│   │             │           │      │       │                                      │ ╰───┴─────────────────────────┴──────────────────╯ │
╰───┴─────────────┴───────────┴──────┴───────┴──────────────────────────────────────┴────────────────────────────────────────────────────╯

支持的Beancount语法

  • 交易
    • 分录
      • 账户
      • 金额
      • 成本
  • 包含指令
  • 填充指令
  • 余额断言
  • 选项
  • ...

安装

cargo install nu_plugin_from_beancount
register ~/.cargo/bin/nu_plugin_from_beancount

配套脚本

目前,此插件故意相当简单,它所做的只是输出beancount文件内容,而不进行任何转换或解析。但对于大多数账簿,文件内容不包含进一步分析所需的所有信息。例如,交易通常不是显式平衡的(一个分录没有显式金额),这使得对金额的任何有用汇总都变得困难。

以下是一些可能与from beancount一起使用的“配套”脚本。

注意 这些脚本仅作为建议提供。它们未经过彻底测试,也不被视为插件API的一部分。

# Negate a structured amount (which is a record of currencies to values)
def "bean amount neg" [] {
  transpose currency value | update value { -($in.value) } | transpose -ird
}

# Complete transactions that are not explitly balanced, so that all transactions balance
def "bean resolve txn" [] {
  each {|row|
    if $row.directive != "txn" { $row } else {
      let offset_accounts = ($row.postings | where amount == $nothing | get -i account)
      if ($offset_accounts | is-empty) { $row } else {
        let complete_postings = ($row.postings | where amount != $nothing)
        let offset_account = ($offset_accounts | first)
        let offset_amount = ($complete_postings | get amount | math sum | bean amount neg)
        $row | update postings ($complete_postings | append {account: $offset_account, amount: $offset_amount})
      }
    }
  }
}

无许可证

这是一款免费且无负担的软件,已发布到公有领域。

任何人都可以免费复制、修改、发布、使用、编译、销售或分发此软件,无论是以源代码形式还是编译的二进制形式,出于任何目的,无论是商业目的还是非商业目的,以及通过任何手段。

在承认版权法的司法管辖区,此软件的作者或作者将此软件的任何和所有版权利益捐赠给公有领域。我们做出这一捐赠是为了公共利益,损害我们的继承人和继承人的利益。我们有意将此捐赠视为放弃根据版权法对软件的现有和未来所有权利的永久性行为。

本软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者不对任何索赔、损害或其他责任承担责任,无论这些责任是在合同行为、侵权行为或其他行为中产生的,以及与软件或软件的使用或其他处置有关。

有关更多信息,请参阅 http://unlicense.org/

依赖关系

~14–27MB
~390K SLoC