Actions and results

What each Maintenance button and automatic behaviour does, with worked numbers and what the system refuses.

On this page (37)

Assets

ActionWhenWhat you doWhat happens
Create an asset with an automatic codemaintenance.editAssets > New Asset; leave Asset Code empty; name 'Test Chiller 1', type HVAC, criticality High; CreateAsset 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-001New Asset with code 'hvac-dxb-001'Refused 'Another asset already has that code.' (codes are stored in capitals)
Filters and searchAssets of several types and statusesFilter Type = HVAC, Status = 'Down (not working)'; search part of a serial numberDown = Under Maintenance + Breakdown + Out of Service only; search matches code, name, serial, barcode, manufacturer, model

Asset 360

ActionWhenWhat you doWhat happens
Edit and save with a revision checkAsset open in two tabsTab 1: Edit, change Model, Save. Tab 2: Edit, change Name, SaveTab 1 saves; tab 2 refused 'Someone else changed this asset. Reload it and try again.'
Hierarchy and roll-upParent 'Line 1' with child 'Motor M1'Record a 500 AED labour cost on a Motor M1 job; open Line 1Line 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 loopLine 1 > Motor M1Edit Line 1, Parent Asset = Motor M1, SaveRefused 'An asset cannot sit under itself or its own child.'
QR code, scan and print cardGenerate QR; on My Work type the asset code (or 'a2n:asset:<company>:<code>', the barcode, or the NFC tag) and Open Asset; Print Asset CardQR encodes a2n:asset:<company>:<code>; scan opens the asset; unknown code -> 'Asset not found.'; empty -> 'Scan or type the code.'
Key metrics arithmeticAsset installed 1 Jan; one repair WO started 10:00 finished 13:00 (3 h); 6 h unplanned downtime; 1 failureRead Key MetricsMTTR 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 stateAdd warranty ending today + 30 days; then one ending yesterday on another assetFirst shows Expiring (within 60 days), second Expired; Create Warranty Claim offered only while Valid / Expiring
Maintenance AssistantAsset with 2 ELEC failures 40 days apartMore > Maintenance AssistantFailure 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 assetMore > New Child Asset; name 'Fan motor'; CreateChild created under this asset with its location; opens; parent's counts include it
Add metersmaintenance.editAdd Meter Operating Hours; then add it againMeter with unit h, counter; second refused 'This asset already has that meter.'
Warranty claimValid warrantyCreate Warranty Claim: ref, amount 2400Claim WCL-0000n Draft, filed today; Warranty card shows the claim reference; listed under Warranty > Claims

Report an Issue

ActionWhenWhat you doWhat happens
Report a requestmaintenance.request.createReport Issue; asset CHL-001; issue 'Chiller tripping'; Submit RequestRequest MR-00000n, status New, source Manual, requested by you, location copied from the asset; History 'Request created'
Breakdown request takes the asset downAsset ActiveReport Issue with type Breakdown on the assetAsset status becomes Breakdown at once ('reported in MR-...'); Assets Down tile +1
Double submit is one requestSlow networkClick Submit Request twice quickly (same client id)Only one request is created

Request record

ActionWhenWhat you doWhat happens
Review then approveRequest New; user with request.approveReview; then ApproveNew -> Review -> Approved; decided by/at shown; History 'Review', 'Approval'
Approval needs an assetRequest with no assetApproveRefused 'Say which asset it is about before approving it.'
Reject with a reasonRequest New / Review / ApprovedReject; leave reason empty; then give a reasonEmpty refused 'Say why it is rejected.'; with reason status Rejected; Close then offered
Convert to a work orderRequest Approved, asset setCreate Work Order; technician chosen; CreateNew 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 itSettings: requests need approval OFFOpen a New request; Create Work OrderHint '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 requestConverted requestComplete and Close the work orderRequest moves to Closed automatically ('with WO-...')
Decided request is read-onlyRequest Approved(API) PUT the request to change the issueRefused 'A request is changed only before it is decided.'

New Work Order

ActionWhenWhat you doWhat happens
Create a work ordermaintenance.workorder.createNew Work Order; asset CHL-001; issue; type Corrective; no technician; CreateWO-00000n in Draft; criticality, branch, cost centre, project, team copied from the asset; History 'Work order created'

Work order

ActionWhenWhat you doWhat happens
ApproveDraft; request.approveMore > ApproveDraft -> Approved
Approval switch blocks draftsSettings: work orders need approval ON; Draft WOSchedule, Assign, StartRefused 'Approve the work order before scheduling it.' / '...before assigning it.' / '...before starting it.'
Scheduleworkorder.assignMore > Schedule; start 05 Oct 08:00, finish 12:00Status Scheduled; shows on the calendar; finish before start refused 'It cannot finish before it starts.'
Assign notifies the technicianTechnician linked to a userAssign; choose the technicianStatus Assigned; that user's bell shows 'WO-... assigned to you'
StartAssigned WO on an Active asset; workorder.startStartStatus 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 technicianScheduled WO without technicianStartRefused 'Assign a technician before starting.'
Breakdown request downtime attaches to the jobAsset in Breakdown with a running downtime from a manual recordStart the jobNo second downtime opens; the running one is linked to this work order
Pause and resume: waiting time is not worked timeIn Progress since 09:00; technician rate 80 AED/hAt 10:30 Pause (reason 'permit'); at 11:30 Resume; at 12:00 CompleteTwo 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 / vendorIn ProgressMore > Waiting for Parts; then Waiting for Vendor; then ResumeLabour segment closed each time; status Waiting Parts -> Waiting Vendor -> In Progress; Waiting Parts / Waiting Vendor tiles count it
Reassign while workingIn Progress with technician AAssign technician BA's segment closes and is costed; a new segment opens for B
Complete needs tasks done or skippedWO with 3 tasks, 1 OpenCompleteRefused '1 task(s) are still open. Finish or skip them first.'
Repair needs a failureCorrective WO with no failureComplete without choosing a failure codeRefused 'Record what failed (failure code and cause) before completing a repair.'; with failure code ELEC it completes and the failure is saved
CompleteIn Progress; all tasks doneComplete 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 completionSettings downtime rate 500 AED/h; job ran 2.5 hCompleteDowntime 2.50 h costs 1250.00 AED in the ledger (category downtime) and in the WO Other cost; WO downtime hours 2.5
CloseCompleted; workorder.closeCloseStatus 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 onSettings close-needs-costs ON; Completed WO with 0 costCloseRefused 'This company closes a job only with its costs recorded.'
ReopenCompleted or Closed; workorder.completeMore > Reopen with reasonStatus In Progress, reopen count +1, closed by/at cleared, a labour segment opens. Without reason -> 'Say why it is reopened.'
CancelAssigned WOMore > Cancel Work Order with reasonStatus 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 partsWO with 2 parts issued, not returned (Waiting Parts)CancelRefused 'Return the issued parts before cancelling.'
Cancel not offered while In ProgressIn Progress WOLook for Cancel; via API post cancelNot in the menu; API -> 'A work order that is in progress cannot be canceld.' (pause first)
Wrong-state action refusedCompleted WO(API) post startRefused 'A work order that is completed cannot be startd.'
Outside work purchase orderIn ProgressCreate Purchase Order: vendor, 'Rewind motor', 1 x 1200Purchase order in Purchase (product MNT-SERVICE, 5 % VAT); WO -> Waiting Vendor; Purchase Orders smart button = 1; second PO refused
Failure analysisRepair WOMore > Failure Analysis: code MECH, root cause LUBRICATION, 5 Why x3, fishbone Environment 'dust'; SaveSaved; Overview shows it; Failure Analysis report and dashboard Failure Categories count it; editing updates the same record
Meter reading on completion moves the planPlan job with meter 'Operating Hours'Complete with reading 12650Reading recorded with source Work Order; plan's next due meter = 12650 + interval

Work order > Tasks

ActionWhenWhat you doWhat happens
Add, edit, skip and delete tasksOpen WOAdd Task 'Clean coil' 0.5 h; set Actual 0.75; Result 'dirty'; Status Skipped; delete a taskSaved 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

ActionWhenWhat you doWhat happens
Typed-in hoursTechnician rate 85 AED/hRecord Labor 2.5 h; then delete itLine '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 rateTechnician with hourly cost 0; Settings labour rate 60Record Labor 3 hCost 180.00 AED

Work order > Parts

ActionWhenWhat you doWhat happens
Add and reserve a partProduct V-belt (goods) 10 free in Main warehouseAdd Part qty 4, reserve tickedLine Required 4, Reserved 4, Available shows the free stock; Inventory free quantity drops by 4 (a sale cannot take them)
Partial reservation shows the shortageOnly 3 freeAdd Part qty 5Reserved 3; shortage 2 shown with 'short 2'; Request Shortage appears; Reorder Alerts lists the product
Issue parts: stock, valuation and journalPart line 4 reserved; unit cost 25.00 AED (average); post-journals ONIssue allDone 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 at4 issued at 25.00Return Unused 1Reverse transfer; quant +1; part cost 75.00; net consumed 3; journal Dr 1200 / Cr 5200 25.00
Issue limitsRequired 4, issued 4Issue 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 lineLine reserved 2, not issuedChange Required to 1; delete the line; try deleting an issued lineRequired 1 releases 1; delete releases all; issued line -> 'Issued parts are returned, not deleted.'
Post-journals switched offSettings post-journals OFFIssue a partTransfer and valuation happen, ledger cost recorded, no journal entry
Shortage to RFQLine short 2; vendor chosenRequest ShortageDraft purchase document (RFQ) for 2 at product cost, VAT 5 %; WO In Progress -> Waiting Parts and labour stops

Work Orders list

ActionWhenWhat you doWhat happens
Queues and countsJobs in many statesClick each pillCounts match rows for Open, My Work, Overdue, Emergency, Waiting Parts, Waiting Vendor, On Hold; Today = open jobs planned to start by today
OverdueOpen job with planned finish yesterdayLook at the row and the Overdue pill / reportRed Overdue chip; in the Overdue queue, Overdue tile and Overdue Work Orders report

Downtime

ActionWhenWhat you doWhat happens
Record downtime manuallymaintenance.edit; downtime rate 500Record Downtime: asset, start 09:00, end 13:30, unplanned, reason Utility failure4.50 h; cost 2250.00 AED in the ledger (downtime) when you have cost.view to see it; asset availability falls
Running downtimeRecord downtime with no endShown 'Running' with hours counting to now; a later Start on the asset links it to the job

Preventive Maintenance

ActionWhenWhat you doWhat happens
Create a calendar planmaintenance.plan.editNew Plan: 'Quarterly service', Time, every 3 Months, First Due 2026-10-15, lead 7 days, 2 assets, checklist 3 linesPlan 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 OrdersOne 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 idempotentJobs already generated and openGenerate Due Work Orders again'Nothing is due.'; no second job while one from the plan is open for that asset

Plan record

ActionWhenWhat you doWhat happens
Snapshot does not changeGenerated job exists(API) edit the plan's checklist; open the old jobThe 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 finishDue 15 Oct, job completed 20 OctComplete the jobAsset's last done 20 Oct; next due 20 Jan (3 months from completion), not 15 Jan
Generate next nowNothing dueGenerate Next NowCreates the next job even though it is not due (force)
DeactivateActive planDeactivatePlan Inactive; Generate makes nothing for it; Activate restores
Plan on a retired assetPlan asset set Disposed / InactiveGenerateNo job for that asset
Plan with an inspection checklistPlan with Inspection Checklist setGenerateEach job gets a planned inspection with the template's checks, inspector = job technician

Meter-Based Plans

ActionWhenWhat you doWhat happens
Meter plan fires on a readingPlan every 500 h on Operating Hours; meter at 12000 (next due 12500)Log reading 12510A work order is generated at once (no button needed), due meter 12500; Due list shows meter 12510 / 12500 h
Whichever comes firstEvery 3 months or 500 hLog a reading past the mark before the dateJob generated by the meter; on completion both the date and the meter move on

Maintenance Calendar

ActionWhenWhat you doWhat happens
Calendar content and filtersJobs, due plans, inspections, warranty ends, contract expiry, vendor visitMonth view; filter technician; filter asset; click eventsAll 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

ActionWhenWhat you doWhat happens
Load %Technician with 3 jobs of 8 h each in the weekOpen Workload for that weekPlanned 24 h; capacity = working days x 8; load % = 24 / capacity x 100 (red over 100)

Log Meter Reading

ActionWhenWhat you doWhat happens
Counter cannot go back; resetHours meter at 12600Log 12500; then tick reset and log 5First refused with the counter message; second saved, note 'Meter reset.', current value 5, previous 12600
Readings are insert-onlyLook for edit/delete on readingsNo edit or delete anywhere; each reading keeps source and the value it replaced

Alert Rules

ActionWhenWhat you doWhat happens
Condition rule raises one alert and one requestRule Temperature > 45, raise request, priority urgentLog 47 three timesOne 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

ActionWhenWhat you doWhat happens
Acknowledge an alertOpen alert; maintenance.editAcknowledgeAlert leaves the open list; the next breach raises a new alert

IoT Sensors

ActionWhenWhat you doWhat happens
Sensor ingestSensor 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

ActionWhenWhat you doWhat happens
Plan and perform an inspectionTemplate Safety (3 checks)New Inspection; answer Pass x2; Save; then CompleteNumber INS-00000n, status planned -> in_progress on Save -> done on Complete; result PASS

Inspection record

ActionWhenWhat you doWhat happens
Failed line raises one requestSettings failed-inspection-request ON; check with 'fail raises request'Answer Fail on 2 checks; CompleteResult FAIL; one request 'Failed inspection INS-...' priority high, severity high, source Inspection, description listing both failed checks; Request smart button shows 1
Measurement limitsCheck 'Operating pressure' 5-8 barAnswer 8.5Marked failed (red); Complete gives result FAIL
Done inspection is lockedDone inspection(API) PUT answersRefused 'This inspection is already done.'; screen shows answers read-only

Calibration

ActionWhenWhat you doWhat happens
Record a passing calibrationAsset interval 180 days; maintenance.calibrationRecord: performed 2026-10-02, Pass, certificate, cost 350 with vendorCAL-0000n; asset last 2026-10-02, next 2027-03-31; register Valid; 350.00 AED vendor cost in the ledger
Failed calibrationRecord with FailRegister status Failed; next calibration = performed date; a high-priority request 'Calibration failed CAL-...' is raised
Due soon and expiredNext calibration in 20 days; another yesterdayOpen the registerDue Soon (within 30 days) and Expired

Contracts (AMC)

ActionWhenWhat you doWhat happens
Create a contractmaintenance.configureNew Contract: AMC, vendor, 2026-01-01 to 2026-12-31, 4 visits, SLA 24 h, value 24000AMC-0000n; status active (expiring within 60 days of the end, expired after); visits 0 / 4; Value only with cost.view

Vendors

ActionWhenWhat you doWhat happens
Visit inside vs outside the contractContract 2026-01-01..2026-12-31Record Visit Done, cost 800, date 2026-10-02 with the contract; then one with no contractFirst: Within Contract ✓, no cost booked, contract visits used +1. Second: 800.00 AED vendor cost booked (needs an asset)

Maintenance Costs

ActionWhenWhat you doWhat happens
Add and remove a manual costcost.viewAdd Cost: asset, Travel, 120; open the asset Costs tab; (API) delete itEntry 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

ActionWhenWhat you doWhat happens
Work order cost totalsLabour 160, parts 75, vendor 800, downtime 1250, travel 120Open the Costs tabLabor 160.00, Parts 75.00, Vendor 800.00, Other 1370.00 (downtime + travel), Total 2405.00 AED

Asset Lifecycle Cost

ActionWhenWhat you doWhat happens
LifecyclePurchase 185000; maintenance costs 2405Open Asset Lifecycle CostLifecycle 187405.00 = purchase + labour + parts + vendor + downtime + other (children included)

Reports

ActionWhenWhat you doWhat happens
KPIsYear so far: 4 jobs created, 1 emergency, 2 failures same asset same code, 2 assetsOpen Reports > MTBFEmergency 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 CSVA report with rowsExport CSVFile <report>-<from>-<to>.csv with the visible columns; button disabled with no rows
Cost reports need cost.viewUser without cost.viewOpen .../reports/costs, vendor_costs, parts by URLMenu entries hidden; API refused 'You do not have permission for this action.'

Dashboard

ActionWhenWhat you doWhat happens
Tiles match their listsMixed dataCompare each tile with the list it opensOpen, Overdue, Waiting Parts, Waiting Vendor, Assets Down, Preventive Due agree; see Security for the Emergency tile

Configuration

ActionWhenWhat you doWhat happens
First visit fills the listsNew company opens MaintenanceOpen Configuration lists15 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

ActionWhenWhat you doWhat happens
Add and switch off a valuemaintenance.configureAsset Types: add 'ROOFTOP'; untick ActiveAdded (code upper-cased); inactive values disappear from form drop-downs

Technicians

ActionWhenWhat you doWhat happens
Technician links My WorkEmployee linked to a userAdd him as technician; assign him a job; sign in as him; My WorkHis open jobs show as cards; Start / Pause / Resume work from the card

Maintenance Settings

ActionWhenWhat you doWhat happens
Save settingsmaintenance.configureChange Due Soon Window to 21; Save'Saved.'; History 'Settings changed'; asset Due Soon uses 21 days

Applications > Maintenance > Features

ActionWhenWhat you doWhat happens
Switch off InspectionsCompany adminTurn Inspections Off; open the Maintenance menu; try New Inspection via APIOperations > 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 / MetersCompany adminTurn each off in turn and try to save its recordsSaves refused with '<feature> is disabled for this company.'; menus Warranty / Calibration / Contracts (AMC) and Vendors / Meters go; reads still work

Applications > Maintenance > Fields

ActionWhenWhat you doWhat happens
Field rulesCompany adminSet Asset serial number = Required; create an asset without it. Set Request location = Hidden; report an issueAsset refused 'Asset serial number is required by this company.'; Location field gone from Report an Issue and a value sent by API refused

Activity

ActionWhenWhat you doWhat happens
Every action is in the trailDo create, start, pause, complete, close; open HistoryOne line per action with who, when and 'before -> after' status; Audit trail entries too