Originally published at Trida AI.
Ask three people in the same finance team what revenue was last month and you can get three defensible answers. One counts it when the invoice goes out. One waits for the service period to end. One has quietly removed an internal sale that another entity in the group still counts as income. Nobody made an arithmetic mistake. They used different definitions, and the close is where those differences finally collide, usually in the last week of the month, usually in front of someone waiting for the numbers.
That is the problem this open blueprint, the aidnn Month-End Close deployment, is built around. It treats the close as a chain of definitions before it treats it as a calculation. The definitions themselves are governed and versioned. The figures are then checked by a second, independent pass that works from the source records rather than from the first answer. And the pack a finance lead signs is the one that survived both.
The argument starts with definitions
Most close automation goes after the visible work: pulling extracts, adding columns, formatting the pack. The invisible work is where closes actually fail. Revenue means something specific in each company, shaped by its recognition cutoffs, its entities, and the internal trades between them. When that meaning lives in one person's head, every tool downstream computes faithfully from a definition nobody wrote down, and disagreements surface as arguments about whose spreadsheet is right.
So the blueprint writes the definitions down as a governed catalog. Every figure traces to one entry that says what it includes, which accounts feed it, how internal trades are eliminated, and how the sub-ledgers should agree with the main books. The catalog carries a version, and each pack states the version it was built under, so "which definition of revenue produced this number?" has a direct answer months later, when an auditor asks it.
Changing a definition is treated as the serious act it is. Before a new version governs a close, its effect is measured against a period that already closed and signed: which figures would move, by how much, and which checks would newly pass or fail. A named person then adopts it, with a reason, for periods that have not signed yet. A signed period keeps its definitions permanently. When a later month runs under changed definitions, the comparisons say so on their face, naming both versions, rather than letting a definition change masquerade as trading performance.
The close flow. Definitions govern the build, an independent check recomputes every figure from source, and a person signs at the end.
The platform does the analysis. The deployment earns the trust.
In a live deployment, aidnn is the analysis platform at the centre of this: its agents work over the company's connected systems. One fact shapes everything around it, and it is stated plainly. aidnn has no public API. There is no endpoint to call and no sandbox to test against. So this blueprint is the deployment layer a forward-deployed team builds around the platform: the connections into the group's systems, the governed data those systems feed, the definition catalog, the independent check, and the sign-off discipline. The seam where the platform answers is a defined contract agreed during onboarding, and the system refuses to present any other engine's answers under aidnn's name. Where no live platform is connected, a reference engine answers the same defined questions so the close can be exercised end to end, and the check that follows does not care which engine proposed the figures. That indifference is the point.
The sources get discipline before the engine sees anything. Extracts arrive as fixed, versioned deliveries; a corrected extract is a new delivery that replaces the old one, never an edit to it. A close cannot start until everything it expects is in hand, and the refusal names what is missing, because a pack built from three of four entities is not an incomplete pack. It is a wrong one with good formatting.
Checked by someone who did not do the work
Every figure the engine proposes is recomputed independently, from the source extracts themselves, by a separate implementation that shares nothing with the first calculation except the definition catalog. If a figure cannot be reproduced exactly, the pack is blocked and the difference is named: which figure, which entity, how far apart. The summary a board reads is written only from figures that passed, so a blocked close has no narrative smoothing over its gaps.
Money gets no benefit of the doubt. Figures are carried exactly, to the cent, end to end, and a consolidated total is the sum of its converted parts rather than a separate calculation that roughly agrees. Internal trades are checked pair by pair: what one entity booked as a sale to its sister company must match what the sister company booked as a cost, in the currency the invoice was written in. A leg with no counterpart, or two legs that disagree, blocks the pack and names both sides. Movements from last month are broken down by entity and by account, with the parts required to add up to the movement itself; any residue from conversion is shown as its own labelled line instead of being absorbed quietly.
One item, start to finish. A billing posted to the wrong account still adds up, so arithmetic alone passes it; the agreement check between the sub-ledger and the main books is what catches it.
That worked example carries an honest admission. A journal posted to the wrong account foots perfectly, and recomputation alone will reproduce the wrong figure from the wrong source. What catches that class of error is agreement between records kept independently, which is why the blueprint leans on those tie-outs. Verification proves the figures match the sources under the agreed definitions. It cannot prove the sources were right, and it does not pretend otherwise.
A signature that means something
Signing is a chain, not a click. One named person prepares the pack and states it is ready, standing behind its counts. A second person, never the first, reviews it and says so in their own words. Only then does the finance lead sign, and neither earlier hand can hold the pen. If late information arrives after a pack is built, the pack goes stale and cannot be signed at all; the close is rebuilt on the new records.
Real closes also need an honest way through a break that will not fix itself this month. A finance lead can accept a specific, named discrepancy in writing, with a reason, and the close can then sign with the acceptance printed on its face beside the discrepancy itself, which stays exactly as computed. That item opens the next month as unfinished business and is tested again there; it clears only when events clear it. Accepting the same break a second month is recorded as the second carry, with the first acceptance quoted. Nothing in that path edits a number into agreement.
Later months quote last month's signed figures from the signed record itself, never recomputed from sources that may since have been corrected. If a signed period's sources are later restated, the next close names it, lists the figures that no longer reproduce, and holds its own signature until a named person acknowledges the restatement on the record. Signed history is never rewritten.
The limits worth knowing: comparisons look back one period, the way most board packs do. The definition language is deliberately small, and a company needing a new kind of calculation gets it built and reviewed rather than improvised mid-close. And the signed pack is a record of approval, nothing more. It posts nothing to a ledger and files nothing; that stays in the company's own systems, by design.
Work with us
If your close still depends on definitions held in one person's head, extracts that arrive in whatever shape each entity prefers, and a pack nobody can independently re-perform, that is a deployment problem we work on. Start with Trida AI's intake: tell us how your group is structured and where the close hurts, and you will talk with the founders and engineers who would build it with you.
Get the Code on GitHub: github.com/tridaai/blueprint-aidnn-month-end-close


Top comments (0)