财务

Chart of accounts

Create, classify, arrange and retire the accounts every journal entry posts against — plus importing and exporting the whole chart as a spreadsheet.

最后更新

Who this is for: Accountant — editing requires backoffice.coa.manage. Manager, Owner and Read-only can view the chart (backoffice.ledger.read) but not change it. Where: Accounting → Bank Accounts → Chart of accounts tab

Accounting overview covers the sixteen system accounts every organisation starts with. This page is where an accountant goes beyond them: adding a code the house actually needs, saying what kind of thing it is for the financial statements, arranging it under a parent, and retiring one that has outlived its purpose.

The screen sits on a second tab next to Settlement bank accounts — Finance data lives together rather than under Settings.

Create an account#

Select New account and fill in four fields:

Field What it is
Code The posting key — what a journal line, a charge code's GL mapping, or an import row names. Fixed once created.
Name The display name everywhere the account appears: the trial balance, the journal, this screen.
Type One of the five statement classes — asset, liability, equity, revenue, expense. Fixed once created: it is what the trial balance's debit/credit sign logic keys on, and changing it under a live ledger would recolour every past entry's normal balance.
Financial-statement type The finer classification below — required on every account.

Optionally, pick a Parent account to nest the new one under an existing one straight away.

A code an org has already used is refused; the system accounts' codes (10005200, see the overview) are reserved from day one.

Financial-statement types#

Every account carries a financial-statement type — current_asset, operating_revenue, cost_of_goods_sold, and the rest of a hotel statement's usual sub-classes — on top of its plain asset/liability/equity/revenue/expense Type. Where Type decides an account's normal balance in the trial balance, the financial-statement type is what a future balance sheet or P&L would group it under, so a report never has to guess a classification by squinting at an account-number range.

The list itself is a reference list like any other in the product: Settings → Reference Data → Financial-statement account types is where the built-in set lives, and where a house can rename an entry or add one of its own, the same as it would for a guest title or a cancellation reason.

注意

Reporting that reads this field — a grouped balance sheet or P&L — has not shipped yet. Assigning the type now means the day it does, every account in the chart is already classified.

Rename, reclassify and reparent#

Select the pencil icon on any account to open the edit dialog. Three things can change after creation:

  • Name — corrects a typo, or the house simply wants to call it something else.
  • Financial-statement type — reclassifies the account without touching its code or its journal history.
  • Parent account — moves it to a different place in the hierarchy, or back to the top level by clearing the field.

A reparent that would nest an account under its own descendant is refused outright — the tree cannot be made to loop back on itself.

Code and Type are not on this dialog. They are the two facts every past journal line and every charge code's GL mapping already point at by value; changing either after the fact would silently recolour history instead of correcting it.

Arrange the chart into a hierarchy#

Every account can nest under one parent, one level or several deep — a 4200 Spa Revenue account under a 4000 Room & Other Revenue group, say. The screen renders the whole chart as an indented tree from that parent/child structure.

Use the up and down arrows on a row to move it earlier or later among its own siblings. Reordering is scoped to whatever level the account sits at — moving a child up or down never crosses into its parent's siblings.

Deactivate, don't delete — usually#

Select Deactivate to switch an account off. It disappears from new dropdowns — coding a charge, picking a GL mapping — but every historic journal line against it keeps resolving exactly as before. Activate brings it back.

The trash icon deletes an account outright, and is refused in two cases:

  • It is one of the system accounts the posting rules key on by code.
  • A journal line already references it. The ledger's history must never point at a vanished account, so the delete is refused with a message pointing at deactivation instead.

A brand-new account nobody has posted to yet is the only thing this screen actually deletes; everything else that has seen real use is deactivated.

Import and export#

Export (CSV) downloads the whole chart — every account's code, name, type, financial-statement type, parent (by code) and active flag — in one file. A cell that would otherwise be read as a spreadsheet formula (a name starting =, +, - or @) is written with a leading apostrophe, the same formula-injection guard the trial balance's own CSV export uses.

Import via workbook does not open a separate uploader on this screen. It reuses the property's existing onboarding importer: fill in just the Chart of Accounts sheet of the standard workbook — Account Code, Name, Type, and the optional FS Type and Parent Code columns — and upload it from Import & Data Migration. Every other sheet in that workbook is optional, so a chart-only file uploads cleanly on its own.

An existing custom code updates in place (name, type and financial-statement type all refresh from the row); a new code is created; the system accounts are never touched by an import, the same protection the screen's own delete/rename dialogs give them. Bad rows are never silently dropped — each one reports its own issue, cell-addressed, exactly like every other sheet in that importer, and the good rows still land.

What's next#