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
| Field | Effect | Who can override |
|---|---|---|
Lock Date (period_lock_date) | Blocks all users from editing on/before this date | Accounting Manager group (account.group_account_manager) |
Tax Lock Date (tax_lock_date) | Blocks tax-affecting changes on/before this date | Same |
| Lock Date for Non-Advisers | Blocks non-advisor users only | Anyone in advisor group |
Recommended cadence
- 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;