IanaiERP
Log InGet Started

The AI Driven ERP Solution

IanaiERP

IanaiERP is not just another ERP system. It is an AI-driven operational platform designed for modern manufacturing, wholesale, and eCommerce businesses.

Platform

  • Platform Overview
  • Inventory
  • Manufacturing
  • Sales & Fulfillment
  • Procurement
  • Finance
  • CRM
  • Integrations
  • Reporting

Industries

  • Manufacturing
  • Wholesale & Distribution
  • Food & Beverage
  • Cosmetics & Skincare
  • Biopharmaceutical
  • Fashion & Apparel

Resources

  • About Us
  • Case Studies
  • Blog
  • FAQ
  • User Guide
  • Contact

Contact

  • Address

    1440 N Lakeview Ave
    Anaheim, CA 92807

    Get Directions
  • Emailinfo@ianaierp.com

© 2026 IanaiERP. IanaiERP. All rights reserved.

Privacy PolicyTerms of ServiceLicense
Preventive Maintenance

Guides

⌘K

getting-started

  • Intro - ianai Total ERP SolutionPopular
  • Settings / Preferences
  • Dashboard (List View) & Reports
  • Data Import/Export

inventory

  • ItemPopular
  • Inventory Adjustment
  • Inventory Transfer
  • Lot Tracking
  • Bin Tracking
  • Item Options and Dynamic Templates
  • Serial Tracking

manufacturing

  • Bill of Materials (BOM)
  • Build
  • Routing
  • Work Orders
  • Work Plan
  • BOM Rule
  • Advanced Manufacturing

purchase

  • Procurement Workflow
  • Vendor
  • Purchase Order
  • Item Receipt
  • Blanket Purchase Order

sales

  • Sales Workflow
  • Customer
  • Estimate
  • Sales Order / Payment
  • Price Rule
  • Blanket Sales Order
  • Work Centers

shipping

  • Shipment
  • Shipping, Label Printing, and Tracking
  • Carrier Integrations
  • Ship Method Mapping
  • Rule-Based Automation
  • International Shipping
  • Third-Party Billing
  • ianaiERP Bridge
  • Troubleshooting Shipping Issues
  • USPS Cubic Rates in ianaiERP
  • USPS Pricing

return

  • Returns

miscellaneous-setup

  • Miscellaneous

customization

  • Custom Field
  • Custom Script
  • Vendor-Item Catalog
  • Units of Measure (UOM)

integration

  • Quickbooks Online Integration
  • Bigcommerce Integration
  • Shopify Integration

accounting

  • Journal
  • Transfer Funds
  • Bank Deposit
  • Expense
  • Chart of Accounts

equipment

  • Introduction
  • Equipment Hub
  • Work Centers for CAPA
  • Asset Management
  • Preventive Maintenance
  • Maintenance Events
  • Spare Parts & Consumables
  • Capacity Planner
  • Runtime Status
  • Permissions & Modules
DocsPreventive Maintenance

Preventive Maintenance

A Maintenance Schedule is a recurring plan that defines what maintenance to do, when to do it next, and whether the system should auto-generate a maintenance event when it comes due. A schedule fires repeatedly over the life of the asset; each firing creates a MaintenanceEvent row that captures the actual work.

This page covers PM scheduling — the planned, recurring side. For unplanned breakdowns and event logging, see Maintenance Events.

Where it lives

  • Create / list: Maintenance Hub at /equipment/maintenance → PM Schedule tab → + New PM Plan.
  • Edit: click any schedule row.
  • One-click complete: any schedule whose next_due_at is within 7 days appears on the Equipment Hub's "Today's PM Schedule" widget with an inline Mark Done popover.
  • Permissions: maintenance_read to view, maintenance_write to create/edit/mark done.

The PM form

Basics

FieldNotes
NameHuman-readable label ("Weekly Press Inspection", "200hr Filter Change")
DescriptionFree-text. Use it to summarize the task. The full task list lives below in Tasks.
AssetThe asset this schedule applies to. Required.
Assigned toOperator / technician responsible. Optional. Drives the recipient of maintenance_due notifications.

Trigger configuration

A Schedule Type segmented control picks one of three trigger modes. The fields below it change based on the choice.

CALENDAR

Recurs on a fixed time cadence.

FieldNotes
IntervalNumber (1, 2, 6, etc.)
UnitDays / Weeks / Months
Next atDate the first/next event fires. Auto-rolls forward by interval after each completion.

Example: "Weekly Press Inspection" → Interval 1, Unit Weeks. After each completed event, next_due_at rolls forward 7 days.

RUNTIME_HOURS

Recurs based on the asset's total_operating_hours counter.

FieldNotes
IntervalHours between services (e.g. 500)
Trigger atAbsolute hour reading at which the next event fires (e.g. 1500 means fire when the asset reaches 1500 running hours).

Example: "500hr Oil Change". If the asset is at 1023 hours and the interval is 500, set trigger_at_value = 1500. The cron checks daily; when asset.total_operating_hours >= 1500, it generates the event. On completion, trigger_at_value advances to 2000.

v1 limitation: total_operating_hours is manually updated. Until MFI/PLC integration ships, runtime-based PM is only as accurate as the meter readings the operators enter.

CYCLE_COUNT

Same pattern as RUNTIME_HOURS but counted in production cycles instead of hours. Use this when wear is more closely correlated with shots / sheets / strokes than wall-clock running time.

Tasks (checklist)

Optional list of discrete steps the technician should complete. Each row has:

  • seq — display order
  • label — what to do ("Inspect belt tension", "Replace filter A")
  • done — checkbox the technician ticks during the event
  • notes — free-text observations per step

The checklist is stored as JSON on the schedule and copied onto each generated MaintenanceEvent so the technician's checkboxes are scoped to that occurrence. Edits to the schedule's task list don't retroactively change in-progress events.

Use task lists for procedures that have multiple steps; skip them for "go inspect the thing" entries.

Notification

auto_generate_event

When true, the daily 08:00 cron auto-creates a SCHEDULED MaintenanceEvent for any schedule whose next_due_at falls within the next 7 days. When false, the schedule shows up in alerts but a human has to manually create the event from the schedule row.

Most teams want this on — it surfaces the work as a real task in the events tab rather than just an alert that gets dismissed.

One-click Mark Done

For routine PMs, the full event-logging modal is too much friction. The Equipment Hub's "Today's PM Schedule" widget gives each due schedule a Mark Done popover with just two fields:

  • Optional notes (e.g. "Replaced filter; belt tension fine")
  • Save

Clicking Save does all of this in one round-trip:

  1. Creates a MaintenanceEvent (type PM, status COMPLETE, started_at = ended_at = now).
  2. Posts an AssetTransaction of type MAINTENANCE linked to the event.
  3. Updates the schedule's last_done_at to now and advances next_due_at by the configured interval.
  4. Fires a maintenance_completed SSE event so the hub updates instantly.

For non-routine maintenance (root cause analysis, parts used, real downtime to record), use the full event modal — see Maintenance Events.

Cron behavior

ScheduleCronWhat it does
support-ms 08:00 daily0 8 * * *Scans MaintenanceSchedule rows. Fires maintenance_due for any within the next 7 days. Fires maintenance_overdue for any past due. If auto_generate_event=true, creates a SCHEDULED MaintenanceEvent.
support-ms 5-min*/5 * * * *Recomputes asset and WC runtime_status rollup — affects what shows on the hub but not directly PM.

maintenance_due / maintenance_overdue events appear in the Equipment Hub's Alerts Feed and (when configured) notify the assigned_workforce.

Setup recipe

A pragmatic starter set for a press line:

ScheduleAssetTypeIntervalAuto-generate
Daily startup checklistHeidelberg Press 1CALENDAR1 Daysyes
Weekly press inspectionHeidelberg Press 1CALENDAR1 Weeksyes
500hr oil changeHeidelberg Press 1RUNTIME_HOURS500 hrsyes
2000hr full serviceHeidelberg Press 1RUNTIME_HOURS2000 hrsyes
Monthly belt inspectionFolder Unit 7CALENDAR1 Monthsyes

Add task checklists to the longer-running ones (full service); skip checklists for one-step PMs (daily startup).

Troubleshooting

SymptomLikely cause
next_due_at doesn't update after Mark DoneMutation hit the backend but failed silently. Open browser devtools → Network tab → check the POST /maintenance/schedule/:id/mark-done response.
Auto-generated event has no checklistThe schedule was created without one. Edit the schedule, add tasks, save — future events will have them. Past events keep their original (empty) checklist.
maintenance_due alerts never firesupport-ms cron isn't running, OR the schedule's active flag is false, OR auto_generate_event is true and the event was already created earlier (the alert dedupes on schedule_id within the scan window).
RUNTIME_HOURS PM doesn't firetotal_operating_hours hasn't reached trigger_at_value. Update the asset's operating-hours field (operator entry or UpdateAssetRuntimeStatus RPC).
Mark Done doesn't show for an overdue PMThe schedule is active=false.

Related

  • Maintenance Events — what happens when a schedule fires (or unplanned work occurs)
  • Asset Management — where total_operating_hours lives
  • Equipment Hub — Today's PM Schedule widget
  • Spare Parts — link parts the PM will consume
PreviousAsset ManagementNext Maintenance Events

Still have questions?

Our support team is just a click away.

Create a support ticketGet in touch