Maintenance
Managing fleet maintenance in WinTrack — work orders, the due-by-km/date engine, the customizable maintenance-type catalog, vendors/executors (in-house vs external shops) with per-vendor spend, tires & batteries, fault reports, and fixed costs.
The Maintenance section is your fleet's operational memory: every service, tire, battery, fault report, and fixed cost — recorded on the right asset, in a permanent history. It is built for fleets whose work happens at third-party shops: the record and the cost stay yours, not the shop's.
Works without any tracking device
Everything here runs on manual entry: type the odometer reading at each service (it is printed on the shop's job card anyway) and due dates keep computing themselves. With Afaqy devices bound, asset odometers refresh automatically every few minutes — automation is an add-on, not a requirement.
Work order = maintenance record
«Work order» and «maintenance record» are the same record in the database, shown in two screens: Maintenance is the full register (search, filters, Excel export), while Work Orders is the technician workspace with one-click transitions (Start / Complete / Cancel). There are no two record types.
Sidebar
Click any screen name to open it in the app.
| Screen | Path | Contents |
|---|---|---|
| الصيانة (Maintenance) 🛠️ | /maintenance | Full register + due bands + export |
| أوامر العمل (Work Orders) 🧰 | /maintenance/work-orders | Active-record workspace with quick transitions |
| البلاغات والأعطال (Fault Reports) 🚩 | /issues | Problems drivers report on their equipment |
| أنواع الصيانة (Maintenance Types) 🏷️ | /maintenance/catalog | Customizable maintenance-type catalog |
| الورش والموردون (Vendors) 🏭 | /maintenance/vendors | Registry of maintenance executors — your in-house workshop and external shops |
The «Maintenance» page
Due bands (top of page)
Three bands summarize the whole fleet — they ignore the table filters:
-
Summary band — an «متأخرة» (overdue, red) tile, a «مستحقة خلال 30 يوم» (due within 30 days) tile, and one tile per category with its count.
-
«مستحق على مستوى الأصل» (due at asset level) — per-truck/trailer thresholds:
Column Meaning Asset / Type Truck (WinTrack # + plate) or trailer كم للصيانة (km to service) Remaining to the asset's km threshold ساعات للصيانة (hours to service) Remaining to the engine-hours threshold (from tracking) Status «متأخر» (overdue, red) or «قريب» (soon, amber) An asset appears when the remaining distance is ≤ 5,000 km, remaining hours ≤ 100, or the due date is within 30 days; it is «overdue» at ≤ 0 or past the date.
-
«مستحق بالمسافة (إطارات / بطاريات)» (due by distance — tires/batteries) — parts nearing the end of their life: «قارب الأجل» (due soon, yellow) or «متأخر» (overdue, red).
Empty means empty
The due bands are hidden entirely when nothing is due — an empty band means «nothing due right now», not a malfunction.
Table and filters
- Search by record number or description; filters for category, status, maintenance type, vendor, assigned technician/shop, and date range.
- Columns: record number · asset · category · status · type · vendor · description · cost (SAR) · completion date · next due (km) · assigned technician.
- The Excel button exports exactly these columns (Arabic headers).
Creating a work order
The «+ أمر عمل» button opens the shared create form:
| Field | Required | Notes |
|---|---|---|
| Asset | ✅ | Toggle 🚚 vehicle / 🛻 trailer — exactly one |
| Category | ✅ | Tires / battery / periodic service (default) / repair |
| Class + type | — | From the maintenance-type catalog: preventive / corrective; «— عام —» means no specific type |
| Description | ✅ | What the work was |
| Cost (SAR) | — | Negative values rejected («المبلغ غير صالح») |
| Service odometer (km) | — | Odometer reading at service time |
| Interval (km) | — | Kilometres until the next service |
| Next due (km / date) | — | Auto-computed if left empty (see below) |
| Vendor (الجهة المنفذة) | — | Who performed the work: the in-house workshop or an external shop from the Vendors registry — «— بلا —» when left empty |
| Assigned technician | — | The shop or technician who performed the work |
| Status | — | Defaults to «مفتوحة» (open) |
| Start / completion dates, notes | — | — |
- Automatic numbering: the server issues the record number (MNT001…); it is not typed manually.
- Next-due derivation: leave «next due (km)» empty and the system computes service odometer + interval; if the interval is empty too, the tenant's default service interval is used.
- Write-back to the asset: on save, the next due value is written onto the vehicle/trailer itself — which is what feeds the asset-level due band.
Exactly one asset
A record belongs to a vehicle or a trailer — never both. The web form blocks it before saving, and the API rejects it with «يجب تحديد إما مركبة أو مقطورة (وليس الاثنين معًا)».
Record statuses
| Status | Colour | Meaning |
|---|---|---|
| مفتوحة (open) | amber | Recorded, work not started |
| قيد التنفيذ (in progress) | blue | Work ongoing |
| مكتملة (completed) | green | Done — with completion date and cost |
| ملغاة (cancelled) | grey | Cancelled — excluded from due bands |
From Work Orders, transitions are one click: open → بدء (start) / إكمال (complete) / إلغاء (cancel); in-progress → complete / cancel; finished records → إعادة فتح (reopen). Complete stamps the completion date if it was empty. An active record past its due date also counts in the «overdue» tile.
Completed records still surface
A completed record carries the next service (its future due km/date), so it still appears in the upcoming band — only cancelled records are excluded.
Maintenance types (the customizable catalog)
The Maintenance Types page classifies every type by:
- Class: preventive (category «periodic service») or corrective (category «repair»).
- Code: a stable key — immutable after creation.
- Arabic name (required), optional English name, display order, active toggle.
12 defaults are seeded automatically per tenant on first visit — preventive: صيانة دورية 1/2/3, صيانة دورية شاملة (periodic service 1/2/3, full periodic service); corrective: صيانة ميكانيكية (mechanical), صيانة كهربائية (electrical), إصلاح حوادث (accident repair), نظام الفرامل (brake system), الشاسی (chassis), لحام (welding), إصلاح إطارات (tire repair), أخرى (other).
Delete deactivates instead
A type referenced by existing records is never hard-deleted — it is deactivated, with the message «تم إلغاء التفعيل لوجود سجلات مرتبطة». This keeps your history intact. Managing the catalog is limited to admin/CEO; everyone else reads it.
Vendors / executors (in-house workshop & external shops)
The الورش والموردون (Vendors) page is your registry of who performs maintenance: in-house (your own team) or external shop (a third-party vendor). Every maintenance record can reference one of them, so you can compare in-house cost against outsourced cost over time.
Managing the registry (add/edit/delete): Arabic name (required — unique within your company), optional English name, kind (in-house / external), phone, notes, and an active toggle. The pickers in the work-order form list active vendors only.
Per-vendor spend («تكلفة الصيانة حسب الجهة»)
A spend band appears at the top of the Maintenance page (hidden when no costed work orders exist):
- Tiles: in-house · external shops · no vendor · grand total — each with its work-order count and total cost in SAR.
- Per-vendor table: orders and cost per vendor, sorted by spend (highest first).
- Cancelled records are excluded; each record is dated by its completion date (or creation date if not yet completed) to define the window.
Delete is soft — history stays
Deleting a vendor never erases it from your history: past work orders keep showing the vendor's name as-is, the spend band keeps naming it with a «(محذوفة)» (deleted) marker, and its name is freed for a new vendor to reuse. Every add/edit/delete is written to the audit log.
Tires & batteries (consumable parts)
The «الإطارات والبطاريات» card on the vehicle and trailer pages (button «+ إضافة قطعة») tracks each part's life:
- Fields: type (tire / battery / oil filter / oil / filter / brake pads / other), name (required — e.g. «ميشلان 295/80»), serial, position (e.g. «أمامي يمين» = front right), odometer at install, expected life in km (tires) or months (batteries), and financials (purchase date, purchase price, salvage value) for book value.
- Life state is computed automatically: «سليم» (good, green) → «قارب الأجل» (due soon, yellow: ≤ 5,000 km or ≤ 1 month left) → «متأخر» (overdue, red) — with a progress bar per part. Mark a part «مُستبعَدة» (retired) on replacement.
- Summary: installed vs expected count per type, total book value, and replacement cost (from that asset's tire/battery maintenance records).
Fault reports
Reports raised by drivers from their app on the equipment assigned to them (optional photo). They appear on the Fault Reports page:
- Tiles: total / open (red) / resolved (green).
- Each report shows the asset, who reported it (driver or back-office user), description, photo, and date.
- The single admin action: «تحديد كمحلول» (mark resolved) — closes the report and fires notifications. An open report sets the driver's assignment to «fault reported» until resolved.
Fixed costs & running cost
The «التكاليف الثابتة والتكلفة التشغيلية» card on vehicle and trailer pages records recurring costs: insurance, registration, periodic inspection, operation card, authorization, other — each with an amount and a period: annual (default) / semi-annual / quarterly / monthly / one-time.
Annualization multiplies by period (annual ×1, semi-annual ×2, quarterly ×4, monthly ×12; one-time = 0 per year — shown in the breakdown only). The tiles show fixed costs per year + annual depreciation = annual running cost, and its monthly equivalent — the true cost of owning each asset.
Fixed costs are write-gated
Viewing and adding fixed costs requires a write role (admin, CEO, operations manager, assets manager) — regional supervisors and client users do not see this card's data.
Importing maintenance history from Excel
The bulk import module (onboarding) brings your legacy history in:
- Download the template, then upload the file (Excel or CSV) — processed in the background.
- Key columns: record number, vehicle/trailer (by WinTrack # or plate), category, description, cost, assigned technician, service odometer, interval, next due (km/date), start/completion dates, status, and the type code.
- A «vendorName» column links the record to a vendor by name (Arabic or English) from the Vendors registry. Unknown names are silently ignored — the import never auto-creates vendors (create them first on the Vendors page, then import).
- Dry-run first: «validate» checks the file row by row and reports per-row errors before anything is written.
- A row with an existing record number updates that record (safe, repeatable migration); a row without one creates a new auto-numbered record.
- Historical import does not touch the assets' current due thresholds — old data cannot clobber live odometer-based values.
Permissions
| Capability | Roles |
|---|---|
| Read maintenance, work orders, reports, types, vendors | Admin, CEO, operations manager, assets manager, regional supervisor (client: read-only) |
| Create/edit records, resolve reports | Admin, CEO, operations manager, assets manager |
| Manage maintenance types, vendors, bulk import | Admin, CEO (import also: operations & assets managers) |
Good to know
- Updates never clear fields: a field left empty on edit keeps its old value — you cannot blank a cost after writing it; set it to 0 instead.
- Arabic-first screens: the maintenance screens render their labels in Arabic (statuses and categories), with Western digits.
- «— عام —» in the type list is not a stored type — it means "no specific type".
- The spend band aggregates all non-cancelled records — its numbers ignore the table filters beneath it.
- Deleting a record hides it from lists (soft delete) and frees its number for reuse.