Solavel Solavel Docs

Fiscal years and lock dates

docs/solavel-finance/fiscal-years-lock-dates.md

Who can use this: Owner only for lock / unlock / reopen / close. Manager and Accountant can view fiscal years and periods. Manager is explicitly denied periods.unlock and periods.reopen. URL / Route:

  • Fiscal years/finance/fiscal-years (finance.fiscal-years.index). Detail: finance.fiscal-years.show, edit, update, create, store, destroy. Action endpoints: finance.fiscal-years.lock, reopen, close, generate-periods.
  • Periods/finance/periods (finance.periods.index). Detail: finance.periods.show, edit, update, create, store, destroy. Action endpoints: finance.periods.lock, reopen, close. Plan / feature gate: feature:period_locking_enabled (default: enabled). With it off, the lock/unlock/reopen actions are disabled but periods still exist as a calendar. Permissions: periods.lock, periods.unlock, periods.close, periods.reopen, periods.generate. All of these also require feature:period_locking_enabled.

Purpose

A fiscal year is the 12-month accounting calendar your books run on. Most organizations align it with the calendar year (1 Jan – 31 Dec) but Solavel supports any start date.

A period is a sub-range of a fiscal year — typically a calendar month. Posting into a period is allowed only while the period is open. Locking a period prevents further postings; closing it also rolls forward the period-end balances.

Lock dates exist to give you a clean cut-off for VAT returns, monthly reporting, and audit. Without them, someone could backdate a journal into a period that has already been reported, breaking the comparability of your books.

Step by step

Fiscal years

Create a fiscal year

Route: finance.fiscal-years.create / store. Permission: typically Owner; tied to settings.manage.

  1. Open /finance/fiscal-years.
  2. Click New fiscal year.
  3. Pick a Start date and End date (often 12 months apart). Solavel does not require fiscal years to be exactly 12 months — short or long initial years are allowed.
  4. Pick a Label (e.g. "FY 2025" or "FY 2024–25").
  5. Save.

Generate periods

Route: finance.fiscal-years.generate-periods. Permission: periods.generate.

After creating a fiscal year, click Generate periods to slice it into months automatically. You can also create periods manually under /finance/periods/create.

Lock a fiscal year

Route: finance.fiscal-years.lock. Permission (effectively): Owner-only.

Locks every period inside the year in one click. Subsequent locking of individual periods is unnecessary.

Reopen a fiscal year

Route: finance.fiscal-years.reopen. Permission (effectively): Owner-only. Only owners can reopen.

Reopens every locked period in the year.

Close a fiscal year

Route: finance.fiscal-years.close. Permission (effectively): Owner-only.

Closing rolls retained earnings, marks the fiscal year as Closed, and prevents reopen unless explicitly forced. The Trial Balance for the year is frozen at this point.

Periods

Browse periods

  1. Open /finance/periods. Each row shows the fiscal year, label (e.g. "Jan 2025"), start, end, and status (Open / Locked / Closed).
  2. The list is sorted newest-first. Filter by fiscal year.

Create a period

Route: finance.periods.create / store. Permission: periods.generate. Most users will not need this — generate periods from the fiscal year instead.

Edit a period

Route: finance.periods.edit / update. Allowed only on Open periods.

Lock a period

Route: finance.periods.lock. Permission: periods.lock (Manager denied by default).

A locked period blocks: posting / unposting / voiding any document dated in the period (invoice, bill, payment, journal, expense). The period's lock-state shows clearly in the toolbar of any document with a date inside it.

Reopen a locked period

Route: finance.periods.reopen. Permission: periods.reopen (Manager denied; Owner-only by default).

Use sparingly — reopening for a quick fix and re-locking is fine; reopening to allow regular backdated postings defeats the purpose.

Close a period

Route: finance.periods.close. Permission: periods.close.

Closing locks the period and additionally writes period-end carry-forward markers. This is the strictest state.

Delete a period

Route: finance.periods.destroy. Allowed only on Open periods with no postings.

Lock-date behaviour, in plain English

When a document has a date inside a locked period, the following actions are blocked:

Action Blocked?
Save as Draft No (drafts don't post)
Edit a Draft No
Post / Approve Yes
Unpost (return to Draft) Yes
Void Yes
Reverse Yes
View / Print PDF No

To unblock yourself, ask the Owner to Reopen the period, finish the change, then re-lock.

VAT returns interact with locks: finalising a VAT return effectively locks the period for that return; cleanly reopening requires un-finalising the return first.

Behaviour and rules

  • Periods are independent of VAT returns; locking a period does not file a VAT return.
  • The period_locking_enabled flag is on by default; turning it off makes the lock buttons disappear but the periods still exist as a calendar.
  • A period that contains a posted invoice, bill, or journal cannot be deleted — archive (lock or close) instead.
  • The first fiscal year is created automatically by the setup wizard using your country defaults.
  • Manager role-permission set explicitly denies periods.unlock and periods.reopen. Owners and any user with the finance.owner middleware-level role can unlock and reopen.

Permissions / restrictions

  • View periods/years: any role.
  • Generate periods: periods.generate.
  • Lock period: periods.lock.
  • Unlock / reopen: periods.unlock, periods.reopen (Owner-only by default).
  • Close: periods.close.
  • Lock / reopen / close at fiscal-year level: Owner-only.
  • All of the above require feature:period_locking_enabled to be on.

Lock vs Close vs Reopen — when to use which

Action Effect Who can do it
Lock a period Blocks new postings, unposting, reversing into that period. Drafts still editable. Reversible via Reopen Owner
Close a period A harder lock — typically used after a full period-end review. Rolls month-end totals into year-to-date Owner / Accountant with periods.close
Reopen a period Reverts a Closed or Locked period back to open, allowing posting Owner only

Common pattern: post all activity → run base-currency adjustment → finalize VAT returnLock the month → leave Close for year-end.

Common mistakes

  • "Posting is blocked but the period looks open." Check the fiscal year — locking the year locks every period inside it. Also check feature flag period_locking_enabled is on.
  • Manager can't unlock. Unlocking and reopening are Owner-only by default. Grant a role override in Settings or escalate.
  • VAT return blocked by closed period. Once a VAT return is finalized, postings into its period are blocked even if the period itself isn't formally locked. Edit the VAT return back to Draft (with permission) to unblock.
  • "Reverse failed — original period is locked." Reverse posts a mirror journal on the reverse date, not the original date. Pick a reverse date in an open period.

Related

Source: docs/solavel-finance/fiscal-years-lock-dates.md ← All documentation