This module extends the functionality of Odoo Maintenance module by allowing an equipment to have different preventive maintenance kinds.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Lets you set up recurring preventive maintenance plans per equipment, with a maintenance kind, frequency and planning horizon, and automatically creates the maintenance requests on schedule.
This module adds a proper preventive maintenance planning layer on top of Odoo Maintenance. You define maintenance kinds (for example Monthly or Weekly) and maintenance plans, each attached to an equipment, with a kind, a frequency and recurrence step (days, weeks, months or years), a duration in hours, a start date and a planning horizon.
Where it appears: - A new "Maintenance Plans" menu under Maintenance, plus a "Maintenance Kinds" entry in the Maintenance configuration menu. - On the equipment form, a "Plans" smart button and a list of its plans. - On maintenance requests, new "Maintenance Kind" and "Maintenance Plan" fields, and the plan's text instructions are printed on the request report.
Automatic behaviour: - A daily scheduled action generates preventive maintenance requests for each plan, up to the planning horizon, skipping dates in the past. - A "Generate requests for current threshold" button on the plan does the same on demand. - The next maintenance date is computed from open or past requests. - A plan can apply to many equipments through a filter instead of a single equipment. - Followers are not notified when requests are generated, unless you untick the option.
Business rules: the same kind cannot be defined twice for one equipment, a plan cannot be deleted while it has unfinished preventive requests, and plan and equipment must belong to the same company. Only maintenance managers can create or edit plans and kinds; regular users can read them.
Depends on
Required by other modules
Menus it adds
Models and fields (5)
- maintenance.kind · new modelname, active (Active Kind)
- maintenance.plan · new modelname (Description), active, duration (Duration (hours)), interval (Frequency), company_id, equipment_id (Equipment), interval_step (Recurrence), planning_step (Planning Horizon step), generate_domain (Apply on), instruction_pdf (PDF), maintenance_ids (Maintenance requests), instruction_text (Text), instruction_type (Instruction), maintenance_count (Maintenance), maintenance_kind_id (Maintenance Kind), maintenance_team_id, search_equipment_id, generate_with_domain, next_maintenance_date, maintenance_open_count (Current Maintenance), start_maintenance_date, instruction_google_slide (Google Slide), maintenance_plan_horizon (Planning Horizon period), skip_notify_follower_on_requests (Do not notify to follower when creating requests?)
- maintenance.request · extends an existing modelmaintenance_kind_id (Maintenance Kind), maintenance_plan_id (Maintenance Plan)
- res.config.settings · extends an existing modelmodule_maintenance_plan_only (Hide built-in recurrent settings)
- maintenance.equipment · extends an existing modelmaintenance_plan_ids (Maintenance Plan), maintenance_plan_count, maintenance_team_required, search_maintenance_plan_count (Maintenance All Plan Count)
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 8 confirmed, 1 with no information of 9 versions.
Sources · Odoo 19.0
Confirmed on 2026-11-03 in branch 19.0 of OCA/maintenance.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0Install the module.
Should you already use the maintenance module and have equipments with field 'Preventive Maintenance Frequency' defined, a new maintenance plan will be automatically created on these equipments with maintenance kind 'Install'.
Moreover if a Request of type 'preventive' exists, whose stage isn't marked as 'Request done', and has a Request Date matching the equipment's 'Next Preventive Maintenance', the request will be updated with the 'Install' maintenance kind.
Make sure you don't have multiple 'preventive' requests at a stage which isn't marked as 'Request done' and on the same 'Request date' as the equipment or the module installation will fail with a User Error.
Usage
Source · Odoo 19.0Instead of defining a period and duration for only one preventive maintenance per equipment, you can define multiple preventive maintenance kind for each equipment.
Maintenance Kinds have to be defined through the configuration menu. Their name have to be unique and can be set as active or inactive, should these not be used anymore.
On any equipment over the maintenance tab, the maintenance plan be accessible, allowing to add different maintenance kind with their own frequency and duration. The next maintenance date will then be computed automatically according to the start's date and the frequency defined, but the maintenance request won't be created automatically as is the case in Odoo's Maintenance module. In the plan there's also a field allowing the user to set the maintenance horizon, insert the instructions to follow on the maintenance that will be forwarded to the maintenance request generated from the plan.
This module uses the original Cron job of Odoo's Maintenance module to generate maintenance requests. To do so, it takes into account the planning horizon and generates all maintenance requests whose schedule date would fall inside that planning horizon. Therefore, the maintenance manager can have a proper planning of how many maintenance requests are programming for the future. Leaving planning horizon to 0 will only create those maintenance request that are scheduled for today.
We can also create maintenance requests from a plan using a domain for selecting the equipments. This way, we might have a single plan that will generate all the requests. In order to use it, we need to mark the Generate with Domain field.
No verified information in OCA: Configuration.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.