Leave Request Rules - Notice, Carry-over & Blackout
Enforce statutory advance-notice, carry-over expiry and blackout-period rules on every Time Off request
Leave Request Rules adds a configurable validation layer on top of the Odoo Time Off engine. Whenever an employee creates, edits, confirms or has a leave request approved, the module checks it against three independent policy rules - minimum advance notice, carry-over expiry and blackout periods - and either blocks the request with a clear explanation or lets it through while logging the violation, depending on your enforcement mode. Built entirely on the Community Human Resources and Time Off apps; no Enterprise payroll required. Compatible with Odoo 18 and Odoo 19.
Minimum advance notice
Require employees to announce ordinary leave a minimum number of days before it begins. Notice is measured from the day the request was filed and can be counted in calendar days or working (Mon-Fri) days. An optional escalation requires longer notice for long absences (for example, 30 days' notice for any leave of 10 days or more). Unforeseeable leave types - sickness, emergency, bereavement - are flagged exempt and never need advance notice.
Carry-over expiry
Mark a leave type as drawing on the prior year's carried-over balance and the module enforces a use-it-or-lose-it grace window. A request dated after the carry-over deadline (configurable, e.g. 31 March) is rejected because the carried leave has lapsed; a request that starts in time but ends after the deadline is flagged for its expired tail; and a request larger than the remaining carried balance is caught too.
Blackout periods
Embargo leave during operationally critical windows - year-end close, inventory counts, peak season, statutory reporting periods. A blackout period can be a hard embargo (no leave at all) or a capacity cap (a maximum number of employees on leave at once). Scope each window to the whole company or to chosen departments and leave types, and exempt leave types (such as statutory sick leave) that may always be taken.
Block or warn
Choose how strict you want to be. In block mode a non-compliant request is rejected with a clear, itemised explanation. In warn mode the request is allowed but every violation is recorded on the request's log so the approver still sees it. Every rule can be switched on or off independently, per company.
What the module does
| Rule | What it checks | Configuration |
|---|---|---|
| Advance notice | Days between submission and leave start vs. the required minimum, with optional long-leave escalation and per-type exemptions. | Company default + per leave-type minimum, calendar/working basis. |
| Carry-over expiry | Whether a carry-over leave falls inside the grace window and within the available carried balance. | Deadline month/day; per leave-type "draws on carried-over leave". |
| Blackout period | Overlap with an embargoed window; hard block or concurrent-leaver capacity cap. | Date range, mode, max concurrent, department & leave-type scope. |
| Compliance scan | Audits existing requests in a date range and reports every rule violation without modifying anything. | Date range, approved-only toggle. |
Highlights
- Validation fires on create, edit, confirm and approve - no way around it.
- Country-neutral: every threshold (notice days, deadline, caps) is your configuration; nothing is hard-coded to one jurisdiction.
- Pure-Python rule engine, fully unit-tested, with a thin Odoo model layer.
- Capacity caps count real, already-approved leaves of the relevant department.
- Read-only compliance scan to audit historical requests after a policy change.
- Community-only dependencies (
hr,hr_holidays); no Enterprise modules required.
Screenshots
Blackout Periods
Compliance Scan
Settings
Update date: 2026-07-02