Skip to main content

How the hard close date works

Your books have two kinds of close. Closing a month is a soft close: SKU.io signs the month off and saves its report pack, but the month stays open to late entries. The hard close date is the freeze. Everything dated on or before it is locked, and it's the only thing in SKU.io that locks a month.

Closing a month and locking it are different steps​

Closing a monthThe hard close date
What it doesSigns the month off and saves its report pack as the numbers of recordFreezes every day on or before the date
Can entries still land in the month?Yes. A late bill or a backdated adjustment posts on its real date, and the month reads Closed – restated until someone re-signs it offNo. Postings dated inside a locked month are refused or moved, see What a locked month refuses
How oftenEvery monthUsually at quarter end or year end
WhoSomeone with Accounting → Manage Settings (and, under independent review, not the preparer)Someone with the Accounting → Period Hard Close permission (accounting.period.hard_close)
How to undo itReopen…, for a sign-off made by mistakeLower hard close date…, with a reason

The usual rhythm: close each month as it ends, re-sign off any month that changes later, and move the hard close date forward at quarter end or year end once the months it covers are closed and signed off. See What closing does to your books for the soft close, and When a closed month changes for restatements.

One date, with a history​

There is a single hard close date for your whole account. You can set it to the last day of a month that has already ended, and every change to it is recorded with the date, the person who made it and their reason.

The date moves only in these places, all with a reason:

  • Move hard close date… or Set hard close date…, and dragging the marker, on the Close tab. See Move the hard close date.
  • Also lock through this month in the close dialog, which moves the date to the end of the month you're closing once the close finishes. See Close a month.
  • Use as hard close date next to a provider's lock date in Accounting → Settings → General. See Keep your provider's lock aligned.
  • Lower hard close date…, to open frozen months again. See Lower or clear the hard close date.
  • Also set my Accounting Start Date to … and lock everything before it when you reconcile your opening inventory balance. This locks the day before your new start date so the opening day itself stays open. See Reconcile inventory to your accounting provider.

Moving the date in either direction needs the Accounting → Period Hard Close permission (accounting.period.hard_close). Only the Admin role has it by default, so an administrator decides who else can freeze the books. Without it, the buttons and the marker are disabled, with the tooltip You do not have permission to move the hard close date. See Who can do what in the close.

Where you see it​

On the Close tab (Accounting → Close):

  • The Year board marker. A flag above the month tiles reads Books locked through and the date, with a line at that month end. You drag the flag to move the date. On a phone the board isn't shown, so use the card below instead.
  • The Hard close date card, under the Year board. It shows Books locked through and the date, who set it and when, one line per accounting connection with that provider's lock date and an alignment chip, the Lower hard close date… and Move hard close date… buttons, and a Hard close date settings link. With no date set, it reads No hard close date yet and offers Set hard close date….
  • The month tiles. A closed month on or before the date reads Hard-locked. A month the date covers that was never closed reads Locked, not closed.

In Accounting → Settings → Close, the Hard close date card adds a History table:

ColumnWhat it shows
DateWhen the change was made
ChangeThe old date and the new one, for example Dec 31, 2025 to Jun 30, 2026
ByThe person who moved it. Rows for a provider's lock show Daily import
ReasonThe reason they gave. Rows for a provider's lock read Imported from and the connection name

The history records changes to each provider's lock date too, marked with a chip that names the connection, so you can see when Xero or QuickBooks moved and whether SKU.io followed.

In Accounting → Settings → General, the Hard close date field shows the same date, read-only, with a Go to Close settings link. You can't change it there.

What a locked month refuses​

A month that ends on or before the hard close date reads Hard-locked. When you open it, the banner names it, for example December 2025 is hard-locked, and explains two things:

  • Why it's frozen. The hard close date is on or after the month end, so nothing can post there.
  • How to undo it. Someone with the hard close permission can lower the hard close date with a reason, and the month goes back to Closed. The banner has a Lower hard close date… button for that.

While a month is hard-locked:

  • Nothing you do can be dated inside it. An adjustment, a stock take or a document dated on or before the hard close date is refused.
  • Automated postings follow your Locked-period events setting. A late sync or a background posting dated inside the lock is either booked on the first open day and flagged, or blocked until you resolve it. You choose which in Accounting → Settings → General. See Accounting settings at a glance.
  • Inventory value changes are carried forward. An edit that changes what inventory was worth inside the lock keeps the locked day at its locked value and releases the change on the first open day. See Changes carried out of a locked period.
  • The month can't restate. The nightly check for changes since sign-off skips it, and it has no Re-check, Re-sign-off or Reopen…. Its signed-off pack is final.
  • You hear about changes that still reach it. If something inside a locked month changes anyway, for example a value carried forward, SKU.io sends the Locked Accounting Period Changed alert (headed A locked accounting period changed). A month that is only closed doesn't trigger this alert. It shows the change on the month instead.

A month that was never closed but sits inside the lock reads Locked, not closed. It's frozen in the same way, but nobody signed it off and it has no saved report pack. You can still close it for the record with Close for the record.

The lock SKU.io actually applies​

SKU.io stops posting through the effective lock date, which is the later of your hard close date and any provider lock date you've chosen to enforce. When you turn on Enforce locally for a connection in Accounting → Settings → General, months covered by that provider's lock are frozen in SKU.io too. A closed month frozen this way keeps the Closed state and shows a tag such as Locked by Xero, because the provider's lock froze it, not your hard close date. See Keep your provider's lock aligned.

What happens when you move it forward​

Moving the date forward runs as a job in the job tray. Before it freezes anything, it builds any pending batches dated in the months it's about to lock, then checks every closed month it covers for changes since sign-off. A month that changed reads Closed – restated, and the move stops until someone re-signs it off. So a month can't be frozen with a change nobody signed for. See Move the hard close date.

A hard close date in the middle of a month​

If you set a lock date before month-end close existed, SKU.io kept it as your hard close date, even when it falls mid-month. The card then shows Your hard close date falls mid-month: only days through that date are frozen. The month's tile reads Through and the date, and its later days stay open. The next time you move the date, it must land on a month end.

SKU.io never writes your provider's lock​

SKU.io reads each accounting connection's lock date once a day and compares it with your hard close date, but it can't change the date in Xero or QuickBooks. After every move, set the same date in your provider. The Provider alignment figure on the Close tab tells you when the two disagree. See Keep your provider's lock aligned.

Next steps​

Last verified: