Project Chart Of Accounts Design - edmozley/freeitsm GitHub Wiki
๐ Projects: a chart of accounts - design
Status: all five slices shipped in 5.1.0 - Chart of accounts, Projects โ Budget, developer guide. The four open questions were decided on 12 November 2026 (below). 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.
Decisions (12 November 2026)
- Where the list lives: System โ Chart of Accounts, beside Cost Centres - the finance department's list, reusable later by assets and contracts. (Built in slice 1.)
- Splits on a task: percentage only.
- Changing a task's split later: a setting under Projects โ Settings โ Budget - all of the task's hours (the default) or only hours from then on. So a task's split keeps a dated history (each version with the date it took effect), and "from then on" prices each hour with the split in force on the day it was logged.
- Portfolio-level by-account view: in the first version - built with the per-project By-account view in slice 5, per currency.
Build order (each a release of its own)
- โ The chart of accounts: list, import / export, API sync, help. (5.1.0)
- โ Accounts and splits on budget lines; the project's default accounts. (5.1.0)
- โ Accounts and splits on tasks (and subtasks inheriting), with the re-split setting. (5.1.0)
- โ Income lines. (5.1.0)
- The By-account view per project and across all projects (per currency), Report Packs block, export, API and AI briefing.
Related
- Cost centres ยท Cost centres - Developer Guide
- Projects ยท Projects internals: schema
- Financial approvals - design (#160) - cost centres in approvals