Hi, I have read the manual and have some questions about ledger
features:
1 Periods. In the accounting system I am used to, there is a concept
called a period. A period is typically a number 1..13 which is the
month of the actual day of the transaction. Period 13 is reserved for
end-of-year transactions. When you create reports, you do it based on
periods. Now, having a period called 13 means that reports for
december or january are not skewed based on special transactions such
as setting up an initial balance or end-of-year transactions happening
on the 31th of december.
Without periods, it seems that you would want to avoid having "real"
transactions happening on 1/1 and 31/12.
2 Closing periods. When doing any sort of "external" reporting such
as returning a VAT report or even a end-of-year report, it is
important that it is impossible to add transactions to the affected
accounts at a later day. Alternatively, adding a transaction that
changes the VAT report for example should give a warning that the VAT
report will have to be re-issued.
Now, what I am used to is that one can close periods in the accounting
system. If one needs to change stuff in closed periods, one will use
an open period instead. I think this can be done in ledger by using
an effective date, but I can not find a way of "closing the books" in
ledger.
I think a very flexible way of closing the books would be to be able
to specify any report as an assertion. Thus if some external
reporting is recorded as a pair (ledger command, textual output), then
for the accounts to be in sync with my external filings, I could check
that all such pairs match. Has anyone given thought to such a system?
3. Chart of accounts and taxes. I am used to being able to specify
taxes in a chart of accounts. For example, if I have something like:
2009/02/25 Pens and paper
Expenses:OfficeSupplies $50.00
Assets:Bank:Bank123
what I really want to happen is this:
2009/02/25 Pens and paper
Expenses:Office Supplies $40.00
Assets:VAT Receivable $10.00
Assets:Bank:Bank123
for a product sold:
2009/02/25 Sold a xyyz to foobar
Assets:AR:Foobar $500
Revenue:XYYZ
what I want to happen is this:
2009/02/25 Sold a xyyz to foobar
Assets:AR:Foobar $500
Revenue:XYYZ -$400
Liabilities:VAT Payable -$100
I am hoping that it is possible to fix this using automatic
transactions. Something like:
; List all 25% VAT expense accounts
= /^Expenses:(OfficeSupplies|Rent|...)/
Assets:VAT Receivable 0.25
$account -0.25
; List all 25% VAT revenue accounts
= /^Revenue:(Product1|Consulting|XYYZ...)/
Liabilities:VAT Payable 0.25
$account -0.25
Does something like the above work?
A way to set up a chart of accounts with meta-data and setting up
automatic transactions based on meta-data matches seems cleaner as the
regexps above can become very complex unless tax codes are encoded
into the name of the account. Does this make sense?
2 Year end report/Chart of account aliases. I like the free-form
account names in ledger. However, when interfacing with year end
reports, I need to stick to the revenue service "chart of accounts".
Being able to move the whole balance of a set of accounts to another
set of accounts in a sort of report fashion seems like it would work.
Maybe someone has a better method, but it seems like I would have to
do:
2009/12/31 IRS year end report
IRS:1001 (account_total("Assets:..."))
Assets:... -(account_total("Assets:..."))
...
IRS:7020 (account_total("/^Expenses:.*Interest/"))
Expenses:7020 -(account_total("/^Expenses:.*Interest/"))
; The above account need to be created because I do not know how to
zero out the
; individual accounts matching the regexp. The Expenses:* top
level account should
; have a zero balance though.
...
IRS:Report
The above works, but another approach would be to have a view of the
chart of accounts where names of accounts could be renamed. Maybe
there is a better way though.
Thanks,
Alexander