Work order fields and statuses
Every field, status, priority, and export column on a maintenance work order.
A maintenance work order is one record. A request from the floor, a planned job, and a recurring preventive maintenance schedule are all the same object with different fields filled in, which is why one field list covers all three. See Overview: maintenance management.
Only two fields are required: Title and Group. Everything else can stay empty, and nearly everything else can be changed later from the work-order drawer.
Looking for production job fields?
Those are on Job and scheduler fields. Production tasks and maintenance work orders share one API and the same five statuses, and little else: a maintenance work order carries a group, a checklist, and a recurrence, while a production task carries an operation, a part, a quantity, and work sessions.
Fields
Required means the Create button stays disabled until the field has a value. Inline editable means you can change the value in place in the work-order drawer, with no Save step. In CSV is the maintenance table export, listed column by column under CSV export columns.
| Field | Type | Required | Inline editable | In CSV |
|---|---|---|---|---|
| WO # | Number, assigned by IoTFlows | Automatic | No | Yes, as WO # |
| Title | One line of text | Yes | Yes, the large text at the top of the drawer | Yes |
| Description | Rich text, with its own file attachments | No | Yes | Yes, with formatting stripped |
| Group | One maintenance group, created inline if none fits | Yes | Yes | Yes |
| Status | One of five | Starts at Open | Yes, from the status row | Yes |
| Priority | One entry from the platform's priority list | No | Yes, from the chip above the title | Yes |
| Asset | One machine | No | Yes | Yes |
| Assignees | People and teams | No | Yes, as many as you need | Yes, as Assigned To |
| Due date | Date, time, and the timezone it is read in | No | Yes | Yes, as Due Date |
| Recurrence | A repeat rule anchored to the due date | No | Yes | Yes, as Recurrence |
| Time estimate | Minutes, typed as 2h, 30m, or 1.5d | No | No, set at create only | Yes, as Estimated Time (min) |
| Notes | Plain text | No | Yes | Yes |
| Parts Required | Inventory lines, each a part and a quantity | No | Yes | No |
| Create/Release Parts | Inventory lines | No | Yes | No |
| Checklist | Tickable steps, independent of the status | No | Yes | No |
| Images | Pictures, converted to WebP on upload | No | Yes | No |
| Attached Files | Anything that is not an image | No | Yes | No |
| Comments | A chat room attached to the work order | No | Yes | No |
| Requested By | The person who created it | Automatic | No | Yes |
| Created At | Timestamp | Automatic | No | Yes |
| Last Updated | Timestamp, moved by any edit | Automatic | No | Yes |
Three things about that table are worth saying in sentences.
The time estimate is a create-time field. The create modal asks for it, and the maintenance drawer shows it as plain text with no way in, so a work order created with the wrong estimate keeps it. The same field is editable on a production task, in the scheduler's drawer.
A group is required, and a fresh organization has none. The first work order you create forces you to name a group before anything else. See Group.
Recurrence is a rule, not an object. There is no separate preventive maintenance record: the rule lives on the work order and fires from its due date. See Schedule preventive maintenance.
Statuses
Five statuses, in the order the work is meant to move through them. Nothing enforces that order: any status can go to any other, including reopening a closed work order. The flow, and what each transition does, is in The status flow.
| Status | Means | Drawer button | In CSV | Next states |
|---|---|---|---|---|
| Open | Created, not started. Every work order lands here, whichever origin created it | Not Started | Not Started | Any |
| In Progress | Somebody is working on it now | In Progress | In Progress | Any |
| On Hold | Started and blocked. It keeps its assignee and stays on the board | On Hold | On Hold | Any |
| Done | The work is finished. Moves stock if the work order lists parts | Completed | Completed | Any, including back to In Progress |
| Approved | Signed off, after the work was done | Approved | Approved | Any |
Why does the CSV say Not Started when the board says Open?
The export renames two statuses on the way out. Open is written Not Started and Done is written Completed, which matches the drawer's buttons rather than the board card, the status filter, or a report. If you pivot an export by status, filter on the CSV spellings in the table above, not the ones on screen.
Priorities
Priority is a colored label. It does not sort the board, does not change what the completion dialog moves, and triggers nothing automatically.
The list is the platform's, not your organization's. It arrives from IoTFlows with a name and two colors, one for light mode and one for dark, and Maintain has no editor for it, so you cannot add a priority or rename one.
Two behaviors surprise people:
- The create modal preselects the first priority in the list and hides its label while it is selected. A work order where nobody touched the priority chip carries that first priority, not an empty one.
- The drawer's chip only appears when the work order has a priority. A work order created by an automatic origin, from a classified downtime or a meter reaching its trigger point, can arrive with none, and then there is no chip above the title until you set one.
You do not need a priority on every work order. Set one when the board is long enough that a technician has to choose what to pick up next, and leave it alone on a board where the due dates already say that.
CSV export columns
The CSV button in Table view writes maintenance-tasks- and today's date. Fifteen columns are available. Four are always exported, six more ship visible, and the other five are ones you turn on in the column picker.
The export follows the table, not this list. It writes the columns the table is showing, in the order you dragged them, so a default download is 10 of the 15. The numbering below is the default order.
| No. | Column header | Source field | Always exported |
|---|---|---|---|
| 1 | WO # | workorder_number | Yes |
| 2 | Title | workorder_title | Yes |
| 3 | Assigned To | assigned_to_users, assigned_to_teams | Yes |
| 4 | Asset | workorder_asset | Yes |
| 5 | Group | workorder_group.group_name | No, visible by default |
| 6 | Status | workorder_status_uuid | No, visible by default |
| 7 | Priority | workorder_priority.workorder_priority_name | No, visible by default |
| 8 | Due Date | workorder_due_timestamptz | No, visible by default |
| 9 | Recurrence | workorder_recurrence_description | No, visible by default |
| 10 | Description | workorder_description | No |
| 11 | Estimated Time (min) | workorder_duration_min | No |
| 12 | Requested By | created_by_user | No |
| 13 | Notes | workorder_notes | No |
| 14 | Last Updated | workorder_updated_at | No, visible by default |
| 15 | Created At | workorder_created_at | No |
How the values are written:
- WO # carries the hash, for example
#148, so a spreadsheet reads it as text rather than a number. - Assigned To lists people's full names first, then team names, comma separated. A placeholder account named
Unnamedis skipped. - Asset is the machine's custom name, falling back to its catalog model name when it has none.
- Due Date, Last Updated, and Created At are full UTC timestamps, for example
2026-09-18T14:00:00.000Z, not the local time the card shows. - Description and Notes have their formatting stripped to plain text.
- Recurrence is the sentence the server writes for the rule, for example
Every 2 weeks on Mon, Thu, not the individual rule fields. - Estimated Time (min) is a plain number of minutes. An empty cell means no estimate was set, or that an unparseable one was discarded at create time.
Parts, checklist items, attachments, and comments have no column. Nothing in the maintenance export carries them, so a checklist is readable only in the drawer. For every other export in the product, see Exports reference.
What is stored per device
Maintain keeps your view preferences in this browser, on this device. None of them are sent to IoTFlows, so they do not follow you to a second computer or to the phone, and they change nothing for anybody else looking at the same board.
| Preference | Where you set it | Default |
|---|---|---|
| Table columns and their order | The column picker in Table view | The four always-on columns plus Group, Status, Priority, Due Date, Recurrence, Last Updated |
| Kanban card fields | Card fields in Kanban | Everything except Description and Due Date |
| Drawer Properties fields | The gear beside Properties | All ten except Last Updated |
| Density | The Compact view / Large view toggle, per view | List and Table compact, Kanban large |
| Last view and last grouping | Selecting a view or a grouping | To do, grouped by asset |
Two consequences follow. Two people export different files from the same board, because the export reads the table columns and each person's are their own, so agree the columns before comparing files. And clearing your browser data resets all five, which is the fastest way back to the defaults above if a board has drifted.
Hiding a field hides the row, never the value. A hidden Notes row still holds its text, and a column turned off in the table is still on the work order.
See also
- Update, discuss, and close a work order, where most of these fields are edited
- Create a maintenance work order, where they are first set
- Organize work on the maintenance board, the table these columns come from
- Exports reference, every other CSV and PDF in the product
- Job and scheduler fields, the same reference for production tasks

