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
{{-- DSARs by Target --}}
DSARs by Target
@forelse($byTarget as $row) @php $highBacklog = $row->stated_backlog !== null && $row->stated_backlog >= 100; $agedOutstand = $row->oldest_age_days !== null && $row->oldest_age_days >= 60; @endphp @empty @endforelse
Institution Outstanding Oldest (days) Avg Response Stated Backlog Sent Completed Completion %
@if($row->institution) {{ $row->display_name }} @else {{ $row->display_name }} @endif @if($row->outstanding > 0) {{ $row->outstanding }} @if($row->institution) @endif @else 0 @endif {{ $row->oldest_age_days !== null ? (int) $row->oldest_age_days : '—' }} {{ $row->avg_response_days !== null ? $row->avg_response_days . ' d' : '—' }} @if($row->stated_backlog !== null) {{ number_format($row->stated_backlog) }} @if($row->backlog_updated_at)
as of {{ $row->backlog_updated_at->format('d M Y') }}
@endif @else @endif
{{ $row->total_sent }} {{ $row->total_completed }}
{{ $row->completion_rate }}%
No DSARs found.