PBooksPro is now BuilderOnesame company, same team, a much bigger product. What this means

BuilderOne

Project accounting

Project-wise profit and loss: why every posting needs a project dimension

Most property developers can tell you what a project sold for and roughly what it cost. Far fewer can produce a project profit and loss that agrees with the company’s accounts, because the two were built from different sources. The fix is structural, not a better spreadsheet: every posting has to know which project it belongs to.

Last revised

The question, and the usual answer

Whether a project made money is the most important question a developer asks, and it is usually answered by somebody assembling a workbook: contractor payments from one system, sales collections from another, procurement invoices from a folder, payroll estimated by headcount. The result is a number nobody fully trusts, including the person who built it — because by the time it is finished, the sources have moved on.

The underlying problem is not effort. It is that the accounting system recorded the transactions without recording which project each one belonged to, so the project view has to be reconstructed after the fact from documents that were never designed to be added up that way.

A project dimension, not a project’s worth of accounts

There are two ways to make a ledger project-aware. The first is to create a set of accounts per project — “Contractor cost — Project A”, “Contractor cost — Project B” — which works for two projects and collapses at ten: the chart of accounts multiplies, statements need re-mapping every time a project starts, and a transaction that belongs to two projects has nowhere to go.

The second is a dimension: one chart of accounts, with every journal line also carrying the project it is attributed to. The company statement sums all lines; the project statement sums the lines for one project. This is how BuilderOne’s Accounting module works — a single project dimension that every posting adapter carries, whichever module the document came from.

Accounts per project compared with a project dimension
Accounts per projectProject dimension
Chart of accountsGrows with every projectOne chart, unchanged
Adding a projectNew accounts, new report mappingsA new project record
Project P&LA report built per projectThe same statement, filtered
Reconciles to the company P&LOnly if every mapping is maintainedBy construction — it is the same ledger
Cost shared across projectsSplit into separate accounts by handAttributed line by line

What has to carry the dimension

A project dimension is only as complete as the documents that carry it. If one source of cost or revenue posts without a project, the project P&L is understated by exactly that source and nobody can tell. In BuilderOne, the attribution is carried by the document that creates the posting:

  • Contractor bills, advances and retention from Construction — attributed to the project the contract is on.
  • Vendor bills and payments from Procurement — attributed to the project the purchase was requested for, because the supplier, project and cost category are the same records Construction uses.
  • Instalment invoices and receipts from Project Selling — the revenue side, attributed to the project the unit belongs to.
  • Payroll from HR & Payroll — labour cost allocated to the projects an employee worked on, so the site team is a project cost rather than a company overhead.
  • Investor capital, profit allocations and payouts from Investor Management — attributed to the project the investor funded.
  • Manual journals — attributed line by line, because one journal may legitimately touch two projects. A line that names no project is not silently treated as company overhead: it is recorded as unclassified, and unclassified lines stop a project’s profit from being certified until somebody decides where they belong.

The last item matters more than it looks. A dimension that most documents carry but that a manual journal can quietly omit is a dimension with a hole in it, and the hole is exactly where the corrections go. Making “this belongs to no project” an explicit decision, distinct from “nobody has decided yet”, is what closes it.

Project statements that agree with the company’s

With the dimension on every line, a project profit and loss is not a separate report with its own logic. It is the company profit and loss, filtered to one project, drawn from the same journals in the same accounting periods. The same holds for the balance sheet: a project can be shown with its own receivables, payables, retention held and advances outstanding.

That is what makes the numbers trustworthy in a way a workbook cannot be. The project statements and the company statements cannot disagree, because there is no second source for them to disagree with. And because a closed accounting period refuses new postings, a project’s reported result for a closed period stays what it was reported as.

Committed cost is a different question from actual cost

A project P&L shows what has been incurred: certified bills, received goods, run payroll. It does not show what the project has promised to spend. A contract awarded for 10,000,000 with 2,000,000 certified has an actual cost of 2,000,000 and a commitment of 8,000,000 still to come — and a developer who reads the P&L alone will think the project is 8,000,000 richer than it is.

The two views belong side by side. The budget, by cost category, is the plan; commitments — awarded contracts and open purchase orders — are what has been promised against it; actuals are what has posted to the ledger. In BuilderOne the Construction module measures each certified bill against the budget as it is certified, so the cost position is current rather than reconstructed, while the ledger carries only what has actually been incurred. Each number is right for its question.

Certified profit, and why investors care

Where a project is funded by investors, the project’s profit is not only a management figure — it is the basis on which people are paid. Distributing profit from an estimate, and then finding the estimate was wrong, is the kind of error that is very hard to reverse.

A project dimension on every posting makes a different discipline possible: profit is allocated from a certified project profit — a figure read from the ledger for a closed period — rather than from a forecast. BuilderOne’s Investor Management module distributes on that basis, and every capital movement, allocation and payout is itself a posting attributed to the project, so the investor ledger and the project ledger are one set of books.

Questions to ask before trusting a project P&L

  • Does every posting carry the project, or only the ones from some modules? Which documents can post without one?
  • Is the project P&L the company P&L filtered, or a separate report with its own logic?
  • Can the project balance sheet be produced — receivables, payables, retention, advances — or only the P&L?
  • Are commitments shown beside actuals, so an awarded but unbilled contract is visible?
  • Does a closed period refuse postings, so last quarter’s project result cannot quietly change?

See it on your own numbers

The fastest way to judge whether this is how your software should work is to put a real project through it. Tell us what you run and we will set your company up.