The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

App::HomeBank2Ledger::Ledger - Ledger data representation

VERSION

version 0.010

SYNOPSIS

    my $ledger = App::HomeBank2Ledger::Ledger->new;

    $ledger->add_payees("Ann's Antiques", "Missy Automative");

    for my $payee (@{$ledger->payees}) {
        print "Payee: $payee\n";
    }

DESCRIPTION

This class provides a unified in-memory representation of a ledger, including associated metadata.

Here is a specification for the substructures:

account

This is a fully-qualified account name. Names may contain colons for representing a hierarchy of accounts. Examples:

  • "Assets:Bank:Chase1234"

  • "Liabilities:Credit Card:Capital One"

commodity

This is a hashref like this:

    {
        symbol  => '$',             # required
        iso     => 'USD',           # optional
        name    => 'US Dollar',     # optional
        format  => '$1000.00',      # optional
    }

payee

This is just a string with the name of a "payee" or memo/description/narration.

tag

This is just a string with the text of a tag.

transaction

This is a hashref like this:

    {
        date        => '2019-06-12',        # required
        aux_date    => '2019-06-13',        # optional
        status      => 'cleared',           # optional; can be "cleared" or "pending"
        code        => '1234',              # optional
        payee       => 'Malcolm Reynolds',  # required
        note        => 'Medical supplies',  # optional
        postings    => [                    # required
            {
                account     => 'Some Account',  # required
                amount      => '16.25',         # required for at least n-1 postings
                commodity   => {
                    symbol  => '$',
                    format  => '$1,000.00',
                    iso     => 'USD',
                    name    => 'US Dollar',
                    syprf   => 1,
                    dchar   => '.',
                    gchar   => ',',
                    frac    => 2,
                },
                payee       => 'Somebody',      # optional
                note        => 'Whatever',      # optional
                status      => 'pending',       # optional; can be "cleared" or "pending"
                tags        => [qw(niska train-job)],
                lot         => {                # optional
                    date        => '2019-01-28',
                    price       => {
                        amount      => '15.00',
                        commodity   => { ... },
                    },
                },
                cost        => {                # optional
                    amount      => '10.00',
                    commodity   => { ... },
                },
            },
            ...
        ],
    }

ATTRIBUTES

accounts

Get an arrayref of accounts.

commodities

Get an arrayref of commodities.

payees

Get an arrayref of payees.

tags

Get an arrayref of tags.

transactions

Get an arrayref of transactions.

METHODS

new

    $ledger = App::HomeBank2Ledger::Ledger->new(%ledger_data);

Construct a new ledger instance.

add_accounts

Add accounts.

add_commodities

Add commodities.

add_payees

Add payees.

add_tags

Add tags.

add_transactions

Add transactions.

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/chazmcgarvey/homebank2ledger/issues

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

Charles McGarvey <chazmcgarvey@brokenzipper.com>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2019 by Charles McGarvey.

This is free software, licensed under:

  The MIT (X11) License