Skip to main content

Lock Dates

Lock dates prevent users from editing or posting entries with dates on or before the lock date. They are the single most effective control against the date/sequence validation errors documented in the migration overview.

Navigation: Accounting → Settings → Fiscal Periods

The three lock fields

FieldEffectWho can override
Lock Date (period_lock_date)Blocks all users from editing on/before this dateAccounting Manager group (account.group_account_manager)
Tax Lock Date (tax_lock_date)Blocks tax-affecting changes on/before this dateSame
Lock Date for Non-AdvisersBlocks non-advisor users onlyAnyone in advisor group
  • Within 5 days of month-end: set Lock Date to last day of the now-closed month
  • After BIR returns are filed: set Tax Lock Date to match
  • Never roll lock dates backwards unless reversing a known incorrect close

Why lock dates prevent the validation error

Posted entries get a permanent name like MISC/2026/03/0033. If a user edits the entry's date to April (e.g., 2026-04-17) and saves, Odoo refuses with the validation error.

With March locked:

  • Non-advisors can't open the entry at all
  • Advisors can override but get an explicit warning
  • The error class becomes a deliberate manager action, not an accidental click

Implementing on Baywaters Corp.

# Via Odoo shell
company = env['res.company'].browse(1) # Baywaters Corp.
company.write({
'period_lock_date': '2026-03-31',
'tax_lock_date': '2026-02-29', # earlier if returns are pending
})
env.cr.commit()

Or via UI on the company record (Settings → Companies → Baywaters Corp.).

Per-company setup for branches

Each child company has independent lock dates. Once branch-specific journals exist (Phase 4), each branch's accounting lead is responsible for their own lock cadence.

A possible future improvement: a scheduled cron on the parent that propagates lock dates to all child companies on a fixed schedule. Not yet implemented.

Verifying lock dates are in effect

SELECT id, name, period_lock_date, tax_lock_date, fiscalyear_lock_date
FROM res_company
ORDER BY id;