Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > by-pkgid > a4ae6f02cbc4651e00fc09abe4dd2e2e > files > 10

emma-0.8-4mdk.i586.rpm

Emma 0.2
Lukasz Anforowicz 1999

Thank you for your interest in Emma, a money management program for X
using the GTK+ and GNOME libraries. 

This version isn't a finished program, but it already contains many
nice features:
	* hierarchical accounts
	* double-entry accounting
	* scheduled transactions
	* sorting of transactions
	* the ability to calculate only wanted transactions -
	  possible through a python interface
	* special dialog to edit python expressions
	* can edit multiple transactions at once
	* graphical charts
	* can select multiple transactions by python expression

Although it is a stable release there are probably some bugs in it.
If you find one please mail me at <lanfor@atr.bydgoszcz.pl>


INSTALLATION
============

See INSTALL file.


USAGE
=====

Emma data files are flat, ASCII files. Your ledger accounts and
transactions can be converted to the emma format using the usual
Unix text processing tools.


LEDGER ACCOUNTS
===============

When you create a new data file you are asked whether or not to
automatically add a standard chart of ledger accounts to your
newly created file.  These accounts classify your income,
expenses and assets.  If you are not satisfied with the
standard 58 accounts, you can change them later or make your
own - read on for instructions.

Each data file contains its chart of ledger accounts in its header. 
The first line of the file is an integer which is the number of
lines in the header and also the number of ledger accounts
currently defined.  The remainder of the header consists of five
columns separated by blanks. The last column (ledger account names)
can contain blanks within the account names without the usual
quoting, parenthesizing or escaping.

Each ledger account entry has five columns:

  acct_no parent_no reversed_flag unlimited_flag acct_name

Coincidentally the account number is also the line number in the
heading (if you count the first (integer-only) line as the 0th
line). The parent number is the account number of the parent
account or 0 in the case of the top level accounts, such as
Assets, Expenses, or Income. 

The flags have values of 0 (for off) or 1 (for on).  The
reversed flag is used to negate the result of calculations
in an account. You normally want this when dealing with
incomes and expenses - you transfer money _from_ incomes
and _into_ expenses, but you probably want income to be
positive and expenses to be negative - you do that with the
reversed flag. If it is not very clear, you don't have to
worry - accounts created automatically by a File/New command
are set up for you, so you probably won't need to change
anything. The unlimited flag usually deals with assets. When 
you set this flag, all transactions influence the account.
An example will be better for this. Let's say you want to
check your income in July. You do this by typing
'month(emma.date()) == 7' (see section LIMITS). But you
probably don't want this to include your cash account - 
that's where unlimited flag comes in.  With the unlimited
flag set to off you would see the _change_ in the amount
of the cash account.

The account name must be unique - it is used whenever you 
refer to the account. 

When converting existing ledger account and transaction 
data to emma0.7-3 format, there are two things to note.
If all five ledger account columns exceed 40 characters
in length, a segfault/core dump will result on loading. 
If you attempt to load in a chart of ledger accounts
header with no transactions, a segfault/core dump will
result unless the last line of the data file contains
a single zero. An automatically created new data file
contains two lines with lone zeroes on them.

Most accounts have a parent - that's an easy way to split parent 
accounts into smaller ones (i.e. you may want to keep track of
all your bills in one big account, but you would probably prefer
to create subaccounts named 'Telephone bills' 'Gas bills' and so on
to easily differntiate among them. If you want to split an account
into subaccounts there is a easy way to do it. Just create proper
subaccounts and then select the transactions you want to move into 
one of the subaccounts. (You can select them using ``Select
Transactions..'' dialog.) Then change their from/to account to the
newly created subaccount.  Do this for all the subaccounts you have
just created.

You can click your third (right) mouse button on an account. Doing that
in the amount column will pop-up a new transaction with a from_account
field set to the account you clicked on. Clicking in any other column
allows you to edit the account. 

Also note that during account entries (for example while editing 
the account field of a transaction) you can press PgDn to perform an
account completion. It will use an entry that matches prefix from the
new entry.


TRANSACTIONS
============

Basically every transaction records a money transfer between accounts.
So when you earn money you may want to put in a transaction like this
"amount=100.00 from=Salary to=Cash date=07/01/99 desc=Monthly pay".
(That's only a example - I don't really earn $100 a month ;-)

Every transaction has the following fields:

     amount from_account to_account date description

I think the names are self-explanatory.

When working with transactions, you can select more than one of 
them and then edit all the transactions you selected at once.
When you enter an 'Edit transaction...' dialog while you
have multiple transactions selected, you will notice that
some of the fields in the dialog contain ``<don't change>''
text. That happens when the transactions selected doesn't have
the same data in that field. You may want to set this data field
to something else to change it in all transactions selected
or leave as it is to leave this field unchanged. If ``<don't
change>'' didn't came up, that means that all transactions
selected have the same data in that field.

You can sort transactions by clicking on the appropriate column
header. When you click the column header for the second time
the sorting order changes from descending to ascending.

You can click the third (right) mouse button in a transactions
registry to pop-up a menu with edit/delete commands.

If you want to get some info about selected transactions, go to 
the transactions menu and click ``Transactions info''. I find it
easier to select transactions I want to get info about than to
make a graphical chart for that purpose.

There is a Ctrl-N shortcut for a 'New transaction...' command.

You can setup the transactions view, so some of the transactions
will have different background. Just select appriopriate option
from menu transaction->highlightmode. The first two modes are
"none" and "striped", which I think needs no further explanation.
The third mode is "by sort order". An example will be suitable here.
If you sort by date and highlighting is by sort order, than
transactions happening on the same day will have the same color.
Try it and see if you like it.


LIMITS
======

Well, it's the main feature of the program. Using limits
you may limit transactions shown and influence accounts.
Thanks to limits you can easily analyse your income
in, let's say, last month or in every December or transactions
associated with a subaccount of another account (i.e. account
``Bills'').

Limits are implemented using a scripting language - python.
Emma defines six functions to use with limits. These are
emma.amount() - returns the amount of money transfered with
		transaction being calculated

emma.acc_from() - returns the name of the account from which
		you transfered the money

emma.acc_to() - returns the name of the account into which
		you transfered the money

emma.date() - returns the date of the transaction in seconds
	        since epoch (typically Jan 1, 1970)
emma.day()
emma.month() - these return day/month/year of the date field
emma.year()    in the transaction

emma.desc() - returns the description text

emma.parents(account) - returns a list of names of parent accounts
		of the account specified by the name of this
		account itself

Additionally there is emma.date_val(date_str) which
returns seconds since epoch for date specified by a date_str.
I added that one because of i18n support I compiled in it,
which is missing in the python module ``time''.

And there is another one - emma.register_func(name,desc) which
you would usually put in your python file after declaring some
new fancy emma functions. It makes sure your function appears
in the limit dialog. Its arguments are self-explanatory.

You can parse any python source file with -p command line argument.
This can be used to define frequently used expressions as functions.

You can import any of the python modules using -i command line argument
and then use them as usual. You can, for example, import string module.

You can edit limits by the limit dialog. You can enter expression directly
into entry field or you can use the notebook tabs and set up expression
by just clicking.  Notebook deals at the moment with acc_from(),
acc_to() and date().

Ok. Now you know how to operate on limits, but what are they for? Well,
when you set global limit to non-empty expression, then only
transactions matching this expression will be shown and only those
transactions will affect accounts (with exception of unlimited
accounts). You can also use limits if you want to make your graphical
charts a little bit more complex - for example you can make two charts
- one with expenses in first half of a month and second with
expenses in the rest of a month. You can also select transactions
using a python expression.

Some examples:
emma.amount >= 100 - only transactions with amount field not less than 100

emma.month() == 1 - only transactions recorded in January (EVERY January
that is) 

'Bills' in emma.parents(emma.acc_to()) - only transactions transfering
                money to bills or any of its subaccounts

string.find(emma.desc(), 'book') <> (-1) - only transactions containing
                ``book'' in their description (this uses string module
                which you have to import first using -i command line
                argument)


SCHEDULE
========

Thanks to Sean there is a thing called scheduled transaction. for those
transactions that happen every month or week or so. Now, instead of
putting them in yourself every time, you can put in a scheduled
transaction once. Emma will insert them every month or week or whatever
frequency you choose.

Scheduled transactions look the same as normal transactions, but they
have a slightly modified meaning of the date field and have additional data -
frequency and prompt. The meaning of frequency is obvious - it tells how
often the transaction happens. The prompt tells emma whether to ask
(whenever the transaction is actually inserted) if you want to change
something or even cancel the transaction.


CHARTS
======

Graphical charts help you analyse your accounts. To use charts you have
to setup the chart data first. There are three tabs in the setup chart
dialog. First is ``Chart type'' which is there for future enhancement only -
you can only choose bar chart. The second tab is named ``Accounts''. Here
you enter which accounts to include in the chart - the purpose of buttons
in this tab is obvious. The last tab is ``Groups''. It let you make more
than one chart actually. You may view your expenses in first half of the
year and in the second one. All you have to do is to set up groups - only
transactions that match the python expression of the group are taken into
account when evaluating account's amounts.

How the program draws the charts is subject to change - there is a
project called ``Guppi'' which aims to develop an embedable charts viewer.
 

PREFERENCES
===========

You can setup your own preferences through a preferences dialog, available
in file menu.  At the moment you can set a file to open at startup with a
default limit and depth to which accounts are expanded when a file is open.
Note that specifying a file to open on the command line will override
preference settings.

Additionaly emma now remembers the size of columns in the accounts tree,
transactions registry and schedule list as well as the sorting order. 


TIPS & TRICKS
=============

- if you miss a reconcilation feature you can create a subaccount of your
  checking account, name it ``reconciled'' and there it is - you can
  reconcile your emma data with what the bank thinks it schould be
  (just move reconciled transactions one level deeper - to the
  subaccount you have created)

- I have included a sample emma.py in this distribution. It is in your
  /usr/share (better place than before) directory. It should be parsed
  automatically at startup. If it isn't (my fault :-( , than copy it
  to ~/.emma.py, and it will be parsed at startup for sure.
  It contains many functions I find useful.  Take a look at that file -
  I think everything is self-explanatory. And one more thing - 
  functions from this file will register themselves so they appear 
  in the limit dialog in the functions tab.

- Note that specyfing '-' (single dash) as a file to open results
  in reading from standard input. 
  

THE END
=======

Thank you for your interest in Emma, I hope you enjoy using it.
---
Lukasz Anforowicz
mailto:lanfor@atr.bydgoszcz.pl