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