sa

package
v0.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2022 License: BSD-3-Clause Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const NOMINAL_REGEX = "^[0-9]{1,10}$"

Variables

View Source
var (
	ErrNoChartId             = errors.New("chart id not set")
	ErrBadAccountType        = errors.New("chart contains unknown account type")
	ErrNoChartName           = errors.New("cannot retrieve chart name")
	ErrNoJrnId               = errors.New("no journal id returned")
	ErrBalanceType           = errors.New("cannot determine account type to set balance")
	ErrDummyAccount          = errors.New("no operations available on dummy account type")
	ErrBadXmlParse           = errors.New("error parsing chart definition xml")
	ErrBadNominal            = errors.New("provided value for Nominal does not match pattern: " + NOMINAL_REGEX)
	ErrEntryNotFound         = errors.New("entry not found")
	ErrUnbalancedTransaction = errors.New("transaction is not balanced")
)

Functions

func GetNamedAccountTypes

func GetNamedAccountTypes() map[string]*AccountType

func GetValuedAccountTypes

func GetValuedAccountTypes() map[AccountType]string

Types

type Account

type Account struct {
	// contains filtered or unexported fields
}

Account is an account in a Chart

func NewAccount

func NewAccount(nominal Nominal, tpe *AccountType, name string, acDr, acCr int64, chartId uint64) *Account

NewAccount Account constructor

func (*Account) Balance

func (a *Account) Balance() (int64, error)

Balance retrieves account balance

func (*Account) ChartId added in v0.0.6

func (a *Account) ChartId() uint64

func (*Account) Cr

func (a *Account) Cr() int64

Cr retrieve account credit amount

func (*Account) Dr

func (a *Account) Dr() int64

Dr retrieve account debit amount

func (*Account) Name

func (a *Account) Name() string

Name retrieve account name

func (*Account) Nominal

func (a *Account) Nominal() Nominal

Nominal retrieve account nominal code (id)

func (*Account) Type

func (a *Account) Type() *AccountType

Type retrieve account type

type AccountType

type AccountType uint16

func NewAcType

func NewAcType() *AccountType

NewAcType returns an AccountType for further operations

func (*AccountType) Asset

func (a *AccountType) Asset() *AccountType

Asset returns an asset AccountType

func (*AccountType) Balance

func (a *AccountType) Balance(drVal, crVal int64) (int64, error)

Balance returns the balance of two values dependent on the account type

func (*AccountType) Bank

func (a *AccountType) Bank() *AccountType

Bank returns a bank AccountType

func (*AccountType) Cr

func (a *AccountType) Cr() *AccountType

Cr returns a cr AccountType

func (*AccountType) CrTitle

func (a *AccountType) CrTitle() (string, error)

CrTitle returns the Credit title for the account type

func (*AccountType) Customer

func (a *AccountType) Customer() *AccountType

Customer returns a customer AccountType

func (*AccountType) Dr

func (a *AccountType) Dr() *AccountType

Dr returns a dr AccountType

func (*AccountType) DrTitle

func (a *AccountType) DrTitle() (string, error)

DrTitle returns the Debit title for the account type

func (*AccountType) Equity

func (a *AccountType) Equity() *AccountType

Equity returns an equity AccountType

func (*AccountType) Expense

func (a *AccountType) Expense() *AccountType

Expense returns an expense AccountType

func (*AccountType) Income

func (a *AccountType) Income() *AccountType

Income returns an income AccountType

func (*AccountType) Liability

func (a *AccountType) Liability() *AccountType

Liability returns a liability AccountType

func (*AccountType) Real

func (a *AccountType) Real() *AccountType

Real returns a real AccountType

func (*AccountType) Supplier

func (a *AccountType) Supplier() *AccountType

Supplier returns a supplier AccountType

func (*AccountType) Titles

func (a *AccountType) Titles() (string, string, error)

Titles returns the Debit and Credit titles for the AccountType

type Accountant

type Accountant struct {
	// contains filtered or unexported fields
}

Accountant The main API interface to Simple Accounts

func NewAccountant

func NewAccountant(adapter *sql.DB, chartId uint64, crcy string) *Accountant

NewAccountant returns a new Accountant

func (*Accountant) AddAccount

func (a *Accountant) AddAccount(nominal Nominal, tpe *AccountType, name string, prnt *Nominal) error

AddAccount adds an account (ledger) to the chart. Error returned if parent doesn't exist, or you try to add a second root account

func (*Accountant) CreateChart

func (a *Accountant) CreateChart(chartName, crcy string, def *ChartDefinition) (uint64, error)

CreateChart creates a new chart of accounts from a COA definition file

func (*Accountant) DelAccount

func (a *Accountant) DelAccount(nominal Nominal) error

DelAccount deletes an account (ledger) and all its child accounts. Error returned if the account has non zero debit or credit amounts

func (*Accountant) FetchAccountJournals

func (a *Accountant) FetchAccountJournals(nominal Nominal) ([]*SplitTransaction, error)

FetchAccountJournals returns journal entries for an account The returned Set is a Set of SplitTransactions with only the entries for the required Account. They will therefore be unbalanced.

func (*Accountant) FetchChart

func (a *Accountant) FetchChart() (*Chart, error)

FetchChart fetches a chart from storage

func (*Accountant) FetchTransaction

func (a *Accountant) FetchTransaction(jrnId uint64) (*SplitTransaction, error)

FetchTransaction retrieves a journal transaction identified by its journal id

func (*Accountant) NextNominal

func (a *Accountant) NextNominal(prnt, starter Nominal) (*Nominal, error)

NextNominal returns the next nominal in sequence of child accounts of prnt. starter is given and returned if the prnt does not have child accounts

func (*Accountant) WriteTransaction

func (a *Accountant) WriteTransaction(txn *SplitTransaction) (uint64, error)

WriteTransaction writes a transaction with default datetime of Now()

func (*Accountant) WriteTransactionWithDate

func (a *Accountant) WriteTransactionWithDate(txn *SplitTransaction, dt time.Time) (uint64, error)

WriteTransactionWithDate writes a transaction with user supplied datetime

type Chart

type Chart struct {
	// contains filtered or unexported fields
}

Chart is a COA

func NewChart

func NewChart(id uint64, name string, crcy string, chartTree tree.NodeIFace) *Chart

NewChart Constructor. Returns a new COA

func (*Chart) Crcy

func (c *Chart) Crcy() string

Crcy returns the COA currency (3 char crcy code)

func (*Chart) GetAccount

func (c *Chart) GetAccount(nominal Nominal) *Account

GetAccount returns first account matching nominal. Can return nil if not found

func (*Chart) GetAccountByName added in v0.0.3

func (c *Chart) GetAccountByName(name string) *Account

GetAccountByName returns first account matching nominal. Can return nil if not found

func (*Chart) GetParentId

func (c *Chart) GetParentId(nominal Nominal) Nominal

GetParentId returns the parent nominal code for the required account. Returned code can be empty indicating that the account has no parent, and thus is likely to be the root account

func (*Chart) HasAccount

func (c *Chart) HasAccount(nominal Nominal) bool

HasAccount tests if chart contains an account matching nominal code

func (*Chart) Id

func (c *Chart) Id() uint64

Id returns the chart storage id

func (*Chart) Name

func (c *Chart) Name() string

Name returns the COA name

func (*Chart) SetRootNode

func (c *Chart) SetRootNode(root tree.NodeIFace) *Chart

SetRootNode directly sets the COA root node

func (*Chart) Tree

func (c *Chart) Tree() tree.NodeIFace

Tree returns the COA root tree node for direct manipulation

type ChartDefinition

type ChartDefinition struct {
	// contains filtered or unexported fields
}

ChartDefinition is a helper to retrieve chart definition xml

func NewChartDefinition

func NewChartDefinition(xmlFileName string) (*ChartDefinition, error)

NewChartDefinition constructor

func NewChartDefinitionFromString added in v0.0.7

func NewChartDefinitionFromString(def string) *ChartDefinition

NewChartDefinitionFromBytes constructor

func (*ChartDefinition) GetDefinition

func (c *ChartDefinition) GetDefinition() (*xmldom.Document, error)

GetDefinition returns parsed xml as Dom Document

type Entries

type Entries []*Entry

Entries is a set of transaction entries

func (*Entries) CheckBalance

func (e *Entries) CheckBalance() bool

CheckBalance returns true if the set of entries balance else false

func (*Entries) Filter

func (e *Entries) Filter(f FilterFunc) Entries

Filter returns entries with a filter function

type Entry

type Entry struct {
	// contains filtered or unexported fields
}

func NewEntry

func NewEntry(entryId Nominal, amount int64, tpe AccountType) *Entry

NewEntry constructor for Entry

func (*Entry) Amount

func (e *Entry) Amount() int64

Amount returns the Entry Amount

func (*Entry) Id

func (e *Entry) Id() *Nominal

Id returns the Entry Id

func (*Entry) Type

func (e *Entry) Type() *AccountType

Type returns the Entry Type

type FilterFunc

type FilterFunc func(entry *Entry) bool

FilterFunc is a definition for a filter function

type NodeFinder

type NodeFinder struct {
	tree.VisitorIFace
	// contains filtered or unexported fields
}

NodeFinder finds node with required Nominal id

func NewNodeFinder

func NewNodeFinder(nominal Nominal) *NodeFinder

NewNodeFinder constructor

func (*NodeFinder) Visit

func (v *NodeFinder) Visit(n tree.NodeIFace) interface{}

Visit visits each mode and returns a map of account balances

type NodeSaver

type NodeSaver struct {
	tree.VisitorIFace
	// contains filtered or unexported fields
}

NodeSaver saves account ledger definitions to the database

func NewNodeSaver

func NewNodeSaver(db *sql.DB) *NodeSaver

NewNodeSaver constructor

func (*NodeSaver) Visit

func (v *NodeSaver) Visit(n tree.NodeIFace) interface{}

Visit store each tree node in the DB, Returns error or nil

type Nominal

type Nominal string

Nominal is an account nominal code. Use the constructor

func MustNewNominal

func MustNewNominal(n string) Nominal

MustNewNominal constructor. Will Panic if n is not a valid nominal code

func NewNominal

func NewNominal(n string) (Nominal, error)

NewNominal constructor. Checks that code matches validation pattern

func (Nominal) String

func (n Nominal) String() string

String implements Stringify interface

type SimpleTransactionBuilder

type SimpleTransactionBuilder struct {
	// contains filtered or unexported fields
}

SimpleTransactionBuilder a builder for a Simple (2 entry) SplitTransaction

func (*SimpleTransactionBuilder) Build

Build builds and returns a SplitTransaction

func (*SimpleTransactionBuilder) WithDate

WithDate adds a date to the builder

func (*SimpleTransactionBuilder) WithNote

WithNote adds a note to the builder

func (*SimpleTransactionBuilder) WithReference

WithReference adds a reference to the builder

func (*SimpleTransactionBuilder) WithSource

WithSource adds a source to the builder

type SplitTransaction

type SplitTransaction struct {
	// contains filtered or unexported fields
}

SplitTransaction is a basic multi ledger journal entry

func (*SplitTransaction) CheckBalance

func (s *SplitTransaction) CheckBalance() bool

CheckBalance returns true if the transaction entries balance else false

func (*SplitTransaction) Date

func (s *SplitTransaction) Date() time.Time

Date returns the transaction datetime

func (*SplitTransaction) Entries

func (s *SplitTransaction) Entries() Entries

Entries returns the transaction ledger journal entries

func (*SplitTransaction) GetAmount

func (s *SplitTransaction) GetAmount() (int64, error)

func (*SplitTransaction) GetCrAc

func (s *SplitTransaction) GetCrAc() []*Nominal

GetCrAc return credit account ids

func (*SplitTransaction) GetDrAc

func (s *SplitTransaction) GetDrAc() []*Nominal

GetDrAc return debit account ids

func (*SplitTransaction) GetEntry

func (s *SplitTransaction) GetEntry(nominal Nominal) (*Entry, error)

GetEntry returns the entry for the nominal code

func (*SplitTransaction) Id

func (s *SplitTransaction) Id() uint64

Id returns the transaction id

func (*SplitTransaction) IsSimple

func (s *SplitTransaction) IsSimple() bool

IsSimple is this a simple transaction?

func (*SplitTransaction) Note

func (s *SplitTransaction) Note() string

Note returns the transaction note

func (*SplitTransaction) Ref

func (s *SplitTransaction) Ref() uint64

Ref returns the transaction reference id

func (*SplitTransaction) Src

func (s *SplitTransaction) Src() string

Src returns the transaction src reference

type SplitTransactionBuilder

type SplitTransactionBuilder struct {
	// contains filtered or unexported fields
}

SplitTransactionBuilder a build for a Split Transaction

func NewSimpleTransactionBuilder

func NewSimpleTransactionBuilder(id uint64, drAc, crAc Nominal, amount int64) *SplitTransactionBuilder

NewSimpleTransactionBuilder returns a SimpleTransactionBuilder

func NewSplitTransactionBuilder

func NewSplitTransactionBuilder(id uint64) *SplitTransactionBuilder

NewSplitTransactionBuilder returns a SplitTransactionBuilder

func (*SplitTransactionBuilder) Build

Build builds and returns a SplitTransaction

func (*SplitTransactionBuilder) WithDate

WithDate adds a date to the builder

func (*SplitTransactionBuilder) WithEntries

func (b *SplitTransactionBuilder) WithEntries(entries Entries) *SplitTransactionBuilder

WithEntries adds a set of Entry to the builder

func (*SplitTransactionBuilder) WithEntry

WithEntry adds a single Entry to the builder

func (*SplitTransactionBuilder) WithNote

WithNote adds a note to the builder

func (*SplitTransactionBuilder) WithReference

WithReference adds a reference to the builder

func (*SplitTransactionBuilder) WithSource

WithSource adds a source to the builder

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL