@can('hrm.shifts.manage') Shifts & roster @endcan @can('hrm.overtime.view') Overtime @endcan @if (session('status'))
{{ session('status') }}
@endif @if (session('error'))
{{ session('error') }}
@endif
@can('hrm.attendance.clock') @if ($todayAssignment?->shift) Today's shift: {{ $todayAssignment->shift->name }} ({{ substr($todayAssignment->shift->start_time, 0, 5) }}–{{ substr($todayAssignment->shift->end_time, 0, 5) }}) @else No shift is assigned for today — clocking in still records your attendance. @endif @if ($todayIsHoliday) {{ $todayIsHoliday->name }} @endif @if ($geofence['configured']) On-site clock-ins are checked against a {{ $geofence['radius'] }} m fence. @endif

Clock in

{{ $todayRecord?->clock_in?->format('H:i') ?? '—' }}

Clock out

{{ $todayRecord?->clock_out?->format('H:i') ?? '—' }}

Hours

{{ $todayRecord ? number_format((float) $todayRecord->worked_hours, 2) : '0.00' }}

Status

@if ($todayRecord) @else Not clocked in @endif

@if ($todayRecord?->clock_in && ! $todayRecord->clock_out)
@csrf
@elseif ($todayRecord?->clock_out) Day closed — see you tomorrow. @else
@csrf

Locating… Location unavailable — choose Remote or allow location.

Location captured.

@endif
@endcan
Today {{ $date->format('l, d M Y') }} @if ($holiday) · {{ $holiday->name }} @endif
@if ($roster->isEmpty()) Add employee numbers in the staff directory before recording attendance. @else
@foreach ($roster as $row) @php($member = $row['member']) @endforeach
Staff Department Shift Clock in Clock out Hours Method Status
{{ $member->initials }} {{ $member->name }} {{ $member->employee_no }} {{ $member->department?->name ?? '—' }} @if ($row['assignment']?->shift) {{ $row['assignment']->shift->name }} {{ substr($row['assignment']->shift->start_time, 0, 5) }}–{{ substr($row['assignment']->shift->end_time, 0, 5) }} @else Off duty @endif {{ $row['record']?->clock_in?->format('H:i') ?? '—' }} @if ($row['record']?->distance_m !== null) {{ number_format($row['record']->distance_m) }} m @endif {{ $row['record']?->clock_out?->format('H:i') ?? '—' }} @if ($row['record']?->early_departure) Early @endif {{ $row['record'] ? number_format((float) $row['record']->worked_hours, 2) : '—' }} {{ $row['record']?->method_label ?? '—' }} @if ($row['status']) @else Not scheduled @endif
@endif
@can('hrm.attendance.manage') The control unit posts its sweep here; each punch is booked exactly like a self-service clock-in, and a repeated device reference is ignored.

Endpoint

{{ $device['endpoint'] }}

Authentication

Authorization: Bearer <token>

Status

@if ($device['configured']) @else @endif

{{ $device['today'] }} biometric {{ Str::plural('punch', $device['today']) }} on {{ $date->format('d M Y') }}.

@can('settings.manage') Set the token under Hospital Settings → HR. @else Ask an administrator to set the token under Hospital Settings → HR. @endcan Payload: {"punches":[{"employee_no":"EMP-001","direction":"in","punched_at":"{{ $date->toDateString() }} 08:02:00","device_ref":"unit1-0001"}]}

@endcan @can('hrm.attendance.manage') Saving against a staff member's date replaces that day's record — use it for missed clock-ins and corrections.
@csrf
@endcan {{ $month->format('F Y') }} — recorded days, lateness, leave and overtime per person.
@foreach ($summary as $row) @endforeach
Staff Days recorded Late Early out Absent Leave days Hours worked Overtime hours Overtime amount
{{ $row['member']->name }} {{ $row['days'] }} {{ $row['late_days'] }} {{ $row['early_days'] }} {{ $row['absent_days'] }} {{ number_format($row['leave_days'], 1) }} {{ number_format($row['worked'], 2) }} {{ number_format($row['ot_hours'], 2) }} {{ money($row['ot_amount'], false) }}