Application Kata “Cashbook”
Write an application to manage the cashbook of a small company.
Each months cash transactions will be entered into the cashbook. Cash can be taken out of the cash box (withdrawl), cash can be put into the cash box (deposit).
For each transaction its date, its kind, and the gross amount (including VAT) will be entered.
A month’s ledger will show the current balance, the carry-over from the previous month, and of course all the transactions. Example:
The balance can only be changed by booking a transaction.
When the program is started the current month’s ledger is displayed for data entry. The user can choose a past month, though.
Changes to the current month’s data can simply be entered, but changing a previous month’s balance requires an explicit confirmation when opening the ledger.
Transactions should be stored in an “audit-proof” manner meaning they cannot be changed. Changes to the balance of a month require explicit transactions; in case of errors that’s compensating transactions.
The application does not require a graphical user interface. The main concern is speed and correctness. Whoever has to do the bookkeeping wants to get over with it quickly. It’s no fun activity.
In addition to entering data into a ledger there should be a way to get a read-only overview of monthly transactions which also can be printed (report). Likewise the data needs to be exported to CSV files for further processing with Excel.
The program does not need to be able to handle multiple concurrent users. But the data should be stored in a manner so the cashbook can be administered from several computers.
Users need to login to work with the cashbook. There are different permissions, e.g. entering transactions for the current month, entering transactions in previous months, doing compensating transactions, printing reports, exporting data.
User administration is done centrally, i.e. users cannot register themselves.