Actions and results

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

On this page (62)
DashboardVehicle formVehicle 360DriversAssignmentsReservationsCalendarDriver appTripsOdometerFuelFuel Card StatementsVehicle ChecklistsDaily LogsService RequestsWork order recordPreventive MaintenanceBreakdownsTyresBatteriesWorkshopDocumentsInsuranceFinesAccidentsClaimsFleet ExpensesFuel CostsMaintenance CostsLease CostsTCOCost AllocationReplacement PlanningReport pagesVehicle UtilizationCost / KMFuel EfficiencyMaintenance reportDowntimeDriver reportReport pages (Expiry)All ReportsPivotGraphsConfiguration (all lists)Vehicle CategoriesVehicle Categories / Makes / Fuel cardsMakes / ModelsFuel Types / Service Types / Cost CategoriesVehicle StatusesMaintenance PlansDocument Types / Permit TypesInspection TemplatesFuel CardsToll & ParkingAlert RulesApproval RulesCountry ProfilesOther ListsFleet SettingsTelematics ProvidersFeature switches

Dashboard

ActionWhenWhat you doWhat happens
KPI tiles and pillsTest company with 8 vehicles: 3 Available, 2 Assigned, 1 In use, 1 Under maintenance, 1 SoldOpen Fleet > Dashboard; compare each tile and pill count with Vehicles list tabsTotal 7 (sold excluded), Active 6 (Available + Assigned + In use + Reserved), Available 3, Under Maintenance 1 (Under maintenance + Breakdown), pills match; Fuel Cost This Month = sum of this month's fuel cost lines
Board filters and searchAs abovePick a branch, then category, driver, status; type part of a plate; click Due for Service pill; toggle list view; Show moreCards narrow each time; list view shows the same vehicles; Show more adds 16; 'No vehicle matches.' when nothing
Fuel cost tile hidden without permissionUser with fleet.view onlyOpen DashboardNo 'Fuel Cost This Month' tile, no cost trend card; maintenance cost line missing from At a Glance
Recent alertsA vehicle with insurance expiring in 10 days, one with an overdue serviceLook at Recent Alerts and Maintenance Due / Document Expiry; click an alertAlert shows title, vehicle, due text (10 days: severity warning; 7 days or less serious; expired critical); click opens Vehicle 360

Vehicle form

ActionWhenWhat you doWhat happens
Register a vehiclefleet.createNew Vehicle; plate 'a 12345', Registered in UAE, Dubai; model Hilux (category / fuel filled from model); odometer 15000; SaveCode VHC-000001 (next number), plate stored 'A 12345', status Available, opening odometer reading 15,000 (source Manual, note 'Opening reading'), activity 'Vehicle registered', Vehicle 360 opens
Duplicate plate / VIN refusedVehicle A 12345 Dubai existsNew vehicle with the same plate + emirate; then a different plate with the same VIN'Plate A 12345 is already on VHC-000001.' and 'VIN ... is already on VHC-000001.'; same plate in Sharjah is accepted (region differs)
Edit conflictVehicle open in two browsersEdit and save in browser 1; edit and save in browser 2Browser 2 refused 'Somebody else changed this vehicle. Reload it and try again.'

Vehicle 360

ActionWhenWhat you doWhat happens
KPI strip and tabsVehicle with fills, trips, a work order, documentsOpen the vehicle; click each smart button; open each tabOdometer (engine hours for heavy categories), Fuel level, Utilization, Next Service, Insurance / Registration expiry (amber within 30 days); tab counts match the lists; Details tab shows VIN, chassis, residual value, useful life
Utilisation arithmeticWorking hours a day = 10; this month 2 days elapsed; trips 4 h on day 1 and 12 h on day 2Open Vehicle 360 on the 2ndUtilization (MTD) = (4 + min(12,10)) / (2 x 10) = 70%. With no trips / telemetry it falls back to time assigned to a driver
Cost summary and cost per kmfleet.cost.view; this year fuel 1,368, maintenance 520, insurance 3,200; depreciation 13,500; distance 6,000 kmOpen Overview > Cost SummaryLines per category incl. Depreciation 13,500 (120,000 price, 30,000 residual, 60 months = 1,500 / month x 9 months); Total 18,588; Cost per KM 3.10; Cost per Month = total / months
Change statusVehicle Available, no assignmentChange status > Out of Service, Why 'Waiting body parts'Status Out of Service, activity 'Status changed to Out of Service' with the reason; assignments now refused 'VHC-000001 is out of service.'
Dispose without approval ruleApproval rule 'Vehicle disposal' switched off; no active assignmentSell / scrap / return: Sold, sale value 45,000, buyer, reason; SaveStatus Sold, current driver cleared, activity 'Vehicle sold' '45000.00 to <buyer>'; vehicle leaves the board and Vehicles 'In the fleet' tab; appears in 'Sold / scrapped'; all history kept
Dispose with the default approval ruleDefault seed rule: Vehicle disposal from AED 0, approver fleet.configureRequest disposal as user Adisposal_state pending, approvers with fleet.configure notified 'Approve disposal of VHC-... (Sold)', vehicle status unchanged

Drivers

ActionWhenWhat you doWhat happens
Driver from HRHR employee with a driving-licence identifier (number, expiry 2030-05-01) and a userNew Driver; pick the employee; SaveName, phone, e-mail, login, code (employee no.) and licence filled from HR; status Active; Days left counted from Dubai today
Effective statusDriver A licence expired yesterday; driver B on approved HR leave today; driver C SuspendedOpen DriversA 'Licence Expired', B 'On Leave', C 'Suspended'; a pending (not approved) leave does not change status
Licence data hiddenUser with fleet.view but not fleet.driver.viewOpen Drivers; open a driver; try SaveList shows name, status, vehicle, phone, licence expiry; licence number, categories, permit, medical are not returned; saving refused (needs fleet.driver.view)

Assignments

ActionWhenWhat you doWhat happens
Primary assignment hands overVHC-1 held by driver A (primary); driver B freeAssign VHC-1 to B, Primary, From nowB's assignment Active; A's ended at that moment with note 'Handed over under ASG-...'; vehicle Assigned to B; if B had another primary vehicle that one is ended 'Moved to VHC-1' and settles to Available
Planned assignment started by the clockAssign with From = now + 1 hourSave; wait for the 5-minute clock after the timeStatus Planned first; then Active automatically; a Temporary with Until in the past is ended 'Ended at its end date'
RefusalsDriver on approved leave 2026-10-01..10; truck with driver licence B onlyAssign the driver for 2026-10-05; assign the B-licence driver to a truck'<name> is on approved leave 2026-10-01 to 2026-10-10.'; '<name>'s licence categories (B) do not cover a truck.'
Cross-branch ruleFleet Settings Cross-branch = Not allowed; driver in Abu Dhabi branch, vehicle in Dubai branchAssign'This vehicle belongs to another branch, and cross-branch assignment is not allowed.'; with 'Needs approval' the assignment is Planned with Approval pending
End an assignmentActive assignment, start odometer 15,200End; Odometer at return 15,650Status Ended, Km 450, reading recorded with note 'End of ASG-...', driver removed from the vehicle, vehicle Available; activity 'Returned by <name>'

Reservations

ActionWhenWhat you doWhat happens
Book and approve (two people)Default rule 'Pool vehicle reservations' needs fleet.assign; user E (fleet.view + fleet.log) and coordinator CE books VHC-3 for tomorrow 08:00-17:00; C approvesE's booking Requested and C notified; after approval status Reserved, E notified 'Reservation RSV-... approved: VHC-3 · plate'; vehicle Reserved when pickup is within 2 hours
Book by categoryTwo free cars, one already bookedBook 'Any vehicle of this kind' = Car; approveFirst free car (by code) is taken at approval; if none free 'No vehicle of that kind is free then.'
Check out and returnReserved bookingCheck out: odometer 22,000, fuel 80; Return: odometer 22,180, Damage 'Scratch rear bumper', refill tickedCheckout: a Pool assignment created and active, vehicle In Use. Return: assignment ended, distance 180, vehicle Available, service request SRQ-... (Body damage, source Driver) raised; activity 'Returned from RSV-...' '180 km - refill required'
Own bookings onlyUser E (no fleet.assign) and others' bookings existE opens ReservationsOnly E's bookings listed; cancelling someone else's (API) -> 'Only the person who asked, or a fleet coordinator, can cancel it.'

Calendar

ActionWhenWhat you doWhat happens
Entries and click-throughService due, scheduled work order, document expiry, reservation over 3 days, lease ending this monthOpen Calendar month, week and list; toggle kinds; click each entryEach kind with its colour and count; the reservation spans its 3 days; clicking the work order opens it, reservation goes to Reservations, others open Vehicle 360

Driver app

ActionWhenWhat you doWhat happens
Not a driverUser without a driver profileOpen My Vehicle (Driver App)'You are not set up as a driver. Ask the fleet team to add your driver profile.'
Online actionsDriver with an assigned vehicleStart Trip (odometer 22,150, JAFZA); End Trip (22,230, toll 8, parking 10); Fuel Entry 45 L / 128.25; Report IssueEach shows 'Saved.'; trip TRP-... started then completed 80 km; fill recorded source Driver app; service request raised; vehicle card refreshes
Offline queue and replayPhone or browser offline (DevTools offline)Do a Fuel Entry and Start Trip offline; go online; press Send now twiceBanner '2 item(s) waiting to be sent'; message 'Saved on this phone - it will be sent when you are back online.'; after sync 'Sent 2 item(s).'; records appear once (client id replay) and are marked offline with the capture time
Not my vehicleDriver D1 sends a fuel item for D2's vehicle (API)POST driver/syncItem result ok=false with 'VHC-... is not assigned to you.'; the other items in the batch still apply

Trips

ActionWhenWhat you doWhat happens
Start and end with costVehicle normal consumption 8.0 L/100 km, last fill 2.85 AED/L; trip start odometer 50,000New Trip, Start it now; End: end odometer 50,180, fuel used blank, toll 8, parking 10Distance 180 km; fuel used 14.4 L; fuel cost 41.04; total 59.04; cost / km 0.33; cost ledger gets Toll 8.00 and Parking 10.00 (not fuel - fills already carry it); vehicle back to Assigned / Available
Cannot change a finished tripCompleted tripOpen and save; Cancel (API)'A finished trip cannot be changed.' / 'A finished trip cannot be cancelled.'

Odometer

ActionWhenWhat you doWhat happens
Flagged readings keptVehicle at 50,000 (reading at 08:00); Unusual jump setting 1,500Use three fresh test vehicles each with a 50,000 reading at 08:00 yesterday: record 49,900 on the first; 52,000 at 10:00 yesterday on the second; 51,700 at 08:00 today (24 h later) on the thirdLower: flag 'Reading lower than previous'; 2,000 km in 2 h: 'Impossible distance'; 1,700 in 24 h: 'Unusual jump'. All Needs review; vehicle odometer stays 50,000; activity 'Odometer reading needs review'
Review a readingFlagged readingsAccept the 'lower than previous' reading 49,900; reject anotherAccepted lower reading SETS the vehicle odometer to 49,900 (cluster replaced); rejected reading is excluded from distance and next checks; 'This reading is not waiting for review.' on a second click

Fuel

ActionWhenWhat you doWhat happens
Log a fill and efficiencyPrevious full fill at 45,000 kmLog Fuel: 48 L, price 2.85, odometer 45,600, full tankTotal 136.80; distance 600; KM / L 12.5; L / 100 km 8.0; cost per km 0.2280; fuel cost line 136.80 on the vehicle; activity 'Fuel log added' '48 L at ENOC ...'
Potential anomaliesVehicle tank 60 L; normal 8.0 L/100 km (3+ measured fills); anomaly 20%Log 64 L; log a fill giving 10.5 L/100 km; repeat a receipt number at the same station; use a card linked to another vehicleFlags: 'Quantity inconsistent with tank capacity' (64 > 63), 'Consumption above normal' (10.5 > 9.6), 'Duplicate receipt', 'Fuel card mismatch'; Review = Needs review; fuel reviewers notified 'Potential fuel anomaly on VHC-... - needs review'. Wording never says fraud
Review a flagged fillA flagged fill entered by user AUser B (fleet.fuel.view + fleet.edit): Ask the driver; another: ClearQueried: driver's user notified 'Please confirm fuel entry FUE-...'; a queried fill is left out of 'normal consumption'. Cleared: Review cleared. User A reviewing own fill -> 'Somebody other than the person who entered it reviews it.' (unless A has fleet.configure)
Posting a fillFleet Settings 'Post fleet costs...' ticked, accounts blankLog a cash fill 136.80; a card fill; an On account fillCash: journal Dr fuel expense (found by name 'fuel' / 'vehicle running' or the expense role) / Cr cash 136.80, source fleet, with branch / cost centre / project dimensions; card: Cr the card account (payable role); On account: no journal; ledger 'Posted' Yes for the first two

Fuel Card Statements

ActionWhenWhat you doWhat happens
Import and reconcileCard 9988776655444321 linked to VHC-1; fill of 49 L / 142.50 at 07:45Import 'TX-TEST-1, card, 2026-10-02T07:50, 50 L, 145.00'; import the same file againFirst: Imported 1, matched 1; status Differences with 'Amount differs by 2.50' (litres within 3%, time within 6 h). Second: 'skipped 1 already imported'
Unmatched linesLine for a card not linked to a vehicle; line with no matching fillImport; on the linked-card line press Record as fill; Ignore the otherNot linked: Unmatched 'The card is not linked to a vehicle.' and Record as fill refused 'Link the card to a vehicle first.'; Record as fill creates FUE-... (source Import, paid by card) and the line becomes Matched; Ignore -> ignored

Vehicle Checklists

ActionWhenWhat you doWhat happens
Checklist result and follow-upPre-Trip templateStart a checklist: Brakes Not OK 'spongy'; Horn Not OK; SubmitResult Failed (brakes is a safety item: brakes, tyres, lights, seatbelt, hydraulics); a High priority service request 'Inspection INS-...: Brakes - spongy; Horn' with the photos; only non-safety items Not OK -> 'Pass with issues', normal priority

Daily Logs

ActionWhenWhat you doWhat happens
Daily logForklift VHC-6New daily log: start 1,200, end 1,260, hours 7.5, issues 'Hydraulic leak'Km 60; end reading recorded (Daily log); a Repair service request from the driver is raised

Service Requests

ActionWhenWhat you doWhat happens
Decide a requestNew request SRQ-1Approve; on another Reject; on another Create work orderApproved / Rejected with decided by; Create work order makes WO-... (service Repair, or Minor service for a Service request) linked, request 'Work order created' and the record opens; second create -> 'This request already has a work order or is closed.'

Work order record

ActionWhenWhat you doWhat happens
Lines and totalsDraft WOAdd part 2 x 45 (from stock), labour 1.5 h x 120, outside work 1 x 250; SaveParts 90.00, Labour 180.00, Outside work 250.00, Total 520.00; amounts shown before save update live
Submit under the approval limitDefault rule: work orders from AED 5,000; WO total 520SubmitStraight to Approved (approval 'not needed'); Schedule / Start work appear
Approval above the limit (maker-checker)WO total 6,200 created by workshop user W; manager M has fleet.workorder.approveW submits; W tries Approve; M approvesAfter submit 'Waiting for approval' and approvers notified 'Approve work order WO-... (6200.00) for VHC-...'; W refused 'You cannot approve this.' (or 'Somebody other than the person who asked has to approve it.' if W holds the permission); M approves -> Approved, Approved by M
Reject and resubmitPending WOApprover rejects; requester edits and submits againApproval Rejected, status stays Draft, Submit shows again; resubmit asks again
Start, waiting parts, scheduleApproved WOSchedule 2026-10-05; Start work; Waiting parts; Start work againScheduled (activity 'Maintenance scheduled'); In progress and vehicle Under Maintenance (activity 'Work started'); Waiting parts; back to In progress; Start from Draft -> 'Approve or schedule the work order first.'
Issue parts from stockOil filter OF-TEST: 10 on hand in WH-MAIN at FIFO cost 40; line 2 from stockIssue parts from stockInternal picking (done) WH-MAIN stock -> inventory usage; line issued at 2 x 40 = 80.00 (Inventory cost, not the typed 45); journal 'Fleet parts WO-... VHC-...' Dr maintenance expense 80 / Cr stock account 80 with the vehicle's dimensions; Parts used list shows Issued Yes; on hand 8
Issue refusedPart qty 20, only 8 on hand; a lot-tracked part; a service productIssue parts'Only 8 of OF-TEST is available at WH-MAIN.'; 'XYZ is tracked by lot or serial - issue it from Inventory, then add it here at its cost.'; 'This part is not a stocked product.'
Raise purchase order to the garageExternal WO with vendor, outside work 250 and labour 180 (not from stock)Raise purchase orderA Purchase order to the vendor with the not-from-stock lines (product FLEET-REPAIR 'Vehicle repair service' created if missing, VAT 5%, notes 'VHC-... plate - description', branch / cost centre / project); WO shows its number; second press -> 'This work order already has a purchase order.'; without vendor 'Choose the garage (vendor) first.'
CompleteIn progress WO started 09:00, a from-stock part not yet issuedComplete at 15:30, odometer 50,050, findingsRemaining stock parts issued automatically; downtime 6.5 h; reading 50,050 (Service); status Completed; cost line Maintenance = parts + labour + outside (520) on the completion date; linked service request Resolved, breakdown resolved; vehicle back to Available / Assigned; 'Work order WO-... completed' alert
CancelWO with an issued part; another withoutCancel eachWith issued part: 'Parts have been issued - return them to stock in Inventory before cancelling.'; without: Cancelled, its cost lines removed, vehicle status settles

Preventive Maintenance

ActionWhenWhat you doWhat happens
Due states (km)Plan Oil change every 10,000 km / 180 days, warn 500 km / 14 days; last oil change completed at 40,000 km todaySet odometer 49,000, then 49,600, then 49,950, then 50,050; open Preventive Maintenance (tick 'Show plans not yet due')49,000: Not due (1,000 left); 49,600: Due soon (400 <= 500); 49,950: Due (50 <= 500 / 5); 50,050: Overdue (-50). Due at km 50,000
Due by date / hours, and which plans applySix-monthly inspection (182 days); 250-hour plan for Heavy; a forklift and a carOpen the boardCar: days measure from its last inspection (or when it joined the fleet - not from an old purchase date); the hours plan applies only to engine-hours categories; road km plans not applied to the forklift
Clock raises a requestPlan with 'Raise a service request when due' on, vehicle on the road, nothing openRun the daily scan (next Dubai midnight, or staging tick)Service request SRQ-... source Maintenance Plan, description 'Oil change due at 50,000 km or by DD Mon YYYY', priority High when overdue; one per plan; once the work order completes the open request it raised is resolved 'No longer due...'

Breakdowns

ActionWhenWhat you doWhat happens
Breakdown to repairVehicle on a tripReport breakdown with recovery and tow 350; Recovering; Work order; complete the work orderVehicle Breakdown, trip notes 'Breakdown BRK-...', Urgent service request, alert 'Breakdown: VHC-... at <place>'; Recovering; WO (Repair, Urgent) and status In repair; completing the WO resolves the breakdown and adds a 350.00 Tow / recovery maintenance cost; vehicle Available
Resolve without work orderOpen breakdown at 10:00Resolve at 13:30 with no downtime givenDowntime 3.5 h; tow cost recorded; vehicle back to Available when no open work order

Tyres

ActionWhenWhat you doWhat happens
Tyre lifecycle and cost per kmTyre cost 450 in stock; vehicle at 20,000 kmFit Front Left; drive to 50,000; Rotate to Rear Right; Remove; HistoryFirst fit charges 450 Tyres cost to the vehicle; KM used 30,000; cost / km 0.0150; rotation swaps with the tyre at Rear Right (both get events); history shows purchased, installed, rotated, removed with odometer and user
Low treadInstalled tyreCheck: tread 2.5Shows in Low tread tab; alert 'Tyre tread low on VHC-... (2.5 mm)'

Batteries

ActionWhenWhat you doWhat happens
Fit a battery replaces the old oneVehicle with battery BAT-1 installedNew battery BAT-2 cost 420 fitted to the vehicleBAT-2 Installed, BAT-1 Replaced with replacement date today and no vehicle; 420 maintenance cost; activity 'Battery fitted'

Workshop

ActionWhenWhat you doWhat happens
Workshop drives work ordersWorkshop with vendor, warehouse WH-2 and labour rate 120New WO with this workshop; add a labour line with no rateWO vendor, kind and parts warehouse taken from the workshop; labour rate 120 used; deleting a workshop used by a WO switches it off ('It is used by existing records, so it was switched off instead.')

Documents

ActionWhenWhat you doWhat happens
Status by expiryToday 2 Oct 2026Save documents expiring 2026-09-30, 2026-10-20, 2027-01-31Expired, Expiring soon (18 days), Valid; Days left -2 / 18 / 121; the daily clock moves them as days pass
Renew MulkiyaMulkiya expiring 2026-11-30, type renews every 12 monthsRenewing; then Renew with fee 450Renewing -> status Renewal in progress; Renew creates a new document issued 2026-11-30, expiring 2027-11-30, fee 450 as a Registration cost; the old one is kept (renewed) and drops out of lists and the vehicle's dates; its alerts stop
Missing mandatory documentsUAE-plated vehicle without Mulkiya or Vehicle Testing; no live policyVehicle 360 > DocumentsRed line 'Missing for this country: Registration / Mulkiya, Motor Insurance (UAE), Vehicle Testing' (KSA types not listed for a UAE plate); a live insurance policy satisfies the insurance group
Read with AI previewPDF with text 'Policy No ... Expiry 31/12/2026'Read with AI; upload; check fields; Save documentPreview note 'Read by ... - confidence N%. Check every field.' (or 'Read from the PDF's text - check every field.'); fields pre-filled incl. suggested vehicle by plate / VIN and type; nothing saved until Save; audit 'fleet.document.extract'

Insurance

ActionWhenWhat you doWhat happens
Policy as cost and expiryfleet.editNew policy 2026-01-01..2026-12-31 premium 3,200Insurance cost 3,200 dated 2026-01-01; Vehicle 360 Insurance Expiry 31 Dec 2026; policy appears on the driver app documents; status Expiring soon from 1 Dec

Fines

ActionWhenWhat you doWhat happens
Driver at the timeAssignment of VHC-1 to driver A covering 28 Sep 22:15Record a fine at that time with the driver blankDriver A filled; with a trip running then, the trip's driver wins
Shared fine recovered through salaryFine AED 600 Speeding, Shared, share blank, Recover through salary; approver M with fleet.fine.approve (default rule)Save; M approves deduction (period default this month); HR marks Deducted by HR; PaidDriver share 300.00, Salary deduction Pending approval -> Queued with period 2026-10 and HR users (hr.employee.view) notified 'Payroll deduction 300.00 for <driver> (2026-10)' -> Deducted. Once paid the fines cost line = 600 - 300 = 300.00
Who pays and costThree paid fines of 600Company pays; Driver pays without salary recovery; Shared with deduction still pendingCompany: cost 600; Driver: share 600, cost 0 (no line); Shared pending: cost 600 until the deduction is approved, then 300. Unpaid fines are not a cost
Salik / toll violationViolation Toll / Salik AED 100 (test), authority 'Salik', reference SLK-TEST-1Record; record the same reference againSaved; duplicate -> 'This fine is already recorded as FIN-...'

Accidents

ActionWhenWhat you doWhat happens
Report an accidentfleet.logReport with injuries ticked and estimate 8,000ACC-... Open; a High 'Body damage' service request from Accident; alert 'Accident: VHC-... - injuries reported' to fleet.accident.view holders; activity 'Accident reported'
Claim and repair from the accidentOpen accidentInsurance claim; Repair work order; CloseClaim CLM-... draft with estimate 8,000 and the live policy linked, accident Claim submitted; repair WO (Body work, External Garage, High), accident Repairing; second claim -> 'This accident already has a claim.'; Close -> Closed

Claims

ActionWhenWhat you doWhat happens
Claim to money receivedClaim from the accident aboveSubmit; Approved 7,000; Money received 3,000; Money received 4,000Submitted; Approved 7,000; Received 3,000 then 7,000 (added up), status Paid; ONE maintenance cost line of -7,000.00 'Insurance recovery ...' reduces the vehicle's TCO

Fleet Expenses

ActionWhenWhat you doWhat happens
Expense below the approval limit is approved at onceUser A has fleet.edit + fleet.cost.view; default rule 'Fleet expenses from AED 2,000'; post_costs offNew expense: vehicle VHC-00001, Cleaning, amount 1,999.99, VAT 95.24, Paid by Cash, SaveNumber FEX-00001, status Approved at once; one ledger line Cleaning 1,999.99 (VAT not added) dated today with the vehicle's branch / cost centre / project; vehicle activity 'Cleaning expense added'; no journal (posting off); audit entry written
Expense at the limit waits for a second personAs aboveNew expense Toll 2,000.00 (exactly the limit); look at the list and the Waiting approval tabStatus Waiting approval (rule applies from amount >= 2,000); NO ledger line yet; everyone with the approver permission except A is notified 'Approve fleet expense FEX-00002: 2,000.00 for VHC-00001' (24 h due)
Approve by another personExpense FEX-00002 Waiting approval; user B holds fleet.workorder.approveB opens Costs > Fleet Expenses > Waiting approval and clicks ApproveStatus Approved, Approved by = B; ledger line Toll 2,000.00 now exists and dashboard / TCO include it; the approval notification is resolved; activity 'Toll expense added'
Nobody approves their own expenseA created FEX-00002 and also holds the approver permissionA clicks Approve on their own expenseRefused: 'Somebody other than the person who asked has to approve it.'; status unchanged; no ledger line
Approver permission is neededUser C has fleet.cost.view but not the approver permissionC clicks Approve (or calls the approve action)Refused: 'You cannot approve this.'; status unchanged
Reject and resubmitExpense Waiting approvalB clicks Reject; then A opens the Rejected expense, lowers the amount to 1,500 and savesAfter Reject: status Rejected, no ledger line. After the edit: amount below the limit so it is Approved at once and booked (a rejected expense may be changed and sent again; a Rejected one over the limit goes back to Waiting approval)
Approved expense is lockedApproved expense FEX-00001Open it, change the amount, SaveRefused: 'An approved expense cannot be changed.'
Posting a paid-on-the-spot expenseFleet Settings: post fleet costs ON, account for Cleaning = 5430, cash account 1010; branch + project on the vehicleCreate Cleaning 150.00, Paid by Cash (below limit)Journal: Dr 5430 150.00 / Cr 1010 150.00, source Fleet, with branch, cost centre, department and project dimensions; ledger line shows Posted = Yes; expense remembers the journal id
Vendor bill and employee-paid are not double postedPosting ONCreate Parking 80.00 Paid by 'Vendor bill (entered in Purchase)'; create another Paid by Company card 80.00Vendor bill: ledger line exists but NO journal (Purchase carries it). Company card: Dr parking expense 80.00 / Cr the card account (Fleet Settings 'Fuel card / company card' code, else the payable role)
VAT is information onlyNo postingExpense amount 105.00, VAT 5.00Cost line is 105.00 (not 110.00); VAT stored on the expense only
Tabs and searchExpenses in all four statesClick each tab; search 'RCPT-7781'; sort by AmountTabs filter by status with counts; search matches number, paid to, reference, description; paging by the server

Fuel Costs

ActionWhenWhat you doWhat happens
Fuel ledger follows fuel fillsTwo fills: 45 L at 128.25 and 30 L at 85.50 on VHC-00001 this monthOpen Costs > Fuel CostsTwo lines (category Fuel, From fuel, reference FUE-...), Amount 128.25 and 85.50; click a row opens the Vehicle 360; no create button; dashboard 'Fuel Cost This Month' is the sum 213.75

Maintenance Costs

ActionWhenWhat you doWhat happens
Maintenance and tyres together, recoveries as minusWork order parts 400 + labour 250; tyre purchase 900; insurance claim received 7,000 (recorded as minus line)Open Costs > Maintenance CostsLines for Maintenance 650 (one line per work order), Tyres 900 and Maintenance -7,000.00; no fuel or insurance lines; net on the page = 650 + 900 - 7,000 = -5,450

Lease Costs

ActionWhenWhat you doWhat happens
A lease charges every month it has runToday 2 Oct 2026; vehicle OWNEDNew lease: Type Lease, Start 2026-03-10, End 2028-03-09, Monthly rate 2,500; Save; scroll to 'Lease and rental charges'Number LSE-00001; vehicle ownership becomes Leased; 8 charge lines (March to October) of 2,500 = 20,000; the March line is dated 10 Mar, the others on the 1st (no proration of the first month, and October is charged on 1 Oct); saving again or the daily scan adds nothing twice
Status from datesToday 2 Oct 2026Save three leases ending 2026-09-01, 2026-11-15 and 2027-10-02Ended, Expiring (44 days left, within 60) and Active; tabs count accordingly
Mileage allowance, yearlyLease start 2026-01-01, 30,000 km per year, excess 0.50 per km, start odometer 50,000, vehicle now at 74,000, today 2 Oct 2026Open Lease Costs and read 'Mileage used' and 'Excess charge'Days elapsed 274 / 30.4 = 9.01 months x (30,000 / 12 = 2,500) = allowed 22,533 km; used 24,000; shows '24000 / 22533 km (106.5%)'; excess 1,467 km x 0.50 = 733.50
Mileage allowance for the whole contract and per monthSame vehicleChange Allowance per to Whole contract with limit 90,000; then to Month with limit 2,500Whole contract: allowed 90,000, used 24,000 = 26.7%, excess 0.00. Month: per-month 2,500 (not divided by 12) x 9.01 = 22,533, same as the yearly case. No limit entered: shows '—' and no excess
Lease mileage alertAlert rule 'Lease mileage nearing its limit' activeRun the daily scan with used 90% and again at over 100%One notification at 90 and one at 100 (each once per lease)
End a contract todayActive lease to 2028-03-09Click End, confirm 'End this contract today?'End date set to today (never later than the old end), status Ended; months already charged stay; no more monthly charges; End button disappears; running End again on an ended lease is not blocked
Lease dates and permissionUser with fleet.cost.view but no fleet.editSave a lease with End = Start; then try saving as the view-only user'The contract ends after it starts.'; view-only user is refused by the server (fleet.edit needed to save or end)

TCO

ActionWhenWhat you doWhat happens
Cost of owning one vehicle over a periodVehicle owned: price 120,000, residual 30,000, life 60 months, bought 2025-03-15. Ledger 1 Jan - 30 Sep 2026: Fuel 3,000; Maintenance 1,200; Tyres 800; Insurance 2,400; Registration 450; Toll 120; Fines 200; Cleaning 80. Odometer 45,000 before 1 Jan, 52,500 at endTCO, From 2026-01-01 To 2026-09-30Depreciation = (120,000 - 30,000) / 60 = 1,500 a month x 9 = 13,500. Columns: Fuel 3,000; Maintenance & tyres 2,000; Insurance 2,400; Registration toll parking 570; Fines 200; Depreciation 13,500; Other 80; Running cost 21,750 (sum). Purchase column is blank/0 because the purchase was before the period. Distance 7,500; Cost / km 21,750 / 7,500 = 2.90; Cost / month 21,750 / 9 = 2,416.67
Whole life of each vehicleSame vehicle, today 2 Oct 2026Tick 'Whole life of each vehicle'Period becomes 2025-03-15 to today; depreciation 19 months x 1,500 = 28,500 (the 2 Oct day is before the 15th so the current part-month is not counted); Purchase column shows 120,000 (purchase falls inside the period) but it is NOT part of Running cost
Part months in depreciationSame vehiclePeriod 2026-01-20 to 2026-09-30, then 2026-01-20 to 2026-09-10First: 8 whole months + 1 (end day 30 is on or after start day 20) = 9 x 1,500 = 13,500. Second: 8 months + 0 (10 is before 20) = 8 x 1,500 = 12,000
Depreciation stops: fully depreciated, sold, leasedA: bought 2020-01-01 (60-month life); B: same as the first vehicle but sold 2026-06-30; C: ownership LeasedTCO 2026-01-01 to 2026-09-30A: 0 (all 60 months done before the period). B: stops at the sale date, 6 months x 1,500 = 9,000. C: no depreciation at all (only Owned and Financed vehicles with a purchase date and price depreciate; its lease cost is in the Lease / rental column)
Cost / km differs between TCO and Cost / KMVehicle of the first TCO caseOpen Reports > Cost / KM for the same datesCost / KM uses ledger costs only: 8,250 / 7,500 = 1.10 (no depreciation) while TCO shows 2.90. Both are right by their own definition - testers must not report one as a mismatch
No distance, no cost per kmVehicle with no odometer readings in the periodOpen TCODistance 0 and Cost / km shows '—' (no division by zero); Cost / month still shows
Sort, export and totalsThree vehiclesClick Running cost heading twice; click ExportRows sort highest first then lowest; CSV named tco has the same columns and rows; Total row adds money columns and distance (not Cost / km)
PermissionUser with fleet.cost.view onlyOpen TCO and the menuTCO entries are hidden; direct call refused (fleet.tco.view needed)

Cost Allocation

ActionWhenWhat you doWhat happens
Group by branchLedger 1 Jan - 30 Sep: Dubai branch Fuel 3,000 + Maintenance 1,000; Sharjah branch Fuel 1,500; one line with no branch 200Allocate by Branch, 2026-01-01 to 2026-09-30Rows largest first: Dubai (Fuel 3,000, Maintenance 1,000, Total 4,000), Sharjah (Fuel 1,500), '(none)' (200); category columns only for categories present; header Total 5,700
Other groupingsSame ledger with projects, drivers and customers on expense linesSwitch Allocate by to Project, Driver, Customer, Cost categoryEach grouping shows its own names (project 'PRJ-100 - Name', driver name, customer name) and the same grand total each time; Cost category groups by category
Period rulesAnyFrom after To; period over ten years'The period starts before it ends.' and 'Choose a period of at most ten years.'

Replacement Planning

ActionWhenWhat you doWhat happens
Score to suggestionFour vehicles. A: year 2019 (age 7 in 2026), odometer 260,000, 12-month maintenance 2,000, price 60,000 residual 6,000 bought 2019-10-01. B: year 2021, 160,000 km, 3 breakdowns. C: year 2021, 150,000 km. D: year 2024, 40,000 kmOpen Replacement PlanningA: age 7 = +2, 260,000 km = +2, book value = 60,000 - 54,000 = 6,000 and maintenance 2,000 > 30% of 6,000 (1,800) = +2, so score 6 = REPLACE with reasons. B: +1 age 5, +1 km, +1 breakdowns = 3 = REPLACE SOON. C: +1 +1 = 2 = REVIEW. D: 0 = KEEP
Thresholds and exclusionsVehicle with maintenance exactly 30% of book value; a sold vehicle; 240 hours downtimeOpen the pageExactly 30% adds nothing (must be above); sold / scrapped vehicles are not listed; 240 or more downtime hours adds +1; 3 or more breakdowns in 12 months adds +1; the suggestion never changes the vehicle's own Replacement status

Report pages

ActionWhenWhat you doWhat happens
Defaults, sort, exportAny reportOpen Fleet Summary; click a heading; click ExportDates default 1 Jan this year to today; headings sort asc/desc with an arrow; Export downloads a CSV of the sorted rows; 'Nothing in this period.' when empty
Fleet Summary arithmeticCategory Car: 3 vehicles (2 on the road, 1 in workshop), ledger cost 6,000, odometer distance 10,000 kmOpen Fleet SummaryRow Car: Vehicles 3, Active 2, In maintenance 1, Sold 0, Distance 10,000, Cost 6,000.00, Cost / km 0.60; sold vehicles are counted in 'Sold / scrapped'; totals add counts, distance and cost
Accidents and Fines totalsTwo accidents (estimated 4,000 and 2,500); three fines 300, 400, 100 with driver share 150, 0, 100Open Accidents, then FinesAccidents total 6,500; Fines Amount total 800 and Driver share 250; only records with a date inside the period

Vehicle Utilization

ActionWhenWhat you doWhat happens
Utilization and downtime percentagesPeriod 1 - 30 Sep (30 days), working hours 10 a day. Trips: three days of 8 h, two days of 12 h. Work order downtime 36 hOpen Vehicle UtilizationUsed hours: 3 x 8 + 2 x min(12, 10) = 44 / (30 x 10 = 300) = 14.7, shown 15%; Downtime 36 / (30 x 24 = 720) = 5.0%; Idle = 100 - 15 - 5 = 80.0%; footer shows the average utilization

Cost / KM

ActionWhenWhat you doWhat happens
Cost per km and orderingV1 cost 1,800 over 3,000 km; V2 cost 2,500 over 2,000 km; V3 cost 400 with 0 kmOpen Cost / KMOrder V2 (1.25), V1 (0.60), V3 blank '—'; total row: cost 4,700, distance 5,000, Cost / km 0.94

Fuel Efficiency

ActionWhenWhat you doWhat happens
AveragesVehicle with two measured fills at 9.00 and 11.00 L/100 km (11.11 and 9.09 km/L); rated normal 9.5Open Fuel EfficiencyL / 100 km = (9 + 11) / 2 = 10.00; KM / L is the average of the stored per-fill values = about 10.10 (not 100 / 10.00); Normal 9.50 shown; fills without a measured consumption are left out

Maintenance report

ActionWhenWhat you doWhat happens
Work order totalsWO1 parts 400, labour 250, outside 0, downtime 6 h; WO2 parts 0, labour 300, outside 1,200, downtime 30 h; WO3 cancelled parts 999Open Maintenance reportOne row: Work orders 2, Parts 400, Labour 550, Outside 1,200, Total 2,150, Downtime 36; the cancelled order is ignored

Downtime

ActionWhenWhat you doWhat happens
Downtime and time between failures30-day period; completed work order downtime 36 h; 3 breakdowns, one without a work order (4 h) with tow costs 150, 0 and 200Open DowntimeDowntime 36 + 4 = 40 h; Breakdowns 3; Breakdown cost 350.00; Mean time between failures = 30 x 24 / 3 = 240.0 h; no breakdowns shows '—'

Driver report

ActionWhenWhat you doWhat happens
Counts only, no scoreDriver with 12 completed trips (1,450 km), 2 fines (AED 700) and 1 accident in the periodOpen Driver reportRow shows Trips 12, Distance 1,450, Fines 2, Fine amount 700.00, Accidents 1; note 'Counts of recorded events - no score of any person.'; only active drivers listed

Report pages (Expiry)

ActionWhenWhat you doWhat happens
Expiry ignores the datesDocuments expiring in 20, 100 and 200 days, plus one expiredOpen Expiry; change From / ToShows items expired or expiring within the next 120 days (the 20-day, 100-day and expired ones); the dates on the page do not change the result

All Reports

ActionWhenWhat you doWhat happens
Catalogue and permissionsUser with fleet.view and fleet.fuel.view onlyOpen All Reports; open Fuel Efficiency; try Cost / KM27 tiles; tiles for reports needing other permissions are greyed 'Needs another permission' and cannot be opened; '← All reports' returns to the grid

Pivot

ActionWhenWhat you doWhat happens
Cost by vehicle and monthV1 costs Jan 500, Feb 700; V2 Feb 300Rows Vehicle, Columns Month, Measure Cost, 2026-01-01 to 2026-02-28Columns Jan 2026 and Feb 2026; V1 500 / 700 / total 1,200; V2 blank / 300 / 300; column totals 500 / 1,000; grand total 1,500; rows sorted largest first
Other measures and permissionsUser with fleet.view onlyMeasure Cost; then Fuel (L), Distance, Trips, Downtime, Maintenance countCost is refused (fleet.cost.view); the other measures open. Cost by Driver uses the driver on the cost line, else the vehicle's current driver. Rows are capped at 500

Graphs

ActionWhenWhat you doWhat happens
Four chartsSix months of dataOpen GraphsFuel Cost by Month and Maintenance Cost Trend show 6 columns (May 2026 to Oct 2026 on 2 Oct 2026); Cost / KM and Utilization show up to 20 vehicles, highest first; long names cut to 11 letters plus '…'; a user without fleet.cost.view sees an error on the cost charts

Configuration (all lists)

ActionWhenWhat you doWhat happens
First open seeds the companyNew company that has never opened FleetOpen any Configuration listDefaults appear: 15 categories, 15 makes, 6 fuel types, 12 service types, 14 cost categories, 11 body types, 9 violation types, 4 coverage types, 8 request types, 6 country profiles, 26 document types, inspection templates, 5 maintenance plans, 14 alert rules, 5 approval rules

Vehicle Categories

ActionWhenWhat you doWhat happens
Add a categoryUser with fleet.configureNew: Code 'mobile crane', Category Mobile Crane, Arabic رافعة متنقلة, Counts engine hours on, SaveSaved with code MOBILE_CRANE; appears in the vehicle form picker; the vehicle form then asks for engine hours

Vehicle Categories / Makes / Fuel cards

ActionWhenWhat you doWhat happens
Delete turns into switch-off when in useCategory used by a vehicle; make used by a vehicle; fuel card used by a fill; an unused categoryDelete eachUsed ones are NOT deleted: category / make set Inactive, card set Cancelled, message 'It is used by existing records, so it was switched off instead.'; the unused one is deleted for good

Makes / Models

ActionWhenWhat you doWhat happens
Make and modelMake Toyota existsAdd model Hilux (Pickup, Diesel, tank 80, rated 9.5); add Hilux againFirst saved; the second is refused by the database (make + model unique)

Fuel Types / Service Types / Cost Categories

ActionWhenWhat you doWhat happens
Lists never hard-deleteAny entryDelete 'LPG'Always switched off ('Lookups used by records are switched off rather than deleted.') even if unused; set Active back on to restore

Vehicle Statuses

ActionWhenWhat you doWhat happens
Fixed listAny user with fleet.viewOpen the page; try to add through the APITen statuses shown, no New button; API gives 'This list is fixed by the product.'

Maintenance Plans

ActionWhenWhat you doWhat happens
Plan drives the due boardPlan 'Oil change' every 10,000 km / 180 days, trigger Whichever comes firstAdd the plan, open Preventive Maintenance for a vehicle at 50,000 km last serviced at 40,000The board shows the plan due at 50,000 km; changing the plan interval changes due dates for all vehicles it applies to

Document Types / Permit Types

ActionWhenWhat you doWhat happens
Pages split by groupTypes in groups registration, permit, toll, customs, cross_borderOpen Document Types and Permit TypesPermit, Cross-border, Customs and Toll groups appear only on Permit Types; the others only on Document Types; both save to the same register

Inspection Templates

ActionWhenWhat you doWhat happens
Edit checklist itemsTemplate with 11 itemsAdd item 'Fire extinguisher' group Safety photo on; leave one new row blank; remove one item; SaveItem saved with code fire_extinguisher; the blank row is dropped; removed item gone; new checklists use the new list, old ones keep theirs

Fuel Cards

ActionWhenWhat you doWhat happens
Card number maskingUser with fleet.fuel.viewAdd card 7002123456784321; reopen it; Save without touching the numberList shows '•••• 4321' only; reopening shows the masked value and saving it keeps the real number; typing a new full number replaces it; short or non-alphanumeric input -> 'Enter the card number.'
Limits flag, not blockCard monthly limit 2,000, per fill 300; fills 280, 290 then 320Log the three fills with that card (Operations > Fuel)The 320 fill is flagged over card limit (320 > 300 per fill); a fill that takes the month over 2,000 is flagged too; fills are still saved and wait for review

Toll & Parking

ActionWhenWhat you doWhat happens
Low balance alertSalik account balance 40, Warn below 50Run the daily scanA low-balance alert 'Balance 40' is raised; top up to 60 and no new alert

Alert Rules

ActionWhenWhat you doWhat happens
Rule changes who is toldRule 'Insurance expiring' days 120 90 60 30 15 7 0Change days to 45, 15, 0 and untick Everyone in Fleet, tick Costs; run the scan for a policy expiring in 45 daysAlert sent only to people holding fleet.cost.view (plus named users) on day 45, 15 and 0

Approval Rules

ActionWhenWhat you doWhat happens
Expense limit movedDefault rule: expense from 2,000Change From amount to 500; then untick ActiveExpense of 600 now waits for approval; with the rule inactive no expense needs approval; the approver must hold the permission chosen in 'Approved by'

Country Profiles

ActionWhenWhat you doWhat happens
One per countryUAE profile existsAdd 'ae' againCode saved as AE; second profile refused by the database (unique per company)

Other Lists

ActionWhenWhat you doWhat happens
Hard delete of small listsViolation type 'speeding' used by finesDelete itDeleted outright (no in-use check); fines keep the old code text

Fleet Settings

ActionWhenWhat you doWhat happens
Save and validationUser with fleet.configureSet service soon km 25000, alert days 'ninety', working hours 0; Save; then set valid values and SaveEach invalid value refused with its message ('Between 0 and 20000.', 'Alert days are whole numbers, e.g. 120, 90, 60, 30, 15, 7, 0.', 'Between 1 and 24.'); valid values save, 'Saved.' shows, audit entry fleet.settings written
Posting accountsPosting ONEnter account 99999 for Fuel; then enter 5410 which exists; clear Cleaning'Account 99999 is not in the chart.'; 5410 saves; blank Cleaning falls back to a chart account named 'cleaning', else the expense role
Settings take effectSettings changed: due soon 1,000 km, fuel anomaly 10%, max daily km 400, hours 8Check Preventive Maintenance, log a fill 12% above normal, record a 500 km odometer dayPlans without own warning use 1,000 km; 12% fill flagged high consumption (10% limit); 500 km a day flagged unusual; utilization uses 8 working hours
PermissionUser with fleet.view onlyOpen Fleet Settings; SavePage opens read-only in effect; Save refused (fleet.configure needed). The same user also sees New / Delete on lists but the server refuses them

Telematics Providers

ActionWhenWhat you doWhat happens
Pointer pageUser with fleet.configureOpen Configuration > Telematics Providers; click Open GPS / TelematicsText and a button; GPS / Telematics screen opens

Feature switches

ActionWhenWhat you doWhat happens
Turn Leases offCompany administrator; Leases switchTurn Leases off; open Costs; try to save a lease through the API; turn back onLease Costs menu disappears; saving or ending a lease is refused with capability_disabled; existing leases and charges stay readable; on again restores everything
Fines, accidents and claims offSwitch offOpen Reports and Compliance menusAccidents and Fines report entries and the three Compliance entries disappear; Driver report counts of earlier fines still show
Field rulesSet VIN Required and Police report number HiddenSave a vehicle without VIN; report an accident with a police report numberVehicle not saved without VIN; value for a hidden field sent on a new accident is refused