Preventive Maintenance Schedules
Calendar-based recurring service, from one schedule covering a whole fleet down to per-asset parts.
On this page
The basics
Go to CMMS > PM Schedules and click + New PM Schedule. A schedule needs four things: a title, one or more assets/vehicles, a frequency, and a next due date. Optionally add a default assignee and a description of the work.
- Frequency — Daily, Weekly, Monthly, Quarterly, or Annual.
- Assets / Vehicles — one schedule can cover many. This is a real multi-select: use the combobox to add assets one at a time, and remove any of them later from the same field or from the schedule's Assets tab.
- Default Assignee — optional. Whoever you pick here is automatically assigned to every work order this schedule generates, on every asset.
- Instructions / Description — free text describing the maintenance tasks. It applies to all assets on the schedule; use per-asset parts (below) for anything that differs by asset.
Worked example: fleet-wide seasonal PM
Say you want one routine — "Spring Mower Tune-Up" — to hit all 8 mowers on the crew before the season starts, but the oil filter part number differs by mower model.
- Click + New PM Schedule, title it Spring Mower Tune-Up, set Frequency to Annual, and pick a Next Due Date (e.g. the target start-of-season date).
- In the Assets field, add all 8 mowers one at a time — the picker resets after each selection so you can keep adding without re-opening it. Each shows as a removable badge above the field.
- Add general instructions in the Description field (e.g. "Oil + filter change, blade sharpen/balance, air filter, spark plug, belt inspection, deck wash") — this text is shared by every mower on the schedule.
- Save the schedule, then open it and go to its Assets tab. Each mower is its own row; click a row to expand it and add that mower's specific parts with quantity and unit cost.
| Asset row | Oil filter part # | Unit cost |
|---|---|---|
| Mower #1 – Toro Z Master | Toro 100-3743 | $14.50 |
| Mower #2 – Toro Z Master | Toro 100-3743 | $14.50 |
| Mower #3 – Exmark Lazer Z | Exmark 116-2261 | $11.25 |
| Mower #4 – Exmark Lazer Z | Exmark 116-2261 | $11.25 |
| Mower #5 – Scag Turf Tiger | Scag 48069 | $16.00 |
| Mower #6 – Scag Turf Tiger | Scag 48069 | $16.00 |
| Mower #7 – Ferris IS 700 | Ferris 5021378 | $13.75 |
| Mower #8 – Ferris IS 700 | Ferris 5021378 | $13.75 |
One schedule, one due date, one generation click — but each mower's work order still carries the correct filter part number and cost for its own model.
How "due" is calculated
A PM schedule doesn't derive its due date from a separate start date — the Next Due Date field you set is the schedule's calendar. Every later cycle lands on that same cadence: a weekly schedule first due on a Wednesday is due every Wednesday. There's no background job silently recalculating it; the date only moves when work orders are generated, described below.
| Frequency | How the next due date advances |
|---|---|
| Daily | Every day. |
| Weekly | Every 7 days — the same weekday every week. |
| Monthly | Every calendar month, on the same day of the month (clamped to the month's last day when it's shorter). |
| Quarterly | Every 3 calendar months, same rule. |
| Annually | Every 12 calendar months, same rule. |
Generating work orders
Work orders aren't created automatically just because a date has passed — someone (or the PM Due Reminder automation, see below) generates them from the schedule. What gets created depends on how many assets are on the schedule:
- Single asset — one flat work order, with that asset attached directly.
- Multiple assets — one parent (master) work order plus a sub-work order per asset, each carrying its own asset and that asset's own parts. Parts from the schedule's Parts tab are shared, so they go on the master work order once (one stock deduction), not on every sub-work order.
Every generated work order is due on the schedule's Next Due Date — the date this PM was actually due, which is what on-time vs. late is judged against. The moment work orders are generated, Next Due moves to the next date on the schedule's cadence. Marking the resulting work order done doesn't separately move the date; generation is what advances it.
Generating late (or early)
Because the calendar keeps its cadence, generating on the "wrong" day doesn't shift the schedule:
- A week late. A weekly schedule due Wednesday, Sep 23 is generated on Sunday, Sep 27. The batch is due Sep 23 (so it counts as late, not missed, once it's done), and Next Due becomes Wednesday, Sep 30 — not the following Sunday. Finish the late batch, then generate Wednesday's as usual.
- Several weeks late. Generating creates one batch for the oldest missed week and moves Next Due to the next Wednesday from today. The weeks in between count as missed — generating late doesn't erase them.
- On the day the next one is due. Generating last week's batch on this Wednesday leaves this Wednesday due — it isn't skipped.
- Early. Generating Tuesday for a Wednesday PM makes the batch due Wednesday and moves Next Due one week past that.
Pausing a schedule (off-season)
Mowers don't need weekly service in January. Open the schedule and click Pause (next to Generate WOs). Choose when the pause starts and one of:
- A resume date — e.g. a truck parked for a month. The schedule runs again on that date.
- Until I resume it — open-ended. A Resume button replaces Pause while it's paused.
- Repeat every year — set Dec 1 → Apr 1 once and the schedule pauses every winter from then on. It needs a resume date and can't be longer than a year.
While a schedule is paused:
- Cycles that fall inside the pause aren't due — nothing is overdue and nothing counts against PM compliance.
- Generate WOs is disabled, and the PM Due alert and the PM Due Reminder automation skip it.
- The schedule shows Paused in the list and Paused until Apr 1 (or just Paused) in its header.
- When it resumes, the first PM due is the first date on its cadence after the pause — not a stale date from before it.
Every pause window is listed on the schedule's Details tab. Remove one with its × button — that removes the whole window, so removing a yearly pause removes it for every year.
PM compliance
Each asset's Performance cards and Equipt > Reports > PM Compliance score PMs against the schedule's calendar: every cycle whose due date has passed counts as done or missed — including cycles nobody generated. A multi-asset schedule counts once per asset. Paused cycles don't count at all.
For the exact rules — every outcome, and how meter-triggered PMs count — see Asset Performance, Warranties & Reliability Reports.
Parts, two levels
Parts show up on a PM schedule at two different levels — they serve different purposes:
| Level | Where | Use it for |
|---|---|---|
| Schedule-level | Parts tab on the schedule itself | Parts expected for the routine in general, shared across every asset on the schedule. On generation they land once on the master work order (or the lone work order of a single-asset schedule), with a single stock deduction. |
| Per-asset | Assets tab, expand a specific asset row | A parts template scoped to just that one asset — quantity and unit cost included. This is what gets copied onto that asset's own work order (or sub-work order) when the schedule generates, once per asset. |
Use per-asset parts whenever a mixed fleet needs different part numbers for the same routine — different oil filters, different belts — as in the worked example above.
Calendar-based vs. meter-based
A PM Schedule is calendar-based: it fires on a fixed cadence (weekly, monthly, etc.) regardless of how much the asset is actually used. Equipt's Automations (CMMS > Automations) can also trigger recurring maintenance from a Meter Threshold — engine hours, odometer miles, and similar values that accrue with usage on a cumulative meter — which is usage-based instead of date-based. (Level meters, like a fuel tank, only support “drops below” alerts, which aren't PM.)
They're independent mechanisms, and nothing stops you from using both on the same asset:
- A PM Schedule catches maintenance that should happen on a schedule no matter what — e.g. a seasonal tune-up before spring, regardless of hours logged.
- A meter-threshold automation catches maintenance that should happen based on wear — e.g. an oil change every 200 engine hours, whether that takes two weeks or two months depending on how busy the crew is.
- Running both on the same asset (e.g. a mower) means whichever condition is met first — the calendar date or the meter value — is what triggers that particular maintenance event. They don't coordinate with or cancel each other.
Notifications
- PM schedules due within 7 days surface in the Notifications bell as "PM Due" alerts — except schedules that are paused today.
- The PM Due Reminder automation template (CMMS > Automations) can also generate a work order automatically ahead of the due date, instead of waiting for someone to click Generate manually.
- Marking the resulting work order complete is the normal way a PM schedule's cycle closes out day to day — but remember it's generating the work order, not completing it, that actually advances the schedule's next due date.
Gotchas
- No assets, no generation. A schedule with zero linked assets can be saved as a draft-like shell, but generating work orders from it is blocked until at least one asset is added.
- Frequency values differ slightly by context. PM Schedules use
annualfor a yearly cadence; the similarly-named recurring-work-order frequency elsewhere in CMMS usesyearlyplus abiweeklyoption that PM Schedules don't have. They're not the same field — don't assume one implies the other. - Inactive vs. Paused. Older schedules may show Inactive — a legacy flag with no dates behind it. Inactive schedules don't pile up missed PMs going forward, but use Pause instead: it records when the schedule was off, so the history stays right.
- Removing an asset from a schedule only affects future generations — it doesn't retroactively touch work orders already created from that schedule.
- Parts on generation deduct inventory immediately. Any per-asset part with a linked inventory part is deducted from
quantity_on_handthe moment work orders are generated, not when the work order is later marked done.