Skip to content

Month-end close

A disciplined month-end close is the difference between "our numbers match the bank" and "we've been carrying a ₹2 lakh mystery for three months." This runbook takes you from the last week of the month through to locking the period.

Read this in full before your first close. After the first two or three months you'll have it memorised — but use the checklist anyway.


Pre-close checklist (days 1–3 after month-end)

Work through these in order. Do not skip steps. If a step can't be completed (e.g. bank statement hasn't arrived yet), park the whole close until it can be — a close with missing data is worse than a late close.

Data completeness

  1. All bank statements imported and reconciled. For every bank account, the last statement of the month has been uploaded to Finance → Reconcile and every line is either matched or ignored. No unmatched rows remain. See bank-reconciliation.md.
  2. All supplier invoices entered. Check with Ops that every received invoice for the month has been recorded — hotel, flight, transport, visa, food. Cross-check against purchase orders / block agreements.
  3. All customer receipts recorded. Every payment notification in your inbox / WhatsApp for the month should have a corresponding receipt voucher. Bank statement reconciliation often catches missed ones; check those first.
  4. All auto-posted journals approved. Finance → Approvals tab. The "Journal Approvals" section should be empty (or have only genuinely rejected items). See approving-journals.md.

Adjustments

  1. FX revaluation posted (if material). If you hold open foreign-currency balances and the INR has moved more than ~1% during the month, post the manual revaluation. See fx-handling.md §5.
  2. AR aging reviewed. Reports → Aging (AR). Anything 90+ days and definitely uncollectable — post a write-off journal (Dr Bad Debt Expense / Cr Customer Debtor). Get Finance Manager sign-off.
  3. AP aging reviewed. Reports → Aging (AP). Anything 60+ days overdue — check with Ops whether the supplier has been paid offline; if so, the receipt wasn't recorded and you need to do that now.
  4. Stock adjustment posted (if we carry inventory). Finance → Settings → (Stock Adjustment button) to record closing stock.

Tax

  1. GST summary matches GSTR-1 export. See handling-gst-returns.md. The sum of the GSTR-1 section totals should match the month's output GST ledger balance.
  2. TDS liability matches 26Q draft. See handling-tds.md. The balance on 2401 TDS Payable should equal the sum of this month's deductions not yet remitted.

Close procedure (day 4)

Reports to print / export before locking

Export these to PDF and stash them in the month-end folder on Google Drive. You will want them for quarterly review and the external audit.

Report Where Permission
Trial Balance Reports → Trial Balance finance.reports.trial_balance.view + .export
Profit & Loss Reports → P&L finance.reports.profit_loss.view + .export
Balance Sheet Reports → Balance Sheet finance.reports.balance_sheet.view + .export
Cash Flow Reports → Cash Flow finance.reports.profit_loss.view
GSTR-1 JSON Reports → GST Returns → GSTR-1 finance.reports.gst_summary.view + .export
GSTR-3B JSON Reports → GST Returns → GSTR-3B finance.reports.gst_summary.view + .export
AR Aging Reports → Aging finance.reports.aging.view + .export
AP Aging Reports → Aging (Payables view) finance.reports.aging.view + .export
TDS 26Q CSV Reports → TDS → Export 26Q finance.tds.export
Day Book Reports → Day Book finance.reports.day_book.view + .export

Name the files consistently

We use FY26-04-April-TrialBalance.pdf format so sorting by filename gives chronological order. Quarterly review time, the auditor asks for "FY26 Q1" and you hand over three ready folders.

Locking (not closing) the period

  1. Finance → Settings tab.
  2. Scroll to Accounting Periods.
  3. Find the period row (e.g. 2026-04 — April 2026). Status should read Open.
  4. Click Lock.
  5. Confirm the dialog.
  6. Period status flips to Locked. The strip at the top of the Finance page turns amber.
  7. From this moment, no one can post a voucher dated inside that period — the API and a DB trigger both enforce this.

Lock first, close later

Standard practice: lock at close, leave not-closed until the quarterly review and CEO sign-off. Locking is reversible by a Finance Manager; closing is permanent and requires the CEO / GM. If you discover a prior-period error between lock and close, you can still post the correction with a quick lock → unlock → correct → re-lock cycle.

Closing (later, after CEO sign-off)

When the quarterly review has been signed off:

  1. Same screen. Find the period.
  2. Click Close.
  3. Confirm the dialog — this is permanent. The dialog is marked as a destructive action on purpose.
  4. Status flips to Closed. From this moment the period is sealed.

Closed periods cannot be reopened

The API returns Closed periods cannot be reopened for any attempt. There is no UI path, no permission, no super-admin override. The only way out is restore-from-backup, which is a sysadmin ticket with real downtime. Do not close a period casually.

Who can lock, unlock, and close

Action Permission Typical role
Create period finance.edit (→ finance.periods.create) FINANCE_MANAGER and above
Lock period finance.edit (→ finance.periods.lock) ACCOUNTANT and above
Unlock period (only from locked) finance.edit (→ finance.periods.unlock) ACCOUNTANT and above
Close period finance.edit (→ finance.periods.close) FINANCE_MANAGER and above

Post-close

Attempt to post back-dated entry into a locked period

The API throws:

Period "2026-04 — April 2026" is locked for posting

Your options:

  1. Best case: Date the entry today (in the current open period), memo it as a correction for the closed period. Document the original intent so the auditor can trace.
  2. If the distortion is material: Ask the Finance Manager to temporarily unlock the period. They unlock → you post → they re-lock. The lockedAt / lockedBy audit columns record the lock-unlock cycle.

Unlock is an audit event

Every unlock leaves a trace. Never unlock for small corrections — use option 1 above. Unlock only when the prior-period balance is materially wrong.

Financial year close

At year-end (March 31 by default for Indian FY), you also close the Financial Year itself:

  1. Finance → SettingsFinancial Years.
  2. Find the year row (e.g. FY25-26 — Apr 2025 to Mar 2026).
  3. Click Close Year.
  4. A destructive confirmation dialog says: "Closing a financial year is permanent. All periods within this year will be locked. Continue?"
  5. Confirm. The year is sealed.

Closing the year closes everything inside

All monthly / quarterly periods within the year are auto-locked as a side-effect. Make sure every period has been reconciled and signed off first.


Close-of-month sanity checks

Before you go home after a close, do these last four checks:

  1. Trial Balance total zero. Debits equal credits to the paise.
  2. Opening balance of next period = closing balance of this period. The next month's Trial Balance, run on day 1 of next month, should show the same balance-sheet items you just closed with.
  3. Bank GL balance matches bank statement closing balance. After reconciliation there should be zero variance. If there's a tiny variance (e.g. ₹3.50), chase it — it's almost always a missed bank charge.
  4. P&L period total is plausible. Sanity-check the revenue and expense lines against the prior month. A 10× jump in one line usually means a data-entry error — hunt it down before you lock.

See also