{{-- ── KPI Row ───────────────────────────────────────────────── --}}
{{ $kpis['wo_critical'] }}
OT críticas abiertas
{{ $kpis['wo_open'] + $kpis['wo_in_progress'] }} total activas
{{ $kpis['pm_overdue'] }}
PMs vencidos
{{ $kpis['pm_due_soon'] }} próximos 7 días
{{ $kpis['equipment_active'] }}
Equipos activos
{{ $kpis['equipment_maint'] }} en mantenimiento · {{ $kpis['equipment_total'] }} total
{{ $kpis['parts_out'] }}
Repuestos sin stock
{{ $kpis['parts_low'] }} con stock bajo
{{ $kpis['wo_in_progress'] }}
OT en proceso
{{ $kpis['wo_open'] }} abiertas sin asignar
{{-- ── Main 2-col grid ──────────────────────────────────────── --}}
{{-- Upcoming PMs --}}
📅 PMs próximos (30 días) Ver todos →
@forelse($upcomingPMs as $pm) @php $days = $pm->days_until_due; $cls = $days === null ? '' : ($days < 0 ? 'due-overdue' : ($days <= 7 ? 'due-soon' : 'due-ok')); $dueLabel = $days === null ? '—' : ($days < 0 ? "Vencido hace ".abs($days)."d" : ($days === 0 ? 'Hoy' : "En {$days}d")); @endphp
{{ $pm->equipment->name ?? '—' }}
{{ $pm->name }} · {{ MaintenancePlan::FREQUENCY_TYPES[$pm->frequency_type]['label'] ?? $pm->frequency_type }}
{{ $dueLabel }}
▶
@empty
Sin PMs programados en los próximos 30 días.
@endforelse
{{-- Urgent Work Orders --}}
🔧 Órdenes activas Ver todas →
@forelse($urgentOrders as $wo)
{{ $wo->priority_label }} {{ $wo->title }}
{{ $wo->code }} · {{ $wo->equipment->name ?? '—' }}
{{ $wo->status_label }}
@empty
No hay órdenes activas. ✅
@endforelse
{{-- Equipment status breakdown --}}
🏭 Estado de equipos Ver todos →
@foreach(App\Models\Equipment::STATUSES as $key => $meta) @php $cnt = $equipByStatus[$key] ?? 0; @endphp
{{ $cnt }}
{{ $meta['label'] }}
@endforeach
@if($kpis['equipment_total'] === 0)
Sin equipos registrados aún.
Importar equipos →
@endif
{{-- Low stock parts --}}
📦 Repuestos con stock bajo Ver todos →
@forelse($lowParts as $part) @php $pct = $part->min_stock > 0 ? min(100, round($part->current_stock / $part->min_stock * 100)) : 0; $barColor = $part->current_stock <= 0 ? '#dc2626' : '#d97706'; @endphp
{{ $part->name }}
{{ $part->code }} · mín {{ $part->min_stock }} {{ $part->unit_of_measure }}
{{ $part->current_stock }} {{ $part->unit_of_measure }}
@empty
Todos los repuestos tienen stock suficiente. ✅
@endforelse