Close controls

Know whether the books actually closed

Signing off on the fifth is a decision. Whether material value stopped moving after it is a measurement — and across a dozen entities, nobody has the hours to take it by hand. These controls run over every entity's general ledger and surface the exceptions worth a controller's attention.

Close lag — did the books actually close?

Every journal carries two dates: the period it hits, and when someone actually keyed it into Xero. The gap between them is your real close lag.

Entries are bucketed as on-time, 5–30 days late, 30–60, or 60+, by count and by value. The on-time window defaults to five calendar days from period end and is configurable. Mean, median, p90, p99 and worst-case lag are tracked per entity per period.

A clean close is not “we signed off on the 5th”. It is whether material value stopped moving after you did. If a quarter of your posted value lands 30+ days after period end, last month's numbers are still changing — and anyone reading them is reading a draft.

Duplicate journals

The same cost, entered twice, in two entities or twice in one.

Matches journal lines sharing the same account, the same net amount and the same normalised description, posted within 14 days of each other. Cash receipt and payment journals are excluded, since legitimate repetition there is normal, as are zero-value lines and lines with no description.

Duplicates are hardest to spot precisely where they matter most — across entity boundaries, where no single ledger shows both halves. Running one detector over every entity's journals finds what per-entity review structurally cannot.

Missed recurring entries

The accrual that has posted every month for a year, and didn't this month.

Flags any account that posted in at least four of the prior five months but has nothing in the current one.

Omission is invisible by construction. A wrong number gets queried; a missing one just makes the month look better. This is the control that catches a forgotten accrual before it becomes a prior-period adjustment.

Amount outliers

An entry far outside what this account normally carries.

For each account, the mean and standard deviation of absolute line values are computed over a trailing twelve months, requiring at least ten observations before the account is judged at all. Current-period lines beyond three standard deviations are flagged, with the z-score shown.

Not every outlier is an error, and the tool does not pretend otherwise. It surfaces the handful worth two minutes of a controller's attention, ranked, instead of asking someone to eyeball a general ledger.

Unmapped balances

Accounts sitting outside the group chart of accounts.

Any account with no mapping to a group account is excluded from consolidated totals and reported separately, with its value and the entity it belongs to.

This is a design decision worth stating plainly: a mapping gap understates the consolidation visibly rather than silently. A new account added in a subsidiary does not quietly disappear from the group P&L — it appears on a list demanding attention.

FX rate coverage

Periods and currencies with no rate on file.

Every currency and period combination present in the data is checked against the stored rates, and gaps are reported with the absolute exposure they affect. Be aware of what this does and does not do today: an unrated row currently contributes zero to the consolidated total rather than the total being withheld, so the figure is understated while the gap is flagged beside it.

A missing rate is the quietest possible error — the affected entity contributes nothing and the group total simply comes out lower, with no failure anywhere. Detection is what stops that being invisible. Suppressing the total outright would be better still, and that change is in progress.

Questions CFOs ask

What is close lag and why does it matter?

Close lag is the gap between the accounting period a journal belongs to and the date it was actually entered. It matters because it measures whether your books stopped moving after you closed them. A month signed off on the fifth, but still receiving material entries on the fortieth, was not really closed on the fifth — and every report issued in between was provisional without saying so.

How do you detect duplicate invoices across multiple companies?

By running the check across every entity's journals at once rather than one ledger at a time. Lines are matched on the same account, the same net amount and the same normalised description within a fourteen-day window. Cross-entity duplicates are the ones per-entity review cannot find, because no single ledger contains both halves.

Can you spot a missing accrual before it becomes a prior-period adjustment?

Yes — by looking for absence rather than error. Any account that posted in four of the previous five months and has nothing in the current one is flagged. Omissions do not announce themselves the way wrong numbers do, so pattern-breaks are the only reliable signal.

Does this replace an audit or internal controls?

No. These are detective controls that run continuously over the general ledger and surface exceptions for a human to judge. They shorten the distance between an error being made and someone noticing it. They do not test design effectiveness, they do not provide assurance, and they are not a substitute for a properly designed control environment.

Does it change anything in Xero?

No. Everything is read through the Xero API and nothing is written back. The detectors run over a copy of the journal data, so there is no possibility of a control altering the ledger it is checking.

See it run on your own ledger

The fastest way to judge these is to point them at a month you have already closed and see what they find.

Book a call →