Skip to content
A private investment group
Family office · Australia · Identity withheld at the client's request

Reimagining month end from first principles

Month-end reporting for a private investment group depended on a dozen accounting systems and one large spreadsheet. We replaced it with a system that refreshes itself every night and shows where every number comes from.

Services
Advisory · Data platform build
Portfolio
Nine figures across managed funds, direct property, a rural operation and cash
Structure
More than a dozen entities, trusts and companies, plus a charitable foundation
The brief

Three sources that did not reconcile

Month-end reporting for the directors was assembled by the CFO by hand. Accounting data came from a dozen separate accounting-system organisations. A management-reporting add-on consolidated them. One large spreadsheet held everything the accounting systems could not: asset classification, property valuations and the investment policy targets.

The three sources did not reconcile, and there was no way to see where they disagreed. The spreadsheet was the only place classification and unlisted valuations lived, so it was also the single point of failure. It was undocumented.

Figures went stale without anyone noticing. The workbook's performance columns had been calculated once and showed the same numbers for months. The reporting answered what do we own but not how are we doing. And a charitable fund that must by law be reported separately, and never combined with family assets, was kept separate only by people remembering to.

Our approach

Put each rule in one place

We started with a short consulting engagement and a working session with the CFO, then built.

The principle was simple: anything the spreadsheet did by habit, the system should do by design. The carry-forward valuation rule is implemented once, in the database, so no report can apply it differently from another. The charitable fund's separation is enforced by a database constraint, and the application has no view that combines it with family assets. If the combined figure cannot be requested, it cannot be produced by mistake.

What was built

A system that refreshes itself and shows its sources

Every accounting organisation is connected by API. The domain is modelled as entities, funds, holdings and valuations. Allocation is measured against the investment policy, with drift tracked across month ends. Every figure shows where it came from.

Sync
Incremental. The nightly refresh fetches only what changed since the last run.
Valuation
The carry-forward rule is implemented once, in the database, and applied the same way everywhere.
Separation
The charitable fund is isolated by a database constraint. There is no combined view.
Allocation
Holdings are measured against the investment policy targets, with drift tracked over time.
Provenance
Each amount shows its source (ledger, spreadsheet or PDF valuation), when it was struck and how old it is.
What changed

Month end is now automatic

<1minute

A nightly job refreshes every organisation in well under a minute, using a fraction of a percent of the available API allowance. A full reload would take about forty times the calls and half an hour.

The system also surfaced three problems the spreadsheet had hidden.

A negative seven-figure position that the workbook said to ignore, but which the reporting was counting.

An apparent concentration of more than half the portfolio under an unknown counterparty. It was a classification error.

A receivable carried unchanged for a year. The ledger showed it had been settled and reinvested.

The client now has a system rather than a report. It is deployed, access-controlled, refreshes itself, and is theirs.

Have a problem shaped like this one?

Fixed-scope discovery to start.

Book a consultation

Strata: Max van den Oetelaar — Unsplash