/accounting/accounts
📷 Screenshot: The Chart of Accounts page showing the tree of accounts with balances on the right — to be added.
Getting there
From the app menu, open the Finance category and click Chart of Accounts, or go straight to/accounting/accounts. Viewing requires the accounting-accounts:read permission. Make sure the correct business is selected in the business switcher first — each business has its own chart.
The page header shows two status pills:
- Initialized / Not initialized — whether this business’s chart has been set up yet.
- CoA v2 — the chart-of-accounts engine version.
- Tree — accounts shown in their parent/child hierarchy, with group totals rolled up.
- Flat — a simple table of Code, Name, Type, and Balance.
Account types and the tree
Every account has a root type, which is one of the five accounting classes:
The normal side (debit or credit) is the side on which the account’s balance naturally sits. The system sets this automatically from the root type (asset/expense = debit; liability/equity/income = credit), with the one special case of Accumulated Depreciation, which is an asset account that carries a credit balance.
Accounts are arranged in a tree. There are two kinds of node:
- Group accounts — headers used purely for organisation and sub-totals (e.g. “Current Assets”, “Operating Expenses”). You cannot post transactions directly to a group; it only rolls up the totals of its children.
- Posting (leaf) accounts — the real accounts you book transactions to (e.g. “Cash”, “Sales Revenue”). These allow direct posting.
Setting up the chart for a new business
A brand-new business starts with no accounts. You have two ways to populate the chart.Option A — Bootstrap the built-in template (recommended for most)
Click Bootstrap chart in the page header. This installs Hitaji 360’s standard enterprise template — a complete, ready-to-use chart with grouped assets, liabilities, equity, income, and expenses, including all the control accounts the rest of the system needs (receivables, payables, tax payables, salary payable, retained earnings, and more). Key points about bootstrap:- It only runs on an empty, uninitialised chart. If accounts already exist but there is no setup record, bootstrap is refused and you are asked to repair the setup first (contact your administrator).
- Once done, the status pill flips to Initialized and records which template version was applied.
- Re-clicking Bootstrap chart on an already-initialised book is safe — it simply returns the existing status rather than duplicating accounts.
Option B — Import your own chart
If you already have a chart of accounts (from another system, an accountant’s spreadsheet, or a country-specific template), use the Chart Import wizard at/accounting/accounts/import. It lets you paste/upload a CSV or pick a template, map columns, preview the hierarchy, and execute the import. See Chart Import for the full walkthrough.
📷 Screenshot: The “No chart of accounts yet” empty state with the Bootstrap option — to be added.
Creating and editing accounts
Add an account
Click Add account in the header (or use the “New Account” quick action, which opens the page with the create dialog). In the dialog you provide:
When you don’t choose a normal side, the system fills it in from the root type automatically.
Edit an account
Open an account’s overflow menu (the ⋯ button on its row) and choose Rename, or select it and edit its details. You can change the name, description, and structural fields — within these guardrails:- You cannot change the parent or root type of a system account.
- An account that has child accounts must remain a group account.
- An account cannot become its own parent, and cannot be moved beneath one of its own descendants.
Reparent (move) an account
Drag a node in the tree to a new parent, or use Reparent from the overflow menu. The new parent must be a group of the same root type, and you cannot create a cycle (move an account under its own child). When you reparent a group, all of its descendants’ paths are rebuilt automatically.📷 Screenshot: The account row overflow menu showing Open ledger, Rename, Reparent, Merge, Freeze, Disable, Set opening balance, Delete — to be added.
System vs. custom accounts
- System accounts are the ones installed by the template (or marked as system). They are protected because the rest of Hitaji 360 — invoices, bills, payroll, tax — relies on them being present to know where to post. You cannot delete them or change their parent/root type.
- Custom accounts are the ones you add yourself. You have full freedom to rename, move, deactivate, or (if unused) delete them.
Account defaults
Some quick actions (the Record a debt / money lent wizard and the receipt modal) need to know which accounts to pre-fill — for example which cash/bank account money is deposited to, and which receivable account a debt is booked against. Hitaji 360 resolves these automatically per book, combining:- any stored overrides you’ve set,
- the seeded system accounts, and
- a heuristic over your postable accounts (important if you run a fully custom chart with no system-tagged accounts).
needsSetup signal, and the UI prompts you to set your defaults once. You can review and set these on the Receivables Defaults settings (route /accounting/account-defaults powers the resolver behind that UI). Setting good defaults means the debt and receipt shortcuts “just work” without you re-picking accounts every time.
Account housekeeping: freeze, disable, merge, delete
These actions live on each account’s overflow menu. They exist so your chart stays clean and accurate over time without ever corrupting your ledger history.Freeze / unfreeze
Freezing an account blocks new postings to it (existing history is untouched). Because this is a control action, freezing requires the “Frozen accounts override” role. Use it to lock down an account you’re investigating or migrating. Unfreezing restores normal posting.Disable / enable
Disabling (deactivating) hides an account from pickers so nobody books new transactions to it, while keeping its history intact. Guardrails:- You cannot disable a business-default control account.
- You cannot disable an account that still has unreconciled GL entries in an open period — settle or close the period first.
Merge
Merging folds a source account into a target account: all of the source’s ledger rows and journal lines are rewritten to point at the target, and the source is retired (marked merged and inactive). This is the safe way to consolidate duplicate accounts. Rules enforced:- Both accounts must be in the same business, share the same root type and account type, and both be leaf (non-group) accounts.
- System accounts cannot be merged.
- You cannot merge an account that has history in a closed or locked period.
- If the source has any GL history, the merge requires the “Merge with GL” override role and an explicit confirmation, because it rewrites real postings.
Delete
Deleting is a soft delete (the account is hidden, not physically removed). It is only allowed for accounts that are genuinely unused. You cannot delete:- a system account or protected control account,
- an account that still has child accounts, or
- an account that has any posted transactions — deactivate it instead.
Account invariants — what you can’t do, and why
Hitaji 360 deliberately refuses certain edits to protect the integrity of your books. If you hit one of these messages, it is by design:- “Cannot change parent/root type of system accounts” — system accounts are wired into posting logic.
- “Cannot disable a business-default account” — required control accounts must always be live.
- “Child account root type must match parent root type” — the tree must stay internally consistent.
- “Cannot delete account with posted transactions. Deactivate it instead.” — ledger history is never silently destroyed.
- “Merge requires same root type / same account type / leaf accounts only” — merges must not change an account’s accounting meaning.
- “Cannot merge an account with history in closed or locked periods” — closed periods are immutable.