Accounts is an open source accountancy web app, on which you can build.
https://django-accounts-1.herokuapp.com/contacts/
- Cash Book ledger
- Nominal ledger
- Purchase ledger
- Sales ledger
- Vat ledger
- Users
- Groups
- Permissions
- Audit
- Transaction locking (transactions can only be posted into the previous, current and next period)
- Financial years consisting of accounting periods
- Trial Balance report
- Aged balance reports
- Dashboard
-
Matching - Purchase and Sales transactions can be matched. This way a user can see which transactions are matched to each other. For example what a payment is paying.
-
Financial years can be adjusted retrospectively. Finalised financial years can also be rolled back.
- While sales transactions can be entered, there are no documents produced (e.g. invoice and credit note templates)
- Customer Statements
- Supplier remittances
- Supplier payment run which generates a bank file
- Discounts
- Purchase ordering.
-
Auditing is provided with the help of the simplehistory package. For performance reasons it saves the model state with every save. A periodic task which cleans up the unnecessary duplicate model states is probably a good idea. The package already provides the command. See https://django-simple-history.readthedocs.io/en/latest/utils.html
-
simplehistory does not provide a means out of the box of auditing many to many relationships so the groups for users are not audited. Financial years are also not audited at the moment but that is simply due to a lack of time.
-
Transactions can be voided. This means the vat, cash book and nominals transactions are deleted but enough is left untouched so that a new function which undoes the void could easily be implemented.
-
Single objects like cash books, nominals, vat codes, users, groups etc cannot be deleted. Either allow the user to delete the object and check all the consequences; or add an "active" flag to the model and use this to hide the object from the standard lists. Should you opt to allow nominals to be deleted make sure the user cannot delete the purchase, sales, vat and suspense control accounts, and the retained earnings account, because these accounts are assumed to always exist in the software.
-
By default the first user who signs up is a superuser but not admin. Subquent users are neither superusers or admin. Non admin users - so that's all users - can't access the admin. Middleware performs this check.
All UI testing has so far been manual and limited to the latest version of Chrome and Firefox, and to a far lesser extent Edge. I'm not supporting IE11 because it's a nightmare. Safari hasn't been tested but should be supported.
- Python 3.8.x
- Django Web Framework
- PostgreSQL
- Docker (local development)
- docker-compose (local development)
- WhiteNoise
- Bootstrap 4
- jQuery 3
- Heroku (production)