Money
Double entry
A chart of accounts, journals that cannot be edited, and a trial balance that cannot fail to balance — posted from the documents rather than typed.
Everything else in this module answers what was invoiced, what was paid, and what the bank says. This answers what that adds up to. It is a real set of double-entry books: a chart of accounts you control, journal entries that balance, and a trial balance per entity per month.
The ledger is DERIVED, not typed
An invoice issued posts itself. A payment posts itself. A bank charge posts when somebody explains it. Manual entries exist for an accountant's own adjustments — an accrual, a depreciation charge, an opening balance — and are the exception. A product where every posting is keyed by hand has a ledger disagreeing with its own documents inside a month, and then nobody trusts either.
Switching it on
The ledger is off until you set up a chart, and that is a state rather than a fault — refusing to issue an invoice because nobody configured accounts would make invoicing unusable to anybody who does not want books. While it is off, nothing posts and the Ledger screen says which accounts are missing, one by one.
Turning it on creates a small starting chart you then edit, and posts everything already issued in one go. An organisation that invoiced for three months before switching this on needs those three months in the books; being asked to re-issue every document would be absurd. Anything that could not be posted is named with the reason.
The chart is yours
The starting chart is deliberately small — the accounts the product itself posts to, plus the handful any business has. A hundred-line default is one nobody reads and everybody prunes, and the ones nobody pruned sit in every report for ever. Codes can be 4000, 4000.1 or VAT-OUT; your numbering is not ours to have an opinion about.
One chart, balances per entity
The chart belongs to the organisation and every journal line carries its entity, so "what the UAE entity owed in August" and "what the group owed" are the same query with one clause more. A chart per entity would mean the same account existing five times under five codes, with consolidation impossible.
A handful of accounts have a role — which one is the debtors control, which holds the tax charged on sales, where an exchange gain goes. The role sits on the account itself rather than in a separate mapping screen, because a mapping screen is a second place the answer lives and the two disagree the first time somebody deletes a row.
What each document posts
| When | Debit | Credit |
|---|---|---|
| An invoice is issued | What the customer owes | The income, and the tax you now owe |
| A bill is issued | The expense, and the tax you can reclaim | What you owe the supplier |
| A customer pays | The bank | What the customer owed |
| You pay a supplier | What you owed them | The bank |
| A bank charge is explained | The expense you chose | The bank |
A credit note is the exact opposite of the document it credits, account for account, so crediting an invoice in full brings the debtor back to nil and leaves no residue.
A reverse-charged bill is self-accounted, on both tax accounts
The supplier charged nothing, so there is no tax on the document — but you owe the output tax and reclaim the input tax in the same breath. Both halves are posted, they cancel on the profit and loss, and both appear on the return, which is exactly what the return asks for. On a sale under reverse charge the customer accounts for it and nothing is posted here.
A payment converts its two sides at different rates on purpose — the bank at the rate the money actually moved, the receivable at the rate the invoice was issued. The difference is a real gain or loss and is posted as one. Using a single rate for both would make the entry balance by hiding the very figure it exists to report.
A payment that names no bank account posts the money side to suspense rather than to a guessed one. A suspense balance is a question somebody can see and answer; a receipt posted to whichever bank account happened to be first is a reconciliation that never comes out.
What cannot happen
These are constraints in the database, not checks in the code
A ledger whose entries only balance because every writer remembered to make them balance is not a ledger. Debits equalling credits, an entry having at least two lines, a line carrying one side and never a negative, and nothing posting into a closed month are all enforced by the database — so they hold against an import, a sync, a hand-written fix and a path nobody has written yet.
- Nothing is ever edited
- A posting that was wrong is reversed and posted again, the same rule the leave ledger follows: what was reported has to stay recoverable. There is no way to delete a journal entry anywhere in this product.
- An entry cannot be emptied
- Only removed whole. Taking the lines off one and leaving it standing is refused.
- Voiding and detaching reverse
- Voiding an invoice reverses its posting; detaching a bank match reverses the payment's and then deletes the payment. The payment row can go because it was never sent to anybody; the ledger entry cannot, because it was reported.
Closing a month
Closing is what makes a filed figure stay filed. Once a month is closed nothing can post into it by any route, and a correction is posted in an open month instead — the same way retrospective change is handled everywhere else in this product.
Reopening is possible and audited. A month that could never be reopened makes a genuine error found in week three unfixable, and the workaround is always an adjustment nobody can trace back to what it corrects. What matters is that reopening is a decision somebody made and can be seen to have made.
Reading it
- The trial balance
- One entity, one month, with an opening column. A trial balance showing only the period's movement is not one — a debtors figure that starts at nil every month reconciles against nothing.
- An account's own page
- Its transactions oldest first with a running balance, which is the only order a running balance can be read in. This is the screen you open when the trial balance says something you do not believe.
- The journal
- Every entry with its lines, newest first, marking reversals and reversed entries as what they are.
What the ledger is asked afterwards
- A profit and loss, and a balance sheet
- Statements and the year end — both computed on every read from the lines that already exist, so neither can drift from the books it describes.
- Writing something down over its life
- Fixed assets and depreciation, each monthly charge posting a real entry through these same constraints.
- Several entities as one set of figures
- The group, and what you planned, including translating an entity that keeps its books in another currency — and budgets, which post nothing.
- Your accountant’s own package
- Their books take the documents issued here and give back the payments they recorded. The chart, the tax rates and this ledger deliberately do not cross.