Actions and results
What each Maintenance button and automatic behaviour does, with worked numbers and what the system refuses.
On this page (37)
AssetsAsset 360Report an IssueRequest recordNew Work OrderWork orderWork order > TasksWork order > LaborWork order > PartsWork Orders listDowntimePreventive MaintenancePlan recordMeter-Based PlansMaintenance CalendarWorkloadLog Meter ReadingAlert RulesMetersIoT SensorsInspectionsInspection recordCalibrationContracts (AMC)VendorsMaintenance CostsWork order > CostsAsset Lifecycle CostReportsDashboardConfigurationConfiguration listsTechniciansMaintenance SettingsApplications > Maintenance > FeaturesApplications > Maintenance > FieldsActivity
Assets
| Action | When | What you do | What happens |
|---|---|---|---|
| Create an asset with an automatic code | maintenance.edit | Assets > New Asset; leave Asset Code empty; name 'Test Chiller 1', type HVAC, criticality High; Create | Asset AST-00000n created (count + 1, skipping taken codes), status Active; Asset 360 opens; History 'Asset created' |
| Duplicate code refused (case-insensitive by upper-casing) | An asset HVAC-DXB-001 | New Asset with code 'hvac-dxb-001' | Refused 'Another asset already has that code.' (codes are stored in capitals) |
| Filters and search | Assets of several types and statuses | Filter Type = HVAC, Status = 'Down (not working)'; search part of a serial number | Down = Under Maintenance + Breakdown + Out of Service only; search matches code, name, serial, barcode, manufacturer, model |
Asset 360
| Action | When | What you do | What happens |
|---|---|---|---|
| Edit and save with a revision check | Asset open in two tabs | Tab 1: Edit, change Model, Save. Tab 2: Edit, change Name, Save | Tab 1 saves; tab 2 refused 'Someone else changed this asset. Reload it and try again.' |
| Hierarchy and roll-up | Parent 'Line 1' with child 'Motor M1' | Record a 500 AED labour cost on a Motor M1 job; open Line 1 | Line 1 Total Cost (YTD) includes the 500; Open WOs, downtime and failures include the child's; path shows Location > Line 1 > Motor M1 on the child |
| Refuse a hierarchy loop | Line 1 > Motor M1 | Edit Line 1, Parent Asset = Motor M1, Save | Refused 'An asset cannot sit under itself or its own child.' |
| QR code, scan and print card | Generate QR; on My Work type the asset code (or 'a2n:asset:<company>:<code>', the barcode, or the NFC tag) and Open Asset; Print Asset Card | QR encodes a2n:asset:<company>:<code>; scan opens the asset; unknown code -> 'Asset not found.'; empty -> 'Scan or type the code.' | |
| Key metrics arithmetic | Asset installed 1 Jan; one repair WO started 10:00 finished 13:00 (3 h); 6 h unplanned downtime; 1 failure | Read Key Metrics | MTTR 3.0 h; availability = (hours since 1 Jan - 6) / hours since 1 Jan x 100; MTBF = hours since 1 Jan / 1; Due Soon counts plans due within the Settings window (14 days) |
| Warranty state | Add warranty ending today + 30 days; then one ending yesterday on another asset | First shows Expiring (within 60 days), second Expired; Create Warranty Claim offered only while Valid / Expiring | |
| Maintenance Assistant | Asset with 2 ELEC failures 40 days apart | More > Maintenance Assistant | Failure history, 'Recurring fault' (same code within 90 days), next-failure risk, abnormal readings, suggested parts; cost estimate only with cost.view; each answer lists its evidence |
| New child asset | More > New Child Asset; name 'Fan motor'; Create | Child created under this asset with its location; opens; parent's counts include it | |
| Add meters | maintenance.edit | Add Meter Operating Hours; then add it again | Meter with unit h, counter; second refused 'This asset already has that meter.' |
| Warranty claim | Valid warranty | Create Warranty Claim: ref, amount 2400 | Claim WCL-0000n Draft, filed today; Warranty card shows the claim reference; listed under Warranty > Claims |
Report an Issue
| Action | When | What you do | What happens |
|---|---|---|---|
| Report a request | maintenance.request.create | Report Issue; asset CHL-001; issue 'Chiller tripping'; Submit Request | Request MR-00000n, status New, source Manual, requested by you, location copied from the asset; History 'Request created' |
| Breakdown request takes the asset down | Asset Active | Report Issue with type Breakdown on the asset | Asset status becomes Breakdown at once ('reported in MR-...'); Assets Down tile +1 |
| Double submit is one request | Slow network | Click Submit Request twice quickly (same client id) | Only one request is created |
Request record
| Action | When | What you do | What happens |
|---|---|---|---|
| Review then approve | Request New; user with request.approve | Review; then Approve | New -> Review -> Approved; decided by/at shown; History 'Review', 'Approval' |
| Approval needs an asset | Request with no asset | Approve | Refused 'Say which asset it is about before approving it.' |
| Reject with a reason | Request New / Review / Approved | Reject; leave reason empty; then give a reason | Empty refused 'Say why it is rejected.'; with reason status Rejected; Close then offered |
| Convert to a work order | Request Approved, asset set | Create Work Order; technician chosen; Create | New WO in Draft with the technician set and notified; issue, description, priority, type and source copied, source ref = MR number; request status Work Order Created linked to it |
| Convert without approval when the company allows it | Settings: requests need approval OFF | Open a New request; Create Work Order | Hint 'This company does not require approval...'; WO created directly. With the setting ON a New request -> 'Approve the request before making a work order from it.' |
| Closing the job closes the request | Converted request | Complete and Close the work order | Request moves to Closed automatically ('with WO-...') |
| Decided request is read-only | Request Approved | (API) PUT the request to change the issue | Refused 'A request is changed only before it is decided.' |
New Work Order
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a work order | maintenance.workorder.create | New Work Order; asset CHL-001; issue; type Corrective; no technician; Create | WO-00000n in Draft; criticality, branch, cost centre, project, team copied from the asset; History 'Work order created' |
Work order
| Action | When | What you do | What happens |
|---|---|---|---|
| Approve | Draft; request.approve | More > Approve | Draft -> Approved |
| Approval switch blocks drafts | Settings: work orders need approval ON; Draft WO | Schedule, Assign, Start | Refused 'Approve the work order before scheduling it.' / '...before assigning it.' / '...before starting it.' |
| Schedule | workorder.assign | More > Schedule; start 05 Oct 08:00, finish 12:00 | Status Scheduled; shows on the calendar; finish before start refused 'It cannot finish before it starts.' |
| Assign notifies the technician | Technician linked to a user | Assign; choose the technician | Status Assigned; that user's bell shows 'WO-... assigned to you' |
| Start | Assigned WO on an Active asset; workorder.start | Start | Status In Progress; actual start stamped; a labour segment opens for the technician at his rate; asset -> Under Maintenance; a downtime period opens (planned for preventive types, unplanned 'BREAKDOWN' for repairs) |
| Start needs a technician | Scheduled WO without technician | Start | Refused 'Assign a technician before starting.' |
| Breakdown request downtime attaches to the job | Asset in Breakdown with a running downtime from a manual record | Start the job | No second downtime opens; the running one is linked to this work order |
| Pause and resume: waiting time is not worked time | In Progress since 09:00; technician rate 80 AED/h | At 10:30 Pause (reason 'permit'); at 11:30 Resume; at 12:00 Complete | Two labour segments: 1.50 h = 120.00 AED and 0.50 h = 40.00 AED; labour cost 160.00; the hour on hold is not paid; downtime runs the whole 3 h |
| Waiting for parts / vendor | In Progress | More > Waiting for Parts; then Waiting for Vendor; then Resume | Labour segment closed each time; status Waiting Parts -> Waiting Vendor -> In Progress; Waiting Parts / Waiting Vendor tiles count it |
| Reassign while working | In Progress with technician A | Assign technician B | A's segment closes and is costed; a new segment opens for B |
| Complete needs tasks done or skipped | WO with 3 tasks, 1 Open | Complete | Refused '1 task(s) are still open. Finish or skip them first.' |
| Repair needs a failure | Corrective WO with no failure | Complete without choosing a failure code | Refused 'Record what failed (failure code and cause) before completing a repair.'; with failure code ELEC it completes and the failure is saved |
| Complete | In Progress; all tasks done | Complete with notes, signature 'Test Supervisor' | Status Completed; actual finish stamped; open labour and downtime closed and costed; reservations released; asset back to Active; plan job moves the plan on |
| Downtime cost at completion | Settings downtime rate 500 AED/h; job ran 2.5 h | Complete | Downtime 2.50 h costs 1250.00 AED in the ledger (category downtime) and in the WO Other cost; WO downtime hours 2.5 |
| Close | Completed; workorder.close | Close | Status Closed, closed by/at; costs final: adding a cost now -> 'A closed work order's costs are final. Reopen it first.' |
| Close needs costs when switched on | Settings close-needs-costs ON; Completed WO with 0 cost | Close | Refused 'This company closes a job only with its costs recorded.' |
| Reopen | Completed or Closed; workorder.complete | More > Reopen with reason | Status In Progress, reopen count +1, closed by/at cleared, a labour segment opens. Without reason -> 'Say why it is reopened.' |
| Cancel | Assigned WO | More > Cancel Work Order with reason | Status Cancelled; reservations released; asset back to Active if it was Under Maintenance; plan link freed so the plan can generate again |
| Cancel refused with issued parts | WO with 2 parts issued, not returned (Waiting Parts) | Cancel | Refused 'Return the issued parts before cancelling.' |
| Cancel not offered while In Progress | In Progress WO | Look for Cancel; via API post cancel | Not in the menu; API -> 'A work order that is in progress cannot be canceld.' (pause first) |
| Wrong-state action refused | Completed WO | (API) post start | Refused 'A work order that is completed cannot be startd.' |
| Outside work purchase order | In Progress | Create Purchase Order: vendor, 'Rewind motor', 1 x 1200 | Purchase order in Purchase (product MNT-SERVICE, 5 % VAT); WO -> Waiting Vendor; Purchase Orders smart button = 1; second PO refused |
| Failure analysis | Repair WO | More > Failure Analysis: code MECH, root cause LUBRICATION, 5 Why x3, fishbone Environment 'dust'; Save | Saved; Overview shows it; Failure Analysis report and dashboard Failure Categories count it; editing updates the same record |
| Meter reading on completion moves the plan | Plan job with meter 'Operating Hours' | Complete with reading 12650 | Reading recorded with source Work Order; plan's next due meter = 12650 + interval |
Work order > Tasks
| Action | When | What you do | What happens |
|---|---|---|---|
| Add, edit, skip and delete tasks | Open WO | Add Task 'Clean coil' 0.5 h; set Actual 0.75; Result 'dirty'; Status Skipped; delete a task | Saved on blur; skip without result refused 'Say why the task is skipped.'; delete removes it; completed WO -> 'A completed or closed work order is changed by reopening it.' |
Work order > Labor
| Action | When | What you do | What happens |
|---|---|---|---|
| Typed-in hours | Technician rate 85 AED/h | Record Labor 2.5 h; then delete it | Line 'Typed in' 2.50 h, cost 212.50 AED in the ledger (labor); deleting removes the cost; timer lines cannot be deleted ('Only typed-in hours can be removed.') |
| Company default labour rate | Technician with hourly cost 0; Settings labour rate 60 | Record Labor 3 h | Cost 180.00 AED |
Work order > Parts
| Action | When | What you do | What happens |
|---|---|---|---|
| Add and reserve a part | Product V-belt (goods) 10 free in Main warehouse | Add Part qty 4, reserve ticked | Line Required 4, Reserved 4, Available shows the free stock; Inventory free quantity drops by 4 (a sale cannot take them) |
| Partial reservation shows the shortage | Only 3 free | Add Part qty 5 | Reserved 3; shortage 2 shown with 'short 2'; Request Shortage appears; Reorder Alerts lists the product |
| Issue parts: stock, valuation and journal | Part line 4 reserved; unit cost 25.00 AED (average); post-journals ON | Issue all | Done internal transfer from warehouse stock to consumption (origin WO number); quant -4; reservation released; part cost 100.00 in the ledger (parts); journal 'Maintenance parts issued WO-... ': Dr 5200 Operating expense 100.00 / Cr product stock account (default 1200 Inventory) 100.00, with cost centre/branch/project dimensions |
| Return unused at the cost it left at | 4 issued at 25.00 | Return Unused 1 | Reverse transfer; quant +1; part cost 75.00; net consumed 3; journal Dr 1200 / Cr 5200 25.00 |
| Issue limits | Required 4, issued 4 | Issue again; issue 5 on a line needing 2; issue when only 1 free | 'Every part needed has already been issued.'; '<part>: at most 2 can be issued.'; 'Only 1 of <code> is available at <warehouse>.' |
| Remove and change a part line | Line reserved 2, not issued | Change Required to 1; delete the line; try deleting an issued line | Required 1 releases 1; delete releases all; issued line -> 'Issued parts are returned, not deleted.' |
| Post-journals switched off | Settings post-journals OFF | Issue a part | Transfer and valuation happen, ledger cost recorded, no journal entry |
| Shortage to RFQ | Line short 2; vendor chosen | Request Shortage | Draft purchase document (RFQ) for 2 at product cost, VAT 5 %; WO In Progress -> Waiting Parts and labour stops |
Work Orders list
| Action | When | What you do | What happens |
|---|---|---|---|
| Queues and counts | Jobs in many states | Click each pill | Counts match rows for Open, My Work, Overdue, Emergency, Waiting Parts, Waiting Vendor, On Hold; Today = open jobs planned to start by today |
| Overdue | Open job with planned finish yesterday | Look at the row and the Overdue pill / report | Red Overdue chip; in the Overdue queue, Overdue tile and Overdue Work Orders report |
Downtime
| Action | When | What you do | What happens |
|---|---|---|---|
| Record downtime manually | maintenance.edit; downtime rate 500 | Record Downtime: asset, start 09:00, end 13:30, unplanned, reason Utility failure | 4.50 h; cost 2250.00 AED in the ledger (downtime) when you have cost.view to see it; asset availability falls |
| Running downtime | Record downtime with no end | Shown 'Running' with hours counting to now; a later Start on the asset links it to the job |
Preventive Maintenance
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a calendar plan | maintenance.plan.edit | New Plan: 'Quarterly service', Time, every 3 Months, First Due 2026-10-15, lead 7 days, 2 assets, checklist 3 lines | Plan MP-0000n; each asset next due 2026-10-15; shows in Due in the next 30 days and on the calendar as 'Preventive due' |
| Generate due work orders (lead time) | Plan above; today 2026-10-08 (due 15th - 7 days) | Generate Due Work Orders | One WO per asset, issue = plan name, planned start 2026-10-15 08:00, finish + estimated hours, status Scheduled (Assigned with default technician), 3 tasks, plan snapshot kept; message lists the numbers |
| Generation is idempotent | Jobs already generated and open | Generate Due Work Orders again | 'Nothing is due.'; no second job while one from the plan is open for that asset |
Plan record
| Action | When | What you do | What happens |
|---|---|---|---|
| Snapshot does not change | Generated job exists | (API) edit the plan's checklist; open the old job | The old job keeps the tasks and plan revision it was made with; only new jobs get the change |
| Completing moves the next due date from the real finish | Due 15 Oct, job completed 20 Oct | Complete the job | Asset's last done 20 Oct; next due 20 Jan (3 months from completion), not 15 Jan |
| Generate next now | Nothing due | Generate Next Now | Creates the next job even though it is not due (force) |
| Deactivate | Active plan | Deactivate | Plan Inactive; Generate makes nothing for it; Activate restores |
| Plan on a retired asset | Plan asset set Disposed / Inactive | Generate | No job for that asset |
| Plan with an inspection checklist | Plan with Inspection Checklist set | Generate | Each job gets a planned inspection with the template's checks, inspector = job technician |
Meter-Based Plans
| Action | When | What you do | What happens |
|---|---|---|---|
| Meter plan fires on a reading | Plan every 500 h on Operating Hours; meter at 12000 (next due 12500) | Log reading 12510 | A work order is generated at once (no button needed), due meter 12500; Due list shows meter 12510 / 12500 h |
| Whichever comes first | Every 3 months or 500 h | Log a reading past the mark before the date | Job generated by the meter; on completion both the date and the meter move on |
Maintenance Calendar
| Action | When | What you do | What happens |
|---|---|---|---|
| Calendar content and filters | Jobs, due plans, inspections, warranty ends, contract expiry, vendor visit | Month view; filter technician; filter asset; click events | All kinds shown with legend colours; technician filter shows only that technician's jobs; range over 6 months refused 'Choose a range of up to six months.' |
Workload
| Action | When | What you do | What happens |
|---|---|---|---|
| Load % | Technician with 3 jobs of 8 h each in the week | Open Workload for that week | Planned 24 h; capacity = working days x 8; load % = 24 / capacity x 100 (red over 100) |
Log Meter Reading
| Action | When | What you do | What happens |
|---|---|---|---|
| Counter cannot go back; reset | Hours meter at 12600 | Log 12500; then tick reset and log 5 | First refused with the counter message; second saved, note 'Meter reset.', current value 5, previous 12600 |
| Readings are insert-only | Look for edit/delete on readings | No edit or delete anywhere; each reading keeps source and the value it replaced |
Alert Rules
| Action | When | What you do | What happens |
|---|---|---|---|
| Condition rule raises one alert and one request | Rule Temperature > 45, raise request, priority urgent | Log 47 three times | One open alert '<asset>: Temperature 47 °C > 45 (<rule>)' and one request 'Condition alert: <rule>', type Condition Based, priority urgent; later readings add no new alert while it is open |
Meters
| Action | When | What you do | What happens |
|---|---|---|---|
| Acknowledge an alert | Open alert; maintenance.edit | Acknowledge | Alert leaves the open list; the next breach raises a new alert |
IoT Sensors
| Action | When | What you do | What happens |
|---|---|---|---|
| Sensor ingest | Sensor TS-CHL-01 linked to a meter | (API) POST .../maintenance/sensors/ingest {sensor: 'TS-CHL-01', value: 47} | Reading with source IoT, rules evaluated; unknown code -> 'No active sensor has that code.'; sensor without meter -> 'Link the sensor to a meter first.' |
Inspections
| Action | When | What you do | What happens |
|---|---|---|---|
| Plan and perform an inspection | Template Safety (3 checks) | New Inspection; answer Pass x2; Save; then Complete | Number INS-00000n, status planned -> in_progress on Save -> done on Complete; result PASS |
Inspection record
| Action | When | What you do | What happens |
|---|---|---|---|
| Failed line raises one request | Settings failed-inspection-request ON; check with 'fail raises request' | Answer Fail on 2 checks; Complete | Result FAIL; one request 'Failed inspection INS-...' priority high, severity high, source Inspection, description listing both failed checks; Request smart button shows 1 |
| Measurement limits | Check 'Operating pressure' 5-8 bar | Answer 8.5 | Marked failed (red); Complete gives result FAIL |
| Done inspection is locked | Done inspection | (API) PUT answers | Refused 'This inspection is already done.'; screen shows answers read-only |
Calibration
| Action | When | What you do | What happens |
|---|---|---|---|
| Record a passing calibration | Asset interval 180 days; maintenance.calibration | Record: performed 2026-10-02, Pass, certificate, cost 350 with vendor | CAL-0000n; asset last 2026-10-02, next 2027-03-31; register Valid; 350.00 AED vendor cost in the ledger |
| Failed calibration | Record with Fail | Register status Failed; next calibration = performed date; a high-priority request 'Calibration failed CAL-...' is raised | |
| Due soon and expired | Next calibration in 20 days; another yesterday | Open the register | Due Soon (within 30 days) and Expired |
Contracts (AMC)
| Action | When | What you do | What happens |
|---|---|---|---|
| Create a contract | maintenance.configure | New Contract: AMC, vendor, 2026-01-01 to 2026-12-31, 4 visits, SLA 24 h, value 24000 | AMC-0000n; status active (expiring within 60 days of the end, expired after); visits 0 / 4; Value only with cost.view |
Vendors
| Action | When | What you do | What happens |
|---|---|---|---|
| Visit inside vs outside the contract | Contract 2026-01-01..2026-12-31 | Record Visit Done, cost 800, date 2026-10-02 with the contract; then one with no contract | First: Within Contract ✓, no cost booked, contract visits used +1. Second: 800.00 AED vendor cost booked (needs an asset) |
Maintenance Costs
| Action | When | What you do | What happens |
|---|---|---|---|
| Add and remove a manual cost | cost.view | Add Cost: asset, Travel, 120; open the asset Costs tab; (API) delete it | Entry in the ledger and asset lifecycle; WO totals recalculated when on a job; system costs cannot be deleted ('This cost comes from its source record; change it there.') |
Work order > Costs
| Action | When | What you do | What happens |
|---|---|---|---|
| Work order cost totals | Labour 160, parts 75, vendor 800, downtime 1250, travel 120 | Open the Costs tab | Labor 160.00, Parts 75.00, Vendor 800.00, Other 1370.00 (downtime + travel), Total 2405.00 AED |
Asset Lifecycle Cost
| Action | When | What you do | What happens |
|---|---|---|---|
| Lifecycle | Purchase 185000; maintenance costs 2405 | Open Asset Lifecycle Cost | Lifecycle 187405.00 = purchase + labour + parts + vendor + downtime + other (children included) |
Reports
| Action | When | What you do | What happens |
|---|---|---|---|
| KPIs | Year so far: 4 jobs created, 1 emergency, 2 failures same asset same code, 2 assets | Open Reports > MTBF | Emergency Work 25 %; Repeat Failure 50 % (second of the same code); availability = (asset hours - unplanned downtime) / asset hours x 100; preventive compliance = plan jobs done within planned finish + 1 day / plan jobs |
| Export CSV | A report with rows | Export CSV | File <report>-<from>-<to>.csv with the visible columns; button disabled with no rows |
| Cost reports need cost.view | User without cost.view | Open .../reports/costs, vendor_costs, parts by URL | Menu entries hidden; API refused 'You do not have permission for this action.' |
Dashboard
| Action | When | What you do | What happens |
|---|---|---|---|
| Tiles match their lists | Mixed data | Compare each tile with the list it opens | Open, Overdue, Waiting Parts, Waiting Vendor, Assets Down, Preventive Due agree; see Security for the Emergency tile |
Configuration
| Action | When | What you do | What happens |
|---|---|---|---|
| First visit fills the lists | New company opens Maintenance | Open Configuration lists | 15 asset types, 8 categories, 11 maintenance types, 8 failure codes, 7 root causes, 8 meter types, 4 warranty types, 7 cost categories, 5 downtime reasons, 6 skills, 4 inspection templates exist |
Configuration lists
| Action | When | What you do | What happens |
|---|---|---|---|
| Add and switch off a value | maintenance.configure | Asset Types: add 'ROOFTOP'; untick Active | Added (code upper-cased); inactive values disappear from form drop-downs |
Technicians
| Action | When | What you do | What happens |
|---|---|---|---|
| Technician links My Work | Employee linked to a user | Add him as technician; assign him a job; sign in as him; My Work | His open jobs show as cards; Start / Pause / Resume work from the card |
Maintenance Settings
| Action | When | What you do | What happens |
|---|---|---|---|
| Save settings | maintenance.configure | Change Due Soon Window to 21; Save | 'Saved.'; History 'Settings changed'; asset Due Soon uses 21 days |
Applications > Maintenance > Features
| Action | When | What you do | What happens |
|---|---|---|---|
| Switch off Inspections | Company admin | Turn Inspections Off; open the Maintenance menu; try New Inspection via API | Operations > Inspections and Reports > Inspection menus gone; existing inspections readable by link; new / perform refused 'Inspections is disabled for this company.' |
| Switch off Warranty / Calibration / Contracts / Meters | Company admin | Turn each off in turn and try to save its records | Saves refused with '<feature> is disabled for this company.'; menus Warranty / Calibration / Contracts (AMC) and Vendors / Meters go; reads still work |
Applications > Maintenance > Fields
| Action | When | What you do | What happens |
|---|---|---|---|
| Field rules | Company admin | Set Asset serial number = Required; create an asset without it. Set Request location = Hidden; report an issue | Asset refused 'Asset serial number is required by this company.'; Location field gone from Report an Issue and a value sent by API refused |
Activity
| Action | When | What you do | What happens |
|---|---|---|---|
| Every action is in the trail | Do create, start, pause, complete, close; open History | One line per action with who, when and 'before -> after' status; Audit trail entries too |