NAME
    Finance::Bookkeeping::Account - debit/credit account balances correctly

SYNOPSIS
            package MyCreditAccount;
            use Moose;
            with 'Finance::Bookkeeping::Account' => { nb => 'credit'}; # consuming class declars it's normal balance (nb) is credit or debit

            package MyDebitAccount;
            use Moose;
            with 'Finance::Bookkeeping::Account' => { nb => 'debit'}; # consuming class declars it's normal balance (nb) is credit or debit

            package MyCheckbook;
            use Moose;
            with ('Finance::Bookkeeping::Account' => {
              nb => 'debit',
                    -alias => {
                             debit => 'deposit',
                             credit => 'withdraw'
                             },
                    -excludes => ['debit', 'credit'],
                    }
            );

            package main;

            my $cr = MyCreditAccount->new;
            $cr->credit(50);
            $cr->debit(20);
            say $cr->balance; # 30


            my $dr = MyDebitAccount->new;
            $dr->debit(10);
            $dr->credit(5);
            $dr->credit(50);
            say $dr->balance; # -45

            my $bankaccount = MyCheckbook->new;
            $bankaccount->deposit(10);
            $bankaccount->withdraw(5);
            say $bankaccount->balance; # 5

DESCRIPTION
    Finance::Bookkeeping::Account is a parameterized role to create accounts
    that debit and credit correctly depending on account type. Input can
    only be positive numbers or you will get an error message stating the
    input either does not look like a number or is not a positive number.

  API
    debit
        nb = debit, this increases the balance. nb = credit, this decreases
        the balance.

    credit
        nb = credit, this increases the balance. nb = debit, this decreases
        the balance.

AUTHOR
    Jesse Shy <jshy@cpan.org>

COPYRIGHT
    Copyright 2013- Jesse Shy

LICENSE
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

SEE ALSO