@include('attendance.list-filter')
Secure CSV / Excel adapter available. A direct vendor connection requires the manufacturer's API or SDK review. No biometric templates are collected.
@if(in_array(\App\Support\ModulePages::page(),['index']))

Device inventory

@forelse($devices as $device)@empty@endforelse
DeviceModelTimezoneHealth / last importAction
#{{ $device->id }} · {{ $device->name }}{{ $device->code }}{{ $device->manufacturer }} {{ $device->model }}{{ $device->timezone }}{{ $device->enabled?'Enabled':'Disabled' }}{{ $device->last_synced_at??'Never imported' }}{{ $device->last_error?' · Needs attention':'' }}
@csrf
Edit configuration
Add a device to map and import its punches.
{{ $devices->links() }}
@endif @if(in_array(\App\Support\ModulePages::page(),['form']))

Add / update device

@csrf@foreach(['code'=>'Device code','name'=>'Device name','manufacturer'=>'Manufacturer','model'=>'Model','serial_number'=>'Serial number'] as $key=>$label)@endforeach
@endif
@if(in_array(\App\Support\ModulePages::page(),['mapping']))

Map a device user

@csrf
@endif@if(in_array(\App\Support\ModulePages::page(),['import']))

Import / retry device punches

@csrf

Columns: event_id, device_user_id, occurred_at, kind. Use an ISO timestamp with timezone, e.g. 2026-10-17T09:00:00+04:00. Kinds: in, out, break_out, break_in. Re-import safely retries unchanged event IDs.

@endif
@if(in_array(\App\Support\ModulePages::page(),['mappings']))

Employee mappings

@foreach($mappings as $mapping)@endforeach
DeviceDevice userEmployee
{{ $mapping->device->name }}{{ $mapping->device_user_id }}{{ $mapping->employee->full_name }}
{{ $mappings->links() }}
@endif @if(in_array(\App\Support\ModulePages::page(),['unmatched']))

Unmatched original punches

@forelse($unmatched as $event)
@csrf{{ $event->device?->name }} · {{ $event->device_user_id }} · {{ $event->occurred_at }} · {{ $event->kind }}
@empty

No unmatched events.

@endforelse
{{ $unmatched->links() }}
@endif @if(in_array(\App\Support\ModulePages::page(),['history']))

Sync history

@foreach($syncs as $sync)@endforeach
Device / timestampResultImportedDuplicatesUnmatchedError
{{ $sync->device->name }}{{ $sync->created_at }}{{ $sync->status }}{{ $sync->imported }}{{ $sync->duplicates }}{{ $sync->unmatched }}{{ $sync->error??'—' }}
{{ $syncs->links() }}
@endif