Skip to main content
The Chart of Accounts (CoA) is the master list of every account your business uses to record money — cash, bank, receivables, payables, sales, expenses, equity, and so on. Every transaction in Hitaji 360 posts into one or more of these accounts, and your financial statements are built directly from their balances. This page explains how to set up, organise, and safely maintain the chart. You’ll find this at: /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.
You can view the chart two ways using the Tree / Flat toggle at the top right:
  • 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.
A child account must share the same root type as its parent — you cannot file an expense account under an asset group, for example.

Setting up the chart for a new business

A brand-new business starts with no accounts. You have two ways to populate the chart. 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.
A subset of system accounts are flagged as business defaults — the control accounts every business must keep wired up, such as Accounts Receivable, Accounts Payable, Cash, Bank, Retained Earnings, Owner’s Equity, the tax/PAYE/NSSF/LST payables, Salary Payable, Inventory, and the cost-of-goods and sales-revenue accounts. Business-default accounts cannot be disabled — turning one off would break invoice, bill, payroll, or tax posting.

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:
  1. any stored overrides you’ve set,
  2. the seeded system accounts, and
  3. a heuristic over your postable accounts (important if you run a fully custom chart with no system-tagged accounts).
If it cannot confidently resolve a usable cash/bank account or a receivable account, it raises a 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.
Enabling reverses it.

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.
The whole rewrite happens in a single transaction, so a merge either completes fully or not at all.

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.
Every structural change (create, edit, reparent, freeze, disable, merge, delete, opening balance) is written to the accounting audit trail, so there is always a record of who changed what and when.

Setting a one-click opening balance

If you just need to seed a single account’s starting balance (rather than a full migration batch), use Set opening balance from the account’s overflow menu. You enter an amount, a side (debit/credit), and an effective date; Hitaji 360 posts a balanced journal entry against your Retained Earnings (or Owner’s Equity) account and posts it immediately. Group accounts and income/expense accounts cannot take opening balances this way. For a complete cutover — cash, bank, and outstanding customer invoices and vendor bills as a balanced batch — use the dedicated Opening Balances flow instead.