DSAR Report

Overview of all Data Subject Access Requests

{{-- Stat Cards --}}

Total Sent (All Time)

{{ number_format($totalAll) }}

{{ $totalMonth }} this month

Completed

{{ number_format($completedCount) }}

@if($totalAll > 0) {{ round(($completedCount / $totalAll) * 100, 1) }}% completion rate @endif

Flagged

{{ number_format($flaggedCount) }}

Require attention

Avg Response Time

{{ $avgResponseDays ? round($avgResponseDays, 1) . ' days' : '—' }}

From send to full response
{{-- Status Breakdown --}}
Status Breakdown
@foreach(['completed','sent','needs posting','approved','draft','failed'] as $status) @php $count = $byStatus->get($status, 0); @endphp @endforeach
Status Count %
{{ ucwords($status) }} {{ $count }} {{ $totalAll > 0 ? round(($count / $totalAll) * 100, 1) : 0 }}%
{{-- Response Type Breakdown --}}
Response Types
@if($totalResponses > 0) @foreach(['full' => ['Full Response','bg-success'], 'partial' => ['Partial','bg-warning'], 'pushback' => ['Pushback','bg-danger'], 'wrong_recipient' => ['Wrong Recipient','bg-secondary'], 'unknown_client' => ['Unknown Client','bg-dark']] as $type => [$label, $cls]) @php $count = $responseBreakdown->get($type, 0); $pct = round(($count / $totalResponses) * 100); @endphp
{{ $label }} {{ $count }} ({{ $pct }}%)
@endforeach @else

No responses logged yet.

@endif
{{-- Month Comparison --}}
Monthly Comparison

This Month

{{ $totalMonth }}

Last Month

{{ $totalLastMonth }}

@if($totalLastMonth > 0) @php $change = round((($totalMonth - $totalLastMonth) / $totalLastMonth) * 100, 1); @endphp
{{ $change >= 0 ? '+' : '' }}{{ $change }}% vs last month
@endif
{{-- Institution Breakdown --}}
Top Institutions
@forelse($byInstitution as $row) @empty @endforelse
Institution Sent Completed Completion Rate
{{ $row->institution?->display_name ?? 'Unknown' }} {{ $row->total_sent }} {{ $row->total_completed }} @php $rate = $row->total_sent > 0 ? round(($row->total_completed / $row->total_sent) * 100) : 0; @endphp
{{ $rate }}%
No DSARs found.