@extends('layouts.app') @section('title', 'Element 4: Vessel Reliability & Maintenance') @section('content')

Element 4: Vessel Reliability and Maintenance

Planned maintenance system, critical equipment management, failures tracking, spare parts lifecycle, and reliability metrics

Vessel Reliability & Maintenance Dashboard

{{ $equipment->count() }}

Total equipment items

{{ $equipment->where('is_critical', true)->count() }}

Critical equipment identified

@php $activeSchedules = $equipment->flatMap(fn($e) => $e->maintenanceSchedules)->where('is_active', true)->count(); @endphp

{{ $activeSchedules }}

Active maintenance schedules

@php $lowStockCount = $spareParts->filter(fn($p) => $p->isLowStock())->count(); @endphp

{{ $lowStockCount }}

Low stock items need reorder

{{ $failures->count() }}

Active equipment failures

@php $totalRecords = $maintenanceRecords->count(); $completedRecords = $maintenanceRecords->where('completion_status', 'completed')->count(); $completionRate = $totalRecords > 0 ? round(($completedRecords / $totalRecords) * 100) : 0; @endphp

{{ $completionRate }}%

Maintenance completion rate

{{ $maintenanceRecords->count() }}

Auditable maintenance records

@php $operationalCount = $equipment->where('status', 'operational')->count(); $availability = $equipment->count() > 0 ? round(($operationalCount / $equipment->count()) * 100) : 0; @endphp

{{ $availability }}%

Equipment availability

Reliability Metrics (Measurable)

MTBF (Mean Time Between Failures)

@php $totalOperatingHours = 8760; // Approximate hours in a year $failureCount = $failures->count(); $mtbf = $failureCount > 0 ? round($totalOperatingHours / $failureCount, 1) : 0; @endphp

{{ $mtbf }} hrs

Formula: Operating Hours / Number of Failures

MTTR (Mean Time To Repair)

@php $resolvedFailures = $failures->whereIn('status', ['resolved', 'closed']); $totalDowntime = $resolvedFailures->sum('downtime_hours'); $mttr = $resolvedFailures->count() > 0 ? round($totalDowntime / $resolvedFailures->count(), 1) : 0; @endphp

{{ $mttr }} hrs

Formula: Total Downtime / Number of Repairs

System Availability

@php $uptime = $totalOperatingHours - $totalDowntime; $systemAvailability = $totalOperatingHours > 0 ? round(($uptime / $totalOperatingHours) * 100, 2) : 100; @endphp

{{ $systemAvailability }}%

Formula: (Uptime / Total Time) × 100

All reliability metrics are calculated in real-time and are fully measurable

Critical Equipment Identification

@php $criticalEquipment = $equipment->where('is_critical', true); @endphp @if($criticalEquipment->count() > 0)
@foreach($criticalEquipment as $item) @endforeach
Equipment Code Name Type Location Status Criticality Reason
{{ $item->equipment_code }} {{ $item->name }} {{ $item->type }} {{ $item->location }} {{ ucfirst($item->status) }} @if($item->status === 'operational') Essential for vessel operations @else Requires immediate attention @endif
@else

No critical equipment identified yet

@endif

Planned Maintenance System (PMS)

@forelse($equipment->flatMap(fn($e) => $e->maintenanceSchedules)->sortBy('next_due') as $schedule) @empty @endforelse
Equipment Task Name Task Type Frequency Next Due Est. Hours Status
{{ $schedule->equipment->name }} {{ $schedule->task_name }} {{ $schedule->task_type }} {{ str_replace('_', ' ', ucfirst($schedule->frequency)) }} {{ $schedule->next_due ? $schedule->next_due->format('d M Y') : 'Not scheduled' }} {{ $schedule->estimated_hours ?? 'N/A' }} hrs {{ $schedule->is_active ? 'Active' : 'Inactive' }}
No maintenance schedules created yet

Maintenance Records & Audit Trail

All maintenance records are auditable with full traceability (who, what, when)
@forelse($maintenanceRecords->sortByDesc('maintenance_date')->take(10) as $record) @empty @endforelse
Date Equipment Task Description Performed By Hours Spent Status
{{ $record->maintenance_date ? $record->maintenance_date->format('d M Y') : 'N/A' }} {{ $record->equipment->name }} {{ Str::limit($record->task_description ?? 'N/A', 40) }} {{ $record->user->name ?? 'N/A' }} {{ $record->hours_spent ?? 'N/A' }} hrs {{ str_replace('_', ' ', ucfirst($record->completion_status ?? 'pending')) }}
No maintenance records found

Equipment Failures & Corrective Actions

@forelse($failures as $failure) @empty @endforelse
Equipment Failure Type Severity Failure Date Corrective Action Status Downtime
{{ $failure->equipment->name }} {{ $failure->failure_type }} {{ ucfirst($failure->severity) }} {{ $failure->failure_datetime ? $failure->failure_datetime->format('d M Y H:i') : 'N/A' }} {{ Str::limit($failure->corrective_action ?? 'No action recorded', 40) }} {{ str_replace('_', ' ', ucfirst($failure->status)) }} {{ $failure->downtime_hours ?? 0 }} hrs
No equipment failures recorded

Spare Parts Lifecycle Management

@php $inStock = $spareParts->filter(fn($p) => $p->stockStatus() === 'in_stock')->count(); $lowStock = $spareParts->filter(fn($p) => $p->stockStatus() === 'low_stock')->count(); $outOfStock = $spareParts->filter(fn($p) => $p->stockStatus() === 'out_of_stock')->count(); $overstocked = $spareParts->filter(fn($p) => $p->stockStatus() === 'overstocked')->count(); @endphp

{{ $inStock }}

In Stock

{{ $lowStock }}

Low Stock (Reorder)

{{ $outOfStock }}

Out of Stock

{{ $overstocked }}

Overstocked

@forelse($spareParts as $part) @empty @endforelse
Part Number Part Name Category Current Stock Min Level Reorder Point Lifecycle Status Actions
{{ $part->part_number }} {{ $part->part_name }} {{ $part->category }} {{ $part->quantity_in_stock }} {{ $part->unit_of_measure }} {{ $part->minimum_stock_level }} {{ $part->reorder_point }} @php $status = $part->stockStatus(); @endphp {{ str_replace('_', ' ', ucfirst($status)) }}
No spare parts in inventory

Equipment Inventory

@forelse($equipment as $item) @empty @endforelse
Equipment Code Name Type Location Status Critical Actions
{{ $item->equipment_code }} {{ $item->name }} {{ $item->type }} {{ $item->location }} {{ ucfirst($item->status) }} @if($item->is_critical) Critical @else Standard @endif
No equipment in inventory
@endsection