Rand Stats

TXN

github:atweiden

mktxn

Double-entry accounting ledger packager

Synopsis

cmdline

cat >> TXNBUILD <<'EOF'
pkgname = 'sample'
pkgver = '1.0.0'
pkgrel = 1
source = 'sample.txn'
EOF
mktxn

raku

use TXN;
my Str $pkgname = 'sample';
my Version $pkgver .= new('1.0.0');
my UInt $pkgrel = 1;
my Str $pkgdesc = 'Sample transactions';
my Str $source = 'sample.txn';
my %pkg = mktxn(:$pkgname, :$pkgver, :$pkgrel, :$pkgdesc, :$source);

Description

Serializes double-entry accounting ledgers to JSON package format.

Release Mode

In release mode, mktxn produces a tarball comprised of two JSON files:

.TXNINFO

Inspired by Arch Linux .PKGINFO files, .TXNINFO files contain accounting ledger metadata useful in simple queries.

{
  "pkgname" : "with-includes",
  "pkgver" : "0.0.1",
  "pkgrel" : 1,
  "pkgdesc" : "Sample transactions with include directives",
  "compiler" : "mktxn v0.1.0 2018-04-21T14:14:33.931470Z",
  "entities-seen" : [
    "FooCorp",
    "Personal",
    "WigwamLLC"
  ],
  "count" : 112
}

txn.json

txn.json contains the output of serializing the accounting ledger to JSON.

[
  {
    "id" : {
      "xxhash" : 1468523538,
      "text" : "2014-01-01 \"I started the year with $1000 in Bankwest cheque account\"\n  Assets:Personal:Bankwest:Cheque      $1000.00 USD\n  Equity:Personal                      $1000.00 USD",
      "number" : [
        3
      ]
    },
    "header" : {
      "important" : 0,
      "description" : "I started the year with $1000 in Bankwest cheque account",
      "date" : "2014-01-01"
    },
    "posting" : [
      {
        "drcr" : "DEBIT",
        "id" : {
          "xxhash" : 4134277096,
          "text" : "Assets:Personal:Bankwest:Cheque      $1000.00 USD",
          "entry-id" : {
            "xxhash" : 1468523538,
            "text" : "2014-01-01 \"I started the year with $1000 in Bankwest cheque account\"\n  Assets:Personal:Bankwest:Cheque      $1000.00 USD\n  Equity:Personal                      $1000.00 USD",
            "number" : [
              3
            ]
          },
          "number" : 0
        },
        "decinc" : "INC",
        "amount" : {
          "asset-code" : "USD",
          "asset-quantity" : 1000,
          "asset-symbol" : "$"
        },
        "account" : {
          "entity" : "Personal",
          "path" : [
            "Bankwest",
            "Cheque"
          ],
          "silo" : "ASSETS"
        }
      },
      {
        "drcr" : "CREDIT",
        "id" : {
          "xxhash" : 344831063,
          "text" : "Equity:Personal                      $1000.00 USD",
          "entry-id" : {
            "xxhash" : 1468523538,
            "text" : "2014-01-01 \"I started the year with $1000 in Bankwest cheque account\"\n  Assets:Personal:Bankwest:Cheque      $1000.00 USD\n  Equity:Personal                      $1000.00 USD",
            "number" : [
              3
            ]
          },
          "number" : 1
        },
        "decinc" : "INC",
        "amount" : {
          "asset-code" : "USD",
          "asset-quantity" : 1000,
          "asset-symbol" : "$"
        },
        "account" : {
          "entity" : "Personal",
          "silo" : "EQUITY"
        }
      }
    ]
  }
]

.TXNINFO and txn.json are compressed and saved as filename $pkgname-$pkgver-$pkgrel.txn.pkg.tar.xz in the current working directory.

Installation

Dependencies

Test Dependencies

To run the tests:

$ git clone https://github.com/atweiden/mktxn && cd mktxn
$ peru --file=.peru.yml --sync-dir="$PWD" sync
$ RAKULIB=lib prove -r -e raku

Licensing

This is free and unencumbered public domain software. For more information, see http://unlicense.org/ or the accompanying UNLICENSE file.