| WO # | Type | Asset | Title | Status | Due |
|---|---|---|---|---|---|
| {{w.woNo}} | {{w.type==='Preventive'?'PM':'CM'}} | {{assetName(w.assetId)}} | {{w.title}} | {{w.status}} | {{dueLabel(w).t}}{{dueLabel(w).t}} |
| Part | Avail | Min |
|---|---|---|
| {{i.name}} {{i.partNo}} |
{{i.qtyAvailable}} | {{i.minLevel}} |
| WO # | Type | Priority | Asset | Title | Work Performed / Description | Assigned | Raised by | Status | Due | Downtime | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{g.label}} {{g.rows.length}} | |||||||||||
| {{w.woNo}} | {{w.type==='Preventive'?'PM':'CM'}} | {{w.priority||'—'}} | {{assetName(w.assetId)}} | {{w.title}} | {{w.description||'—'}} | {{w.assignedTo||'—'}} | {{userName(w.createdBy)}} | {{w.status}} | {{dueLabel(w).t}}{{dueLabel(w).t}} | {{fmtDur(w.downtimeHours)}} | |
| Done ✓ | Asset | Task | Frequency | Frequency (days) | Last Done | Next Due | Status | |
|---|---|---|---|---|---|---|---|---|
| {{assetName(s.assetId)}} | {{s.task}} | {{s.frequency||freqLabel(s.frequencyDays)}} | {{s.frequencyDays}} d | {{s.lastDone||'—'}}today | {{s.nextDue}} | {{pmStatus(s).t}} |
| Code | Name | Category | Location | Criticality | Status | Parts | Added by | |
|---|---|---|---|---|---|---|---|---|
| {{a.code}} | {{a.name}} | {{a.category||'—'}} | {{a.location||'—'}} | {{a.criticality||'—'}} | {{a.status||'—'}} | {{(a.parts||[]).length||''}} | {{a.createdBy||'—'}} |
Part watch-list
| Machine | Part | Predicted | Life used | Spare | Risk | Recommended action |
|---|---|---|---|---|---|---|
| {{w.assetCode}} {{w.assetName}} |
{{w.partName}} {{w.partNo}} · every ~{{w.expectedLifeDays}}d · {{w.confidence}} |
{{w.predictedWindow}}accelerating | {{w.lifeUsedPct}}% | {{w.sparesOnHand}} | {{w.band}} | {{w.action}} |
Most-replaced parts (fleet)
| Part | Replacements | Avg life |
|---|---|---|
| {{p.partName}} {{p.partNo}} | {{p.replacements}} | {{p.fleetMtbrDays ? '~'+p.fleetMtbrDays+'d' : '—'}} |
| Part No. | Name | Category | Location | Available | Used | Min | Stock | |
|---|---|---|---|---|---|---|---|---|
| {{i.partNo}} | {{i.name}} | {{i.category||'—'}} | {{i.location||'—'}} | {{i.qtyAvailable}} | {{consumedQty(i.id)}} | {{i.minLevel}} |
| Task | Asset | Frequency | Due | Overdue |
|---|---|---|---|---|
| {{s.task}} | {{assetName(s.assetId)}} | {{s.frequency||freqLabel(s.frequencyDays)}} | {{s.nextDue}} | {{-s.days}}d |
| Task | Asset | Frequency | Due | In |
|---|---|---|---|---|
| {{s.task}} | {{assetName(s.assetId)}} | {{s.frequency||freqLabel(s.frequencyDays)}} | {{s.nextDue}} | {{s.days}}d |
| Asset | Jobs | Downtime |
|---|---|---|
| {{k==='none'?'(unassigned)':assetName(k)}} | {{v.jobs}} | {{fmtDur(v.downtime)}} |
| Part | Used | Avail |
|---|---|---|
| {{c.i.name}} {{c.i.partNo}} | {{c.used}} | {{c.i.qtyAvailable}} |
| Date | WO # | Type | Asset | Title | Tech | Downtime |
|---|---|---|---|---|---|---|
| {{w.completedDate||'—'}} | {{w.woNo}} | {{w.type==='Preventive'?'PM':'CM'}} | {{assetName(w.assetId)}} | {{w.title}} | {{w.assignedTo||'—'}} | {{fmtDur(w.downtimeHours)}} |
| When | User | Action | Details |
|---|---|---|---|
| {{fmtTs(a.ts)}} | {{a.username}} | {{a.action}} | {{a.detail}} |
| Name | {{t('Trade')}} | {{t('Phone')}} | Username | |
|---|---|---|---|---|
| {{u.name||'—'}}you | {{u.trade||'—'}} | {{u.phone||'—'}} | {{u.username}} |
User: upload, download/export, create & edit — but cannot delete data or manage users.
| Name | Username | Note | Requested | |
|---|---|---|---|---|
| {{ s.name }} | {{ s.username }} | {{ s.note||'—' }} | {{ fmtTs(s.requestedAt) }} |
| Name | Username | Role | Created | |
|---|---|---|---|---|
| {{u.name||'—'}}you | {{u.username}} | {{u.role}} | {{u.createdAt?fmtTs(u.createdAt):'—'}} |
| Plant | Location | Created | |
|---|---|---|---|
| {{p.name}}current | {{p.location||'—'}} | {{p.createdAt?fmtTs(p.createdAt):'—'}} |
| # | Machine | PMs done | Breakdowns | Downtime | Care score |
|---|---|---|---|---|---|
| {{i+1}} | {{r.code}} · {{r.name}} | {{r.pmDone}} | {{r.breakdowns}} | {{ r.downtimeH ? fmtDur(r.downtimeH) : '—' }} | {{r.care}} |
| # | Machine | Breakdowns | Downtime | Last breakdown |
|---|---|---|---|---|
| {{i+1}} | {{r.code}} · {{r.name}} | {{r.breakdowns}} | {{ r.downtimeH ? fmtDur(r.downtimeH) : '—' }} | {{r.lastBreakdown||'—'}} |
{{S.assetHealth.ai.data.summary}}
- {{c.cause}} — {{c.evidence}}
- {{r.action}} — {{r.why}}
| Part | Times failed | Avg between failures | Planned service | Flag |
|---|---|---|---|---|
| {{p.name}} | {{p.count}} | {{ p.avgDays!=null ? 'every '+p.avgDays+'d' : '—' }} | {{ p.planned ? 'every '+p.planned+'d' : '—' }} | ⚠ failing faster than plannedrecurring— |
| Date | Fault | Root cause | Prevention noted | Parts | Downtime |
|---|---|---|---|---|---|
| {{ w.completedDate||w.createdDate||w.dueDate||'—' }} | {{w.title}} {{w.description}} |
{{w.rootCause||'—'}} | {{w.preventiveAction||'—'}} | {{ (w.partsUsed||[]).map(p=>invName(p.invId)).join(', ')||'—' }} | {{ w.downtimeHours ? fmtDur(w.downtimeHours) : '—' }} |
| # | Technician | {{t('Jobs')}} | {{t('On-time')}} | {{t('Avg downtime')}} | {{t('Quality')}} | Awards |
|---|---|---|---|---|---|---|
| {{i+1}} | {{r.name}}{{t('You')}} {{r.trade}} {{t('needs')}} {{S.awards.data.minJobs}}+ {{t('jobs to qualify')}} | {{r.jobs}} | {{ r.onTimePct==null ? '—' : r.onTimePct+'%' }} | {{ r.avgDowntime==null ? '—' : r.avgDowntime+'h' }} | {{ r.quality==null ? '—' : r.quality }} | {{b.icon}} |
| # | Technician | {{t('Jobs')}} | {{t('Quality')}} | |
|---|---|---|---|---|
| {{i+1}} | {{r.name}} | {{r.jobs}} | {{ r.quality==null ? '—' : r.quality }} | {{b.icon}} |
{{q.message}}
Step-by-step guides to operate the software.
How do I create a work order?
Work Orders → + New Work Order. Pick the type, machine and spares used, set the status. Marking it Completed deducts the spares from stock.
How do I mark a PM task done?
On PM Schedules, tick the Done ✓ checkbox on that row. The next due date moves forward automatically.
How do I upload from Excel?
Backup / Data → download a template, fill it in Excel, then “↑ Upload file”. Re-uploading updates existing rows.
How do I get a new account?
On the login screen tap “+ Request an account”, choose your plant and submit. An admin approves it.
How do I install it on my phone?
Android (Chrome): ⋮ → Add to Home screen. iPhone (Safari): Share → Add to Home Screen.
Describe your problem — you'll get an instant suggested answer, and an admin can reply too.
{{q.message}}
Code, Name, Category, Location, Criticality, Status, Manufacturer, Model, Serial, Install Date.
Part No, Name, Category, Location, Qty Available, Min Level, Unit, Supplier.
Machine Code, Part No, Qty, Interval (days), Notes. Add machinery & spares first.
Machine Code, Task, Frequency (days), Last Done, Next Due, Active. Matched by machine + task.
All entered data as one Excel workbook — a sheet each for Work Orders, Machines, Spares, PM Schedules & Audit Log.
Replace this plant's data from a backup.
Delete all maintenance data (users kept).
{{S.db.assets.length}} assets · {{S.db.workOrders.length}} work orders · {{S.db.pmSchedules.length}} PM · {{S.db.inventory.length}} spares
Permanently delete data for any plant. The plant itself, its users, settings and audit trail are kept. This cannot be undone.