Close is a state machine. Not a permission you forgot to revoke.
Six explicit states, asymmetric sales and purchasing locks, a guided year-end close and irreversible posting. What your auditors will call evidence.
A period's lifecycle
<code>Unlocked</code>
The period accepts normal postings. Sales, purchases, adjustments — every document flows to the GL.
<code>LockSales</code> / <code>LockPurchasing</code>
Asymmetric locks. You can close AR while AP stays open, or vice versa. That is how close works in the real world.
<code>Locked</code> → <code>Closed</code>
<code>Locked</code> blocks all posting. <code>Closed</code> is reached only at year-end close — a sensible point of no return.
Why AR and AP close separately
The manual says "close the month." Reality says "close sales on day 3, close purchases on day 8." A system that forces both to close at once forces the accountant to delay a correct sales invoice waiting for a late vendor bill.
LockSales. Sales, credit notes and customer receipts stop modifying the period. AP stays open until the last vendor bill arrives.LockPurchasing. The inverse: purchasing closed, sales open. Useful when purchasing closed early in the month.LockSalesAndPurchasing. Both closed, but accountant adjustments (reclasses, accruals) still allowed.Locked. All posting blocked. The only way out is transitioning toClosed(year-end) or reversing with explicit permission.
Three auditable steps
- Step 1: the system generates the closing entry. Reverses accruals, closes P&L accounts into
RetainedEarnings, balances FX variance. - Step 2: the user reviews and approves. The draft is presented line by line with explanations. Nothing posts at this point.
- Step 3: atomic posting. The system posts the entry, transitions all twelve periods of the year to
Closedand creates the twelve periods of the new year inUnlocked. - Reversal available but costly. Requires elevated
PostingPeriod.ReverseClosepermission and a 20-character minimum reason. The event is recorded inAuditEvents.
What you cannot do
- You don't edit a posted invoice. You
voidit and issue a credit or debit note. History is preserved. - You don't post into a
Lockedperiod. The posting engine checks the period state byPostingDatebefore writing to the GL. - You don't modify
ActualPostingDate. Once stamped at post time, it's immutable. Evidence for the auditor. - Every transition is logged.
Unlocked→LockSales,Locked→Unlockedreversed, year-endClosed— every one of them toAuditEvents.
Let's simulate a close with your data
Technical demo that walks through the full flow: locks, adjustments, year-end close and audited reversal.