Documents

{{ number_format($documents->total()) }} matching records

@forelse($documents as $doc) @php($latest=$doc->versions->sortByDesc('id')->first()) @php($files=$latest?->upload_group ? $doc->versions->where('upload_group',$latest->upload_group)->sortBy(fn($file)=>$file->file_position ?? $file->id) : $doc->versions->where('id',$latest?->id)) whereIn('status',['quarantined','scan_failed'])->isNotEmpty()) data-awaiting-access @endif> @empty@endforelse
Document & filesOwnerExpiry dateStatusActions
{{ $doc->title }}
{{ $files->count() }} {{ $files->count()===1?'file':'files' }} · {{ $doc->type?->name }} · {{ $doc->reference ?? 'No document number' }}@foreach($files as $file)
{{ $file->filename }} @if($file->status==='rejected') · File blocked @endif@endforeach
{{ $doc->owner_label }}
{{ ucfirst($doc->owner_type) }}{{ $doc->category ? ' · '.$doc->category->name : '' }}
{{ $doc->expires_on?->format('d M Y') ?? '—' }}{{ $doc->expiry_status }}@if($doc->legal_hold)
Legal hold@endif
View @if(!$doc->trashed()) @if($latest && $files->every(fn($file)=>$file->fileAccessAllowed()))Download@elseif($latest){{ $files->contains('status','rejected')?'File blocked':'File processing' }}@endif @can('update',$doc)EditReplace file

Delete {{ $doc->title }}?

Files remain protected by retention rules.

@csrf @method('DELETE')
@endcan @endif

No matching documents

Add an employee or company document to get started.