ERPNext month-end and year-end closing process

How to close books in ERPNext: the reconciliation checklist, the Period Closing Voucher that moves profit to retained earnings, period locking and the rules for reopening a closed period.

On this page

How ERPNext month-end and year-end close works

Every month and year, the finance lead has to reconcile, adjust and then freeze the books so that reports stay stable after they are reviewed. In ERPNext that close is not a single button. It combines reconciliation tasks across the ledgers, a set of adjusting entries, the Period Closing Voucher for year-end transfer of profit or loss to retained earnings, and a period lock that stops late postings from changing closed figures. The design of that sequence should be agreed before the first live close, because the lock settings and the year-end voucher interact with each other and with how your team reviews the books.

The closing controls in ERPNext are *Accounting Period* records, which can be set up per company and per period, and the accounts frozen date in the accounting settings, which blocks posting to ledger entries on or before a chosen date for users without the right role. Both mechanisms need owners, an agreed reopening procedure and a record of who may override them. Your team should confirm exactly which settings apply in the version you run, since ERPNext 15 and 16 are the supported major versions and ERPNext 14 reached end of life on January 31, 2026. Check the current behavior in the ERPNext GitHub repository and in your own test site before you rely on it.

ERPNext is licensed under GPL-3.0, so the close procedure, custom scripts and any closing reports you build on it are governed by that license when you distribute them. Treat the close as a designed process rather than a set of ad hoc clicks: write the checklist, test it on a copy of your data, and confirm with your auditors which evidence they expect to see for each locked period. DeployOpen can prepare that design and the test plan as part of a fixed-scope engagement, while the accounting policies and the sign-off remain with your finance team and their auditors.

Which reconciliations and adjustments belong in the close checklist

A close checklist in ERPNext is a set of parallel workstreams, each with a clear finish line before the period is locked. The items below cover the balances, valuations and cross-entity matches that most often leave a period open or force a reopening. Confirm the exact cut-off rules and approval steps with your controller before you fix the checklist order.

Bank reconciliation

Match every bank account's statement lines to posted Payment Entries and Bank Transactions for the period, and confirm the ledger balance agrees to the statement closing balance. Clear or explain each unreconciled item, including bank fees, interest and timing differences, before the period is locked. Check that no bank account is left with transactions posted after the statement cut-off, since these will shift the next period's reconciliation.

Open receivables and payables review

Review the ageing of customer and supplier balances and confirm that unallocated payments, advances and credit notes are matched to the invoices they settle. Look for invoices that were paid outside ERPNext, duplicate supplier invoices and parties with a debit balance where a credit was expected. Document every balance you leave open and the reason, so the auditor can trace it in the next period.

Accruals and deferred entries

Post accrued expenses and revenue for goods or services received or delivered in the period but not yet invoiced, and reverse prior-period accruals once the invoice arrives. Run deferred revenue and deferred expense schedules so that the recognized amount matches the service dates for the month. Confirm that each accrual has a clear reversal date and an owner, because stale accruals distort both the profit and loss and the balance sheet.

Stock valuation and reposting

Confirm that stock ledger entries and the general ledger agree for each warehouse and that the valuation method applied to each item is the one you intend. Investigate negative stock, items received without a matching invoice and any stock reposting that changed past valuations. Run the stock valuation check before the period is locked, since postings in a closed period can change inventory totals that the balance sheet depends on.

Exchange revaluation where foreign currency applies

For every foreign-currency bank account, receivable and payable, compare the balance at the transaction rate with the period-end exchange rate and post the unrealized gain or loss. Confirm that the exchange rates used for revaluation are the ones your treasury policy names, and that realized differences from settled items are already booked. Skip this item only if the company holds no open foreign-currency balances at period end.

Intercompany matching

For each pair of group entities, confirm that the invoice on one side has an equal and opposite entry on the other, in the same period and in the agreed currency. Resolve differences in cut-off, rate or posting date before either side is locked, because an unmatched intercompany balance will not eliminate in consolidated reports. Record who approved each intercompany settlement and keep the reconciliation with the close file.

How the Period Closing Voucher moves profit to retained earnings

The year-end sequence confirms that all fiscal-year activity is posted, transfers the net profit or loss out of the income and expense accounts into retained earnings, and then locks the period so the closed balances cannot shift. Each step ends with a check that the books are ready for the next one.

  1. Confirm all fiscal-year entries are posted

    Before any closing voucher is created, the finance lead confirms that every sales invoice, purchase invoice, journal entry, payment and stock or depreciation posting dated within the fiscal year is submitted. Drafts and unsubmitted documents are not picked up by the closing logic, so they are either submitted, amended or cancelled now. The check is complete when the open drafts list for the year is empty and the trial balance for the final period matches the subledger totals you expect.

  2. Reconcile banks and open subledgers

    The accountant completes bank reconciliation, payment reconciliation for unallocated payments and advances, and a review of receivable and payable ageing for the year. Any unexplained difference is resolved with an adjusting journal entry rather than left in a suspense account. The step is done when each bank account's ledger balance agrees with the statement balance and the outstanding items are documented.

  3. Post year-end adjustments

    Accruals, prepayments, depreciation, inventory valuation adjustments and any revaluation entries are posted as journal entries dated on or before the closing date. Your accounting policy determines which of these apply, so the list should be agreed with the controller beforehand. The check is that the profit and loss accounts reflect the adjusted results, and that a second reviewer has signed off the adjusting entries with their supporting documents attached.

  4. Create the Period Closing Voucher

    A user with the appropriate role creates a Period Closing Voucher for the fiscal year, selects the company and closing fiscal year, and names the closing account, which is usually an equity account set up for this purpose. The retained earnings account receives the net profit or loss. Before submitting, confirm with your chart of accounts that both accounts are the intended ones for this company, since the mapping must match your reporting structure. The voucher is ready when the preview shows the expected net amount and the account mapping has been checked by a second person.

  5. Submit the voucher and review the ledger

    Submitting the Period Closing Voucher posts journal entries that zero out each income and expense account and move the net result to the closing and retained earnings accounts. Open the General Ledger for the fiscal year and confirm that every income and expense account now closes to zero for the closing date, and that the net amount equals the figure in the voucher. The step is complete when the ledger shows no unexpected residual balances.

  6. Check the balance sheet and trial balance

    Run the Balance Sheet and Trial Balance as of the closing date and confirm that assets equal liabilities plus equity, and that retained earnings reflects the expected opening balance for the next year. Compare the figures with the signed-off results from the prior steps. The check is complete when the totals agree and any variance has been traced to a documented entry, not a manual override.

  7. Lock the period and document the close

    Set the accounting period as closed using Accounting Periods or the frozen date setting, depending on how your site is configured, so that users cannot post into the fiscal year without an approved exception. Record the closing voucher name, the reviewer sign-offs and the reports generated in your close file. Confirm the lock with a test that a non-privileged user cannot post a dated entry into the closed period. The step is done when the lock is verified and the close file is archived.

Locking periods with Accounting Period or a frozen accounts date

An Accounting Period is a document that defines a date range and blocks posting to that range once it is closed for the document types it covers. Each period carries its own status, so the close is visible as a record for each month, quarter or year. Reopening is an explicit action by the people you assign, which leaves a trail you can review.

  • Named control: each period has its own status, so the close is visible as a record.
  • Company scope: check whether a period applies to one company or to all companies on the site before you rely on it.
  • Document coverage: confirm which transaction types the period blocks in your version, since coverage may differ by document type.
  • Reopening trail: decide who can reopen a closed period and how each reopening is documented.
  • Overlapping ranges: overlapping date ranges can conflict, so test the setup on a copy of the site before go-live.

Confirm on a test site which transaction types the period blocks and who can reopen it.

Which closing controls fit which operating model

This table compares four controls teams combine when closing books in ERPNext: period locks, the frozen accounts date, the Period Closing Voucher and reversing journal entries. Read each row for what it blocks or records, the setup where it fits and what to confirm in your version before go-live. The main takeaway is that locks stop new postings, while the closing voucher and reversals handle year-end transfers and corrections.

ControlWhat it controlsWhen it fitsTrade-offs and what to confirm
Accounting Period lockBlocks new or changed postings for a named period, for selected document typesTeams that close by calendar period and need a named, reviewable close per moduleSet up per period and document type. Confirm which document types your version can close and who can reopen them.
Accounts frozen upto dateBlocks accounting entries dated on or before one cut-off date, except for a designated modifier roleSingle-company sites with one global cut-off applied after each closeOne date applies to all accounts. Confirm the Frozen Accounts Modifier role and which users hold it.
Period Closing VoucherTransfers the closing balances of income and expense accounts to a retained earnings accountYear-end close, run once per fiscal year after all adjustments are postedPosts a ledger entry that needs review. Confirm the retained earnings account and how cancellation behaves after later entries exist.
Reversal journal entryCreates an offsetting entry to correct a posted journal without editing the originalCorrections after a period is locked or when a control forbids editing posted entriesKeeps both entries visible for audit but adds volume. Confirm the reversal option and date rules in your version.

When a closed period can be reopened and what it costs

Reopening a closed period should be a rare, documented decision, not a routine fix. In ERPNext, the locks that stop postings into a closed period are set by the finance lead or controller, and the people allowed to change those settings or post into a locked period are controlled through roles and permissions. Before go-live, write down who may request a reopening, who must approve it, which settings change during the reopening, and who restores the lock afterward. Then confirm the exact role names, the Accounting Settings and Accounting Period options, and the frozen date behavior in the ERPNext version you run, because these details have changed across releases and should be checked against your own test site rather than assumed from memory.

Reopening after management or statutory reports have been issued creates audit trail questions. A reopened period means the figures in a previously distributed report no longer match the ledger, and the Period Closing Voucher that moved the profit or loss to retained earnings may need to be reversed or re-run. Ask your external auditor what evidence they expect for each reopening, such as a signed request, the journal entries made, the user who made them and the re-issued reports. Record the reason and the approval in your own change log, since the system alone will not explain why the change was made.

The default position in your policy should be to correct in the current open period with adjusting entries, and to document the original error and the correction together. Adjusting entries leave the closed period untouched, so reports already issued remain reproducible, and the correction shows up in the period where it was found. Reopen only when the error is material, affects a figure already reported externally, or cannot be corrected sensibly in the current period. Test this decision rule with your team on a copy of production data before go-live, so the approval path and the lock restoration are practiced rather than improvised.

How to set up the close process before the first live period end

This sequence confirms the company and fiscal year settings, locks the period controls, assigns posting and unlock rights, and proves the close on a copy of the site before the first live period end. The result is a documented close that the finance team can repeat without improvising.

  1. Confirm fiscal year and company settings

    Before anything is locked, the finance lead and the implementation team confirm the Fiscal Year records, the company's default currency, the retained earnings account, and the cost center and accounts used for year-end results. Each company on the site should be checked separately, because a wrong fiscal year start date is hard to correct once transactions are posted. This step is done when a written settings record has been signed off by the controller and matches the statutory year.

  2. Configure accounting period and frozen date

    Create the Accounting Period records for each month or quarter and set the Accounting Period closed state where the process allows it. Then set the Accounts Settings frozen date so that no user, other than an approved role, can post entries before that date. Test the lock by attempting a posting into a closed period with a non-privileged test user. The step is complete when the attempt is blocked and the blocked attempt is recorded in the test notes.

  3. Set role permissions for posting and unlocking

    Work with the controller and the security owner to decide which roles may post journal entries into a period, which may close or reopen an Accounting Period, and which may change the frozen date. Assign these through roles and user permissions rather than by sharing a single administrator account. Review the list with the auditors or internal audit before go-live. The step is done when each named user has a documented role, and a user without the unlock role cannot change a closed period.

  4. Build the close checklist

    Write the month-end and year-end checklist as a controlled document that lists each reconciliation, accrual, depreciation run, exchange rate revaluation, inventory valuation check, and the Period Closing Voucher step, with the owner and the evidence expected for each item. Include the reports that prove each item, such as the trial balance and the ledger reports. Agree who signs off each item and where the evidence is stored. The step is complete when the checklist has an owner and an evidence location for every line.

  5. Dry-run a close on a test site copy

    Take a copy of the production site into a separate test environment and run the full checklist for a closed historical period and the year-end. Post the Period Closing Voucher, check that the retained earnings balance equals the expected figure, and confirm that the balance sheet and profit and loss reports tie to the trial balance. Record every error, the fix and the person who approved it. The dry run is done when a second person can reproduce the close from the checklist alone with no differences in the figures.

  6. Document the year-end steps and reopening rules

    Write the year-end runbook with the exact order of steps, the approvals needed to reopen a closed period, the rule for posting adjustments after the close, and the way the frozen date is moved. Include what to do when a late invoice arrives after a period is locked. Store the runbook next to the checklist and link it to the change record used for configuration changes. The step is complete when the controller has approved the runbook and it has been tested once in the dry run.

Security and audit controls for the closing process

Closing a period changes what can be posted, so the controls around it matter as much as the closing steps. The cards below cover who can lock and unlock periods, how reopenings are recorded, what gets backed up before year-end, how the test copy is protected, and which closing actions leave a trace.

Separate posting from unlocking

Closing a period and reopening it are different powers, and in ERPNext they are controlled through roles and the accounting period settings. Assign the ability to submit Period Closing Vouchers and change period status to a small group who do not also post routine journal entries. Check the role list for each user, because a single account that can post, close and reopen removes the review that auditors look for. Document who approves each unlock before it happens.

Record every reopened period

A reopened period is an exception that changes reported results, so it needs a written reason, an approver and a date. Keep a log outside ERPNext that lists the period, the requester, the approver, the entries added or changed, and the date the period was locked again. Before reopening, confirm which Period Closing Voucher exists and whether it must be cancelled. Reconcile the log against the version history of affected documents at the next close.

Back up before year-end runs

Year-end closing creates vouchers that carry balances into the new fiscal year, and those are hard to unwind cleanly. Take a full database and file backup immediately before the Period Closing Voucher is submitted, and test that the backup restores to a separate host. Record the backup identifier in the close checklist. Confirm with your infrastructure team how long backups are retained, how they are encrypted and who may restore them.

Control access to the test copy

Teams often rehearse the close on a copy of production data before running it live. That copy contains the same ledgers, parties and bank details, so it needs the same access control as production. Restrict who can log in, remove or mask personal and banking fields where the rehearsal does not need them, and disable outbound email and payment integrations on the copy. Confirm these steps with the owner of the test environment before the copy is created.

Log closing actions centrally

ERPNext keeps document version history and activity on records, but the closing decisions themselves, such as who ran the reconciliation checks and who approved the adjustments, usually sit in email or spreadsheets. Send the sign-off record and the Period Closing Voucher reference to a central log your finance and security teams can read. Confirm which ERPNext logs your hosting setup keeps, for how long, and whether they can be exported with the closing evidence.

Questions finance and IT teams ask before closing their first year in ERPNext

What drives the cost and effort of setting up the close in ERPNext?

The cost depends mostly on how much of the close is already defined before anyone configures it. The main drivers are the number of companies and currencies on the site, how many bank accounts and sub-ledgers need reconciling, whether revaluation, deferred revenue and cost allocation run as part of the close, and how many people sign off each step. Setup work is largely one-time: the checklist, roles, accounts for the Period Closing Voucher and the locking rules. Recurring cost is the time your finance team spends each month running the checklist, which falls as the steps become routine. When you ask for a quote, request a line item for each of these components, and ask who is paid for configuration, testing and training, and who owns the checklist afterward.

How long does the first month-end or year-end close take in ERPNext?

The first close usually takes longer than later ones because the team is learning the steps, correcting opening balances and finding unreconciled items that earlier periods left open. Duration is driven by transaction volume, the state of bank reconciliation, the number of foreign-currency balances, the quality of master data such as accounts and cost centers, and how many approvals the close requires. A year-end close adds the Period Closing Voucher to retained earnings and any statutory adjustments your jurisdiction requires, so it tends to need more review than a monthly run. No duration is fixed by the software. Ask any partner to base its timeline on a walkthrough of your own ledgers and a written scope.

What must our finance and IT teams provide before the close is designed?

Finance has to supply the close calendar, the list of accounts that need reconciliation, the sign-off chain, and the accounting policies that drive adjustments such as accruals, depreciation and revaluation. IT has to supply the environment details: the ERPNext version, the hosting setup, user accounts or single sign-on mapping, backup schedules, and who is allowed to change system settings. Both teams should share a sample of closed periods, the current chart of accounts and any reports auditors have requested before. Ask the implementation partner to list these inputs in the written scope so that gaps show up before the first close rather than during it.

Can our in-house finance staff run the close in ERPNext after go-live?

Yes, if the close is documented, the roles are assigned and the staff have practiced the steps on a test copy. Most in-house teams can run routine monthly steps once they understand the checklist, the reconciliation tools and the order of operations. The areas that usually need outside help are the initial design, custom reports, scripts that change posting behavior, and the first year-end close. Be clear about who maintains the checklist when ERPNext releases new minor versions, because those releases can change behavior that the close depends on. A retainer can cover that ongoing work if your team does not have the capacity.

Can we control reopening of closed periods in ERPNext?

Yes. ERPNext offers two ways to stop postings into a closed period: Accounting Periods, which can be closed for a date range, and a frozen date, which blocks accounting entries before a chosen date for users outside a designated role. Reopening should be treated as a controlled change with a named approver, a written reason and a check that the Period Closing Voucher and related reports are recalculated afterward. Confirm the exact behavior of these settings for your ERPNext version and test that a user without permission cannot post into a locked period before you rely on it. Also confirm which roles can change the frozen date, because that permission is often broader than teams expect.

How do we check that the close is complete and the books are right?

Use a reconciliation checklist that ties each balance sheet account to a supporting report, such as bank statements, receivable and payable ageing, inventory valuation and fixed-asset registers. Confirm that the Trial Balance for the period agrees with the financial statements, that the Period Closing Voucher has posted the expected balance to retained earnings, and that no drafts remain in the period. Record each adjustment with a reason and a reviewer. Testing the checklist on a copy of production data before go-live is the most reliable way to find missing steps. Auditors or compliance assessors will ask for this evidence, and DeployOpen prepares systems and records for those assessments without issuing audit opinions.

Which parts of the close are standard ERPNext and which need custom work?

The standard tools cover the Period Closing Voucher, Accounting Periods, frozen dates, reconciliation tools and the main financial reports. Custom work usually appears when your policies need extra journals that the standard flows do not produce, when reports must follow a local statutory layout, or when a source system feeds the ledger and needs its own reconciliation. Before you commission custom work, confirm in your ERPNext version that the standard feature does not already meet the requirement, because custom code adds upgrade effort. Ask for the list of custom items and the upgrade test plan in the written scope.

How DeployOpen scopes and delivers the ERPNext close process

DeployOpen plans and builds the ERPNext month-end and year-end close around your own accounting calendar, controls and approvals, inside infrastructure you control. Engagements start with a written scope, so your finance and IT leads agree on what the close process will include before any configuration begins.

How we scope

  • Map your current close checklist, owners and sign-off steps to ERPNext periods and documents.
  • Define which reconciliations, adjustments and reports must be complete before a period is locked.
  • Agree in writing on the roles, approval rules and reopening authority the close will use.
  • Confirm which companies, currencies and multi-company features the close must cover.

How we build

  • Configure the Period Closing Voucher, retained earnings account and closing accounts for each company.
  • Set up Accounting Period locks or the frozen date according to your agreed close calendar.
  • Build role permissions so only named users can post into closed periods or reopen them.
  • Test a full close cycle on a non-production copy using your own sample transactions and expected balances.

How we hand over

  • Deliver a written close runbook covering the checklist, sequence, owners and exception handling.
  • Document the reopening rules, the audit trail for each reopening, and who approves each one.
  • Run a walkthrough with your finance team so they can execute the first live close themselves.
  • Provide configuration exports and a record of what was tested, so changes can be reviewed later.

How we support

  • Ongoing support, upgrades and testing are available as a retainer after handover.
  • Review close configuration when ERPNext versions are upgraded, using the release notes for your version.
  • Assess changes to chart of accounts, companies or currencies before they affect a live period.
  • Agree support hours and response expectations in the written retainer, not assumed by default.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.