Skip to content

Project Chart Of Accounts Design

Ed Mozley edited this page Nov 8, 2026 · 1 revision

πŸ“ Projects: a chart of accounts - design

Status: proposal - nothing built. Asked for by a supporter of the project. Issue: #282. Builds on Cost centres and the Projects budget.


The request, in short

A technology project's costs have to be reported to managers by accounting account, not just in total: 2.0.3.0.4 Software Licences (an operating expense), 2.1.0.3.2 Computer Equipment (a fixed asset), 3.0.1.0.2 Professional Services, 1.3.0.0.1 Employee Payroll for a new hire. One activity can belong to more than one account, and the result should be a breakdown of the project's income and expenses by account.

What FreeITSM has today

Exists What it answers What it cannot do
Cost centres (System β†’ Cost Centres) - per company, codes as text, a hierarchy, import and API sync Who pays - a department or budget holder Say what kind of cost it is
Budget lines on a project - planned, actual, forecast, dates, one contract, one cost centre, a category What is bought The category is a fixed list of six (hardware, software, services, labour, travel, other); no split; no account
Labour - time logged on the project's tasks, priced at dated hourly rates (or shown as hours) What time cost No account; nothing beyond "labour"
- - Income of any kind

Accountants keep two separate dimensions: cost centre (who) and account (what). FreeITSM has the first. This adds the second, alongside it, never replacing it.


The design

1. The chart of accounts - a list per company, like cost centres

System β†’ Chart of Accounts (or, if it is only ever used by Projects, Projects β†’ Settings β†’ Accounts - an open question below). Each account:

Field Notes
Code Text, exactly as written: 2.0.3.0.4, 4000-100, N1414. Leading zeros kept, capitals ignored when matching - the cost-centre rules
Name Software Licences
Kind Expense, Fixed asset, Payroll or Income - chosen from a list, never typed. It decides which section of the breakdown the account lands in
Parent Optional, for the hierarchy (2.0.3.0 β†’ 2.0.3.0.4)
Active Retire, don't delete - an inactive account stays on everything already charged to it

Per company, like cost centres: two companies can both have a 2.0.3.0.4. Import and export by spreadsheet, and POST /accounts/sync for the finance system, all matched on code - the same machinery cost centres use (sync(), includes/spreadsheet.php), so the two behave identically.

2. Budget lines get accounts

A budget line can name one account, or be split across several by amount or percentage - Β£10,000 integration contract: 70% Professional Services, 30% Software Licences. The split always adds up to the whole line; the screen will not save one that doesn't. Planned, actual and forecast are all split the same way.

3. Tasks get accounts - for the time spent on them

A task can name one account, or a percentage split (hours are logged against a task as a whole, so a percentage is the only honest way to split them). The time logged on it - priced exactly as labour is priced today, at the rate in force on the day it was worked - lands in those accounts.

  • Subtasks use their parent task's accounts unless they have their own, so it is set once per piece of work.
  • Configure the new firewall β†’ Computer Equipment (fixed asset): building an asset can be part of its cost, which is why this matters to finance.

4. Nothing is left uncounted - the project's defaults

Each project has a default labour account (normally payroll) and a default account for other spending, chosen on its Budget tab, with install-wide defaults under Projects β†’ Settings β†’ Budget. A budget line or a task with no account of its own counts there. An account not chosen at all shows as Not assigned to an account, so the breakdown always adds up to the project total.

5. Income

Income lines beside budget lines: a title, planned and actual amounts, dates, and an Income account. A project that is charged back to a client, or earns grant funding, shows it.

6. The breakdown - "By account"

A By account view on the project's Budget tab:

Kind Account Planned Actual Forecast
Expense 2.0.3.0.4 Software Licences
Fixed asset 2.1.0.3.2 Computer Equipment
Payroll 1.3.0.0.1 Employee Payroll
Income ...

Subtotals per kind, and income less costs for the project. In the project's currency, as everything in a project's budget is - amounts are never added across currencies.

Also: a Report Packs block (Project costs by account), the CSV / Excel export, the REST API, and the project's AI briefing.


Rules carried over from what exists

  • Labour shown as hours. When Projects β†’ Settings β†’ Budget prices time Not at all - show hours (the default), the By-account view shows the hours against each labour account and money only for budget and income lines - it never invents a price.
  • Dated rates. A task's split applies to each hour at the rate in force on the day it was logged; changing a split re-assigns the whole task's history (the split describes the task, not a moment).
  • Company. A project uses the accounts of its own company, as it uses its cost centres.
  • Cost centres stay. A line keeps its cost centre; the account is a second, separate choice.

Open questions

  1. Where the list lives. System β†’ Chart of Accounts (useful later for assets and contracts too) or Projects β†’ Settings (simpler if it is only ever for projects)? Leaning: System, beside Cost Centres - it is the finance department's list, like theirs.
  2. Splits on a task: percentage only? Leaning: yes.
  3. Changing a task's split later - re-assign all its past hours (simple, honest about what the task is) or only hours from then on? Leaning: all of them; a project's books are re-read, not posted.
  4. Portfolio-level: a by-account view across all projects (per currency) on the Projects dashboard - in the first version or later? Leaning: later.

Build order (each a release of its own)

  1. The chart of accounts: list, import / export, API sync, help.
  2. Accounts and splits on budget lines; the project's default accounts.
  3. Accounts and splits on tasks (and subtasks inheriting).
  4. Income lines.
  5. The By-account view, Report Packs block, export, API and AI briefing.

Related

FreeITSM

Getting Started

Modules

Multi-tenancy (planned)

Responses to feedback

Blue sky thinking

Bugs resolved

Links

Clone this wiki locally