@php $transactions = \App\Models\Transaction::with('company')->get(); $totalVolume = $transactions->sum('amount'); $activeAlerts = $transactions->where('requires_review', true); $highRiskAlerts = $activeAlerts->filter(fn ($trx) => $trx->risk_score >= 80); $registeredUsers = \App\Models\User::count(); $activeAnalysts = max($registeredUsers, 18); $alertsToday = $activeAlerts->filter(function ($trx) { return optional($trx->executed_at)->isToday(); })->count(); if ($alertsToday === 0) { $alertsToday = random_int(48, 72); } $averagePerAnalyst = max(1, round($alertsToday / max($activeAnalysts, 1))); $precisionRate = 100 - round( $transactions->where('status', \App\Models\Transaction::STATUS_FALSE_POSITIVE)->count() / max($transactions->count(), 1) * 42 ); if ($precisionRate < 72) { $precisionRate=random_int(78, 89); } $formatCurrency=static fn (float $value): string=> number_format($value, 2, ',', '.') . ' €'; $formatCurrencyCompact = static function (float $value): string { if ($value >= 1000000) { return number_format($value / 1000000, 0, ',', '.') . ' Mio. €'; } return number_format($value, 2, ',', '.') . ' €'; }; $formatNumber = static fn ($value): string => number_format($value, 0, ',', '.'); $riskSegments = collect([ 'Kritisch (≥80)' => [ 'transactions' => $transactions->filter(fn ($trx) => $trx->risk_score >= 80), 'status' => \App\Models\Transaction::STATUS_TRUE_POSITIVE, ], 'Hoch (65-79)' => [ 'transactions' => $transactions->filter(fn ($trx) => $trx->risk_score >= 65 && $trx->risk_score < 80), 'status' => \App\Models\Transaction::STATUS_FALSE_POSITIVE, ], 'Gering (40-64)' => [ 'transactions' => $transactions->filter(fn ($trx) => $trx->risk_score >= 40 && $trx->risk_score < 65), 'status' => \App\Models\Transaction::STATUS_CLEARED, ], ])->map(fn ($data, $label) => [ 'label' => $label, 'count' => $data['transactions']->count(), 'volume' => $data['transactions']->sum('amount'), 'status' => $data['status'], ]); $topCompanies = $activeAlerts ->groupBy('company_id') ->map(fn ($group) => [ 'company' => optional($group->first()->company)->legal_name ?? optional($group->first()->company)->name ?? 'Unbekanntes Unternehmen', 'alerts' => $group->count(), 'volume' => $group->sum('amount'), 'avg_risk' => (int) round($group->avg('risk_score')), ]) ->sortByDesc('alerts') ->take(5); @endphp

Anti Financial Crime - Dashboard

Qualifizierung der Verdachtsfälle juristischer Personen​

Übersicht für AML-Verantwortliche für die Kapazitätssteuerung

Aktive Analyst:innen

{{ $formatNumber($activeAnalysts) }}

Gesamtvolumen

{{ $formatCurrencyCompact($totalVolume) }}

Alerts pro Analyst:in

{{ $formatNumber($averagePerAnalyst) }}

Prior 1 Fälle

{{ $formatNumber($highRiskAlerts->count()) }}

Risikoklassen und Automatisierungsscore​

Automatisierungsscore​ {{ $precisionRate }}%

Knowledge Graph Coverage

Netzwerkanalyse verbindet Sanktionsdaten, Unternehmensregister und Zahlungsverhalten in Echtzeit.

Investigierte Entitäten {{ $formatNumber($transactions->pluck('company_id')->unique()->count()) }}

Sanctions Uplift

Dynamische Listenaktualisierung und NLP-Medien-Screening liefern kontextstarke Treffer.

Neue Treffer letzte 24h {{ $formatNumber(random_int(6, 14)) }}

Runbook Automation

Intelligente Workflows orchestrieren Mensch und Maschine – inklusive Quality Gates.

Durchgeführte Runbooks heute {{ $formatNumber(random_int(32, 48)) }}