@extends('layouts.app') @section('title', 'Element 3: Recruitment, Management and Wellbeing of Vessel Personnel') @section('content')

Element 3: Recruitment, Management and Wellbeing of Vessel Personnel

Crew recruitment, rotation, qualifications, wellbeing monitoring, training records, and STCW compliance

Personnel Management Dashboard

{{ $crew->count() }}

Total crew members

@php $activeCrew = $crew->where('status', 'active')->count(); @endphp

{{ $activeCrew }}

Active crew members

@php $rotationDue = $crew->filter(function($c) { return $c->contract_end && $c->contract_end->lte(now()->addDays(30)); })->count(); @endphp

{{ $rotationDue }}

Rotation due (30 days)

@php $totalQualifications = $crew->flatMap(fn($c) => $c->qualifications)->count(); $stcwQualifications = $crew->flatMap(fn($c) => $c->qualifications)->where('stcw_compliant', true)->count(); $stcwRate = $totalQualifications > 0 ? round(($stcwQualifications / $totalQualifications) * 100) : 0; @endphp

{{ $stcwRate }}%

STCW compliance rate

{{ $totalQualifications }}

Total qualifications defined

{{ $trainingDrills->count() }}

Training drills recorded

{{ $wellbeingChecks->count() }}

Wellbeing checks completed

@php $highFatigue = $wellbeingChecks->where('fatigue_level', '>=', 7)->count(); @endphp

{{ $highFatigue }}

High fatigue alerts

STCW Compliance Monitor

STCW compliance is monitored for all crew members and certifications
@php $stcwCrew = $crew->filter(function($c) { return $c->qualifications->where('stcw_compliant', true)->count() > 0; }); $nonCompliantCrew = $crew->filter(function($c) { return $c->qualifications->where('stcw_compliant', true)->count() === 0 && $c->qualifications->count() > 0; }); @endphp

{{ $stcwCrew->count() }}

STCW Compliant Crew

{{ $nonCompliantCrew->count() }}

Non-Compliant Crew

{{ $stcwQualifications }}

STCW Certifications

@if($nonCompliantCrew->count() > 0)
@foreach($nonCompliantCrew as $member) @endforeach
Crew Member Rank Vessel Total Qualifications STCW Status
{{ $member->name }} {{ $member->rank }} {{ $member->vessel ?? 'Unassigned' }} {{ $member->qualifications->count() }} Requires STCW Certification
@else

All crew members with qualifications are STCW compliant

@endif

Data Confidentiality & Privacy

Crew Data Confidentiality Requirements

  • All crew personal data is encrypted and access-controlled
  • Sensitive information (passport, contact details) protected under confidentiality protocols
  • Access to crew data limited to authorized personnel only
  • All data access and modifications are logged for audit purposes

Compliance: All crew data handling complies with maritime privacy regulations and GDPR where applicable

Crew Qualification Requirements

@if($qualificationRequirements->count() > 0)
@foreach($qualificationRequirements as $requirement) @endforeach
Rank/Position Required Qualification Type STCW Mandatory Valid Period
{{ $requirement->rank }} {{ $requirement->qualification_name }} {{ $requirement->qualification_type }} @if($requirement->is_stcw) STCW @else N/A @endif @if($requirement->is_mandatory) Required @else Optional @endif {{ $requirement->validity_years }} years
@else

No qualification requirements defined yet

@endif

Crew Recruitment & Rotation

Upcoming Rotations (Next 90 Days)

@php $upcomingRotations = $crew->filter(function($c) { return $c->contract_end && $c->contract_end->lte(now()->addDays(90)) && $c->contract_end->gte(now()); })->sortBy('contract_end'); @endphp @if($upcomingRotations->count() > 0)
@foreach($upcomingRotations as $member)

{{ $member->name }}

{{ $member->rank }} - {{ $member->vessel ?? 'Unassigned' }}

{{ $member->contract_end->format('M d, Y') }}

{{ $member->contract_end->diffForHumans() }}

@endforeach
@else

No upcoming rotations in the next 90 days

@endif
@forelse($crew as $member) @empty @endforelse
Name Rank Vessel Contract Period Status Actions
{{ $member->name }} {{ $member->rank }} {{ $member->vessel ?? 'Unassigned' }} @if($member->contract_start && $member->contract_end) {{ $member->contract_start->format('M d, Y') }} - {{ $member->contract_end->format('M d, Y') }} @else N/A @endif {{ ucfirst(str_replace('_', ' ', $member->status)) }}
No crew members found

Wellbeing & Fatigue Monitoring

@php $lowFatigue = $wellbeingChecks->where('fatigue_level', '<=', 3)->count(); $moderateFatigue = $wellbeingChecks->whereBetween('fatigue_level', [4, 6])->count(); $highFatigue = $wellbeingChecks->where('fatigue_level', '>=', 7)->count(); $avgFatigue = $wellbeingChecks->avg('fatigue_level') ?? 0; @endphp

{{ $lowFatigue }}

Low Fatigue (1-3)

{{ $moderateFatigue }}

Moderate Fatigue (4-6)

{{ $highFatigue }}

High Fatigue (7-10)

{{ number_format($avgFatigue, 1) }}

Average Fatigue Level

@forelse($wellbeingChecks->sortByDesc('check_date')->take(10) as $check) @empty @endforelse
Date Crew Member Fatigue Level Sleep Hours Health Status Action Required
{{ $check->check_date->format('M d, Y') }} {{ $check->crew->name }}
{{ $check->fatigue_level }}/10
{{ $check->sleep_hours ?? 'N/A' }} hrs {{ ucfirst($check->health_status ?? 'Good') }} @if($check->fatigue_level >= 7) Rest Required @else Normal @endif
No wellbeing checks recorded yet

Training & Drills Records

@php $safetyDrills = $trainingDrills->where('drill_type', 'Safety')->count(); $emergencyDrills = $trainingDrills->where('drill_type', 'Emergency')->count(); $technicalTraining = $trainingDrills->where('drill_type', 'Technical')->count(); $avgParticipation = $trainingDrills->avg('participants_count') ?? 0; @endphp

{{ $safetyDrills }}

Safety Drills

{{ $emergencyDrills }}

Emergency Drills

{{ $technicalTraining }}

Technical Training

{{ round($avgParticipation) }}

Avg. Participants

@forelse($trainingDrills->sortByDesc('drill_date') as $drill) @empty @endforelse
Date Training/Drill Name Type Participants Duration Conducted By Status
{{ $drill->drill_date->format('M d, Y') }} {{ $drill->drill_name }} {{ $drill->drill_type }} {{ $drill->participants_count ?? 'N/A' }} {{ $drill->duration_minutes ?? 'N/A' }} min {{ $drill->conducted_by }} {{ ucfirst($drill->completion_status) }}
No training or drills recorded yet

Crew Profiles

@if($crew->count() > 0)
@foreach($crew as $member)
{{ ucfirst(str_replace('_', ' ', $member->status)) }}

{{ $member->name }}

{{ $member->rank }}

{{ $member->nationality }}
@if($member->vessel)
{{ $member->vessel }}
@endif
{{ $member->qualifications->count() }} Qualifications
@endforeach
@else

No crew members found

@endif
@endsection