Typo changes

This commit is contained in:
2025-10-31 12:48:41 +01:00
parent a8324e764d
commit e833b46d36
2 changed files with 302 additions and 304 deletions
+1 -1
View File
@@ -76,7 +76,7 @@
<p class="mt-2 text-2xl font-semibold text-indigo-100">{{ $formatNumber($averagePerAnalyst) }}</p> <p class="mt-2 text-2xl font-semibold text-indigo-100">{{ $formatNumber($averagePerAnalyst) }}</p>
</div> </div>
<div class="rounded-2xl border border-rose-400/30 bg-rose-500/20 p-4 backdrop-blur-sm shadow-lg shadow-rose-900/30"> <div class="rounded-2xl border border-rose-400/30 bg-rose-500/20 p-4 backdrop-blur-sm shadow-lg shadow-rose-900/30">
<p class="text-xs font-semibold uppercase tracking-wide text-rose-50">Prior 1 Fälle/p> <p class="text-xs font-semibold uppercase tracking-wide text-rose-50">Prior 1 Fälle</p>
<p class="mt-2 text-2xl font-semibold text-rose-100">{{ $formatNumber($highRiskAlerts->count()) }}</p> <p class="mt-2 text-2xl font-semibold text-rose-100">{{ $formatNumber($highRiskAlerts->count()) }}</p>
</div> </div>
</div> </div>
@@ -113,7 +113,7 @@ new #[Layout('components.layouts.app')] class extends Component {
->selectRaw('status, COUNT(*) AS total, COALESCE(SUM(amount), 0) AS volume') ->selectRaw('status, COUNT(*) AS total, COALESCE(SUM(amount), 0) AS volume')
->groupBy('status') ->groupBy('status')
->get() ->get()
->mapWithKeys(fn ($row) => [ ->mapWithKeys(fn($row) => [
$row->status => [ $row->status => [
'count' => (int) $row->total, 'count' => (int) $row->total,
'amount' => (float) $row->volume, 'amount' => (float) $row->volume,
@@ -148,7 +148,7 @@ new #[Layout('components.layouts.app')] class extends Component {
$search = trim($this->search); $search = trim($this->search);
return Transaction::query() return Transaction::query()
->when($this->status !== 'all', fn (Builder $query) => $query->where('status', $this->status)) ->when($this->status !== 'all', fn(Builder $query) => $query->where('status', $this->status))
->when($search !== '', function (Builder $query) use ($search) { ->when($search !== '', function (Builder $query) use ($search) {
$like = '%' . $search . '%'; $like = '%' . $search . '%';
@@ -166,88 +166,88 @@ new #[Layout('components.layouts.app')] class extends Component {
}; ?> }; ?>
@php @php
/** @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $transactions */ /** @var \Illuminate\Contracts\Pagination\LengthAwarePaginator $transactions */
$transactions = $this->transactions; $transactions = $this->transactions;
/** @var \App\Models\Transaction|null $selected */ /** @var \App\Models\Transaction|null $selected */
$selected = $this->selectedTransaction; $selected = $this->selectedTransaction;
$metrics = $this->metrics; $metrics = $this->metrics;
$byStatus = collect($metrics['by_status']); $byStatus = collect($metrics['by_status']);
$resolveMetrics = static fn (string $status): array => $byStatus->get($status, ['count' => 0, 'amount' => 0.0]); $resolveMetrics = static fn (string $status): array => $byStatus->get($status, ['count' => 0, 'amount' => 0.0]);
$formatAmount = static fn (float $value): string => number_format($value, 2, ',', '.') . ' €'; $formatAmount = static fn (float $value): string => number_format($value, 2, ',', '.') . ' €';
$confirmed = $resolveMetrics(Transaction::STATUS_TRUE_POSITIVE); $confirmed = $resolveMetrics(Transaction::STATUS_TRUE_POSITIVE);
$falseAlarm = $resolveMetrics(Transaction::STATUS_FALSE_POSITIVE); $falseAlarm = $resolveMetrics(Transaction::STATUS_FALSE_POSITIVE);
$cleared = $resolveMetrics(Transaction::STATUS_CLEARED); $cleared = $resolveMetrics(Transaction::STATUS_CLEARED);
$total = $metrics['total']; $total = $metrics['total'];
$statusStyles = [ $statusStyles = [
Transaction::STATUS_TRUE_POSITIVE => 'bg-gradient-to-r from-rose-500/25 via-rose-500/10 to-rose-400/25 text-rose-700 dark:text-rose-200 border border-rose-500/30 shadow-[0_0_25px_-14px_rgba(244,63,94,0.85)]', Transaction::STATUS_TRUE_POSITIVE => 'bg-gradient-to-r from-rose-500/25 via-rose-500/10 to-rose-400/25 text-rose-700 dark:text-rose-200 border border-rose-500/30 shadow-[0_0_25px_-14px_rgba(244,63,94,0.85)]',
Transaction::STATUS_FALSE_POSITIVE => 'bg-gradient-to-r from-amber-400/25 via-amber-400/10 to-amber-300/25 text-amber-700 dark:text-amber-200 border border-amber-400/30 shadow-[0_0_25px_-14px_rgba(251,191,36,0.85)]', Transaction::STATUS_FALSE_POSITIVE => 'bg-gradient-to-r from-amber-400/25 via-amber-400/10 to-amber-300/25 text-amber-700 dark:text-amber-200 border border-amber-400/30 shadow-[0_0_25px_-14px_rgba(251,191,36,0.85)]',
Transaction::STATUS_CLEARED => 'bg-gradient-to-r from-emerald-400/25 via-emerald-400/10 to-emerald-300/25 text-emerald-700 dark:text-emerald-200 border border-emerald-400/30 shadow-[0_0_25px_-14px_rgba(52,211,153,0.85)]', Transaction::STATUS_CLEARED => 'bg-gradient-to-r from-emerald-400/25 via-emerald-400/10 to-emerald-300/25 text-emerald-700 dark:text-emerald-200 border border-emerald-400/30 shadow-[0_0_25px_-14px_rgba(52,211,153,0.85)]',
]; ];
$statusCopy = [ $statusCopy = [
Transaction::STATUS_TRUE_POSITIVE => 'Sofortige Sonderprüfung einleiten und Ermittlungsakte anlegen.', Transaction::STATUS_TRUE_POSITIVE => 'Sofortige Sonderprüfung einleiten und Ermittlungsakte anlegen.',
Transaction::STATUS_FALSE_POSITIVE => 'Anomalie begründen, Dokumentation ergänzen und Alarm schließen.', Transaction::STATUS_FALSE_POSITIVE => 'Anomalie begründen, Dokumentation ergänzen und Alarm schließen.',
Transaction::STATUS_CLEARED => 'Review-Ergebnis dokumentieren und Kontrollnachweis archivieren.', Transaction::STATUS_CLEARED => 'Review-Ergebnis dokumentieren und Kontrollnachweis archivieren.',
]; ];
$statusSummaryPhrases = [ $statusSummaryPhrases = [
Transaction::STATUS_TRUE_POSITIVE => [ Transaction::STATUS_TRUE_POSITIVE => [
'Verdachtsindikatoren bestätigen Treffer.', 'Verdachtsindikatoren bestätigen Treffer.',
'Risikotreiber stehen weiter auf Rot.', 'Risikotreiber stehen weiter auf Rot.',
'Sofortmaßnahmen priorisieren und dokumentieren.', 'Sofortmaßnahmen priorisieren und dokumentieren.',
'Ermittlungsteam unverzüglich koordinieren.', 'Ermittlungsteam unverzüglich koordinieren.',
'Audit-Trail aktuell halten und teilen.', 'Audit-Trail aktuell halten und teilen.',
], ],
Transaction::STATUS_FALSE_POSITIVE => [ Transaction::STATUS_FALSE_POSITIVE => [
'Alarm widerlegt, Dokumentation abschließen.', 'Alarm widerlegt, Dokumentation abschließen.',
'Risikoschwelle fällt unter interne Limits.', 'Risikoschwelle fällt unter interne Limits.',
'Regelwerk für Fehlalarm analysieren.', 'Regelwerk für Fehlalarm analysieren.',
'Stakeholder über Entwarnung informieren.', 'Stakeholder über Entwarnung informieren.',
'Kontrollnachweis im Archiv sichern.', 'Kontrollnachweis im Archiv sichern.',
], ],
Transaction::STATUS_CLEARED => [ Transaction::STATUS_CLEARED => [
'Keine Auffälligkeiten, Vorgang freigegeben.', 'Keine Auffälligkeiten, Vorgang freigegeben.',
'Monitoringdaten bestätigen Referenzverhalten.', 'Monitoringdaten bestätigen Referenzverhalten.',
'Freigabe mit Vier-Augen-Prinzip dokumentieren.', 'Freigabe mit Vier-Augen-Prinzip dokumentieren.',
'Compliance-Team über Abschluss informieren.', 'Compliance-Team über Abschluss informieren.',
'Revisionsunterlagen vollständig archivieren.', 'Revisionsunterlagen vollständig archivieren.',
], ],
]; ];
$statusSummary = array_map( $statusSummary = array_map(
static fn (array $phrases): string => $phrases[0] ?? 'Status gemäß aktuellem Prüfpfad.', static fn (array $phrases): string => $phrases[0] ?? 'Status gemäß aktuellem Prüfpfad.',
$statusSummaryPhrases $statusSummaryPhrases
); );
$statusSummaryBanner = [ $statusSummaryBanner = [
Transaction::STATUS_TRUE_POSITIVE => [ Transaction::STATUS_TRUE_POSITIVE => [
'classes' => 'border border-rose-400/60 bg-gradient-to-r from-rose-500/20 via-rose-500/10 to-rose-400/20 text-rose-900 shadow-[0_30px_70px_-50px_rgba(244,63,94,0.75)] dark:border-rose-500/50 dark:from-rose-500/20 dark:via-rose-500/10 dark:to-rose-400/20 dark:text-rose-100', 'classes' => 'border border-rose-400/60 bg-gradient-to-r from-rose-500/20 via-rose-500/10 to-rose-400/20 text-rose-900 shadow-[0_30px_70px_-50px_rgba(244,63,94,0.75)] dark:border-rose-500/50 dark:from-rose-500/20 dark:via-rose-500/10 dark:to-rose-400/20 dark:text-rose-100',
], ],
Transaction::STATUS_FALSE_POSITIVE => [ Transaction::STATUS_FALSE_POSITIVE => [
'classes' => 'border border-amber-400/60 bg-gradient-to-r from-amber-400/20 via-amber-400/10 to-amber-300/20 text-amber-900 shadow-[0_30px_70px_-50px_rgba(245,158,11,0.65)] dark:border-amber-400/50 dark:from-amber-400/20 dark:via-amber-400/10 dark:to-amber-300/20 dark:text-amber-100', 'classes' => 'border border-amber-400/60 bg-gradient-to-r from-amber-400/20 via-amber-400/10 to-amber-300/20 text-amber-900 shadow-[0_30px_70px_-50px_rgba(245,158,11,0.65)] dark:border-amber-400/50 dark:from-amber-400/20 dark:via-amber-400/10 dark:to-amber-300/20 dark:text-amber-100',
], ],
Transaction::STATUS_CLEARED => [ Transaction::STATUS_CLEARED => [
'classes' => 'border border-emerald-400/60 bg-gradient-to-r from-emerald-400/20 via-emerald-400/10 to-emerald-300/20 text-emerald-900 shadow-[0_30px_70px_-50px_rgba(16,185,129,0.65)] dark:border-emerald-400/50 dark:from-emerald-400/20 dark:via-emerald-400/10 dark:to-emerald-300/20 dark:text-emerald-100', 'classes' => 'border border-emerald-400/60 bg-gradient-to-r from-emerald-400/20 via-emerald-400/10 to-emerald-300/20 text-emerald-900 shadow-[0_30px_70px_-50px_rgba(16,185,129,0.65)] dark:border-emerald-400/50 dark:from-emerald-400/20 dark:via-emerald-400/10 dark:to-emerald-300/20 dark:text-emerald-100',
], ],
]; ];
$statusLegend = [ $statusLegend = [
Transaction::STATUS_TRUE_POSITIVE => [ Transaction::STATUS_TRUE_POSITIVE => [
'title' => 'Bestätigter Treffer', 'title' => 'Bestätigter Treffer',
'description' => 'Ermittlungsindikatoren bestätigen einen hinreichenden Verdacht. Fallverantwortliche Person informieren, Belege sichern und Maßnahmenplan starten.', 'description' => 'Ermittlungsindikatoren bestätigen einen hinreichenden Verdacht. Fallverantwortliche Person informieren, Belege sichern und Maßnahmenplan starten.',
'accent' => 'text-rose-500 dark:text-rose-300', 'accent' => 'text-rose-500 dark:text-rose-300',
], ],
Transaction::STATUS_FALSE_POSITIVE => [ Transaction::STATUS_FALSE_POSITIVE => [
'title' => 'Fehlalarm', 'title' => 'Fehlalarm',
'description' => 'Auslösung plausibel widerlegt (z. B. KYC-Daten, Geschäftslogik). Entscheidungsgrund dokumentieren und Regeloptimierung anstoßen.', 'description' => 'Auslösung plausibel widerlegt (z. B. KYC-Daten, Geschäftslogik). Entscheidungsgrund dokumentieren und Regeloptimierung anstoßen.',
'accent' => 'text-amber-500 dark:text-amber-200', 'accent' => 'text-amber-500 dark:text-amber-200',
], ],
Transaction::STATUS_CLEARED => [ Transaction::STATUS_CLEARED => [
'title' => 'Freigegeben', 'title' => 'Freigegeben',
'description' => 'Keine verdächtigen Auffälligkeiten. Abschluss mit Vier-Augen-Freigabe und revisionssicherer Ablage des Prüfpfads.', 'description' => 'Keine verdächtigen Auffälligkeiten. Abschluss mit Vier-Augen-Freigabe und revisionssicherer Ablage des Prüfpfads.',
'accent' => 'text-emerald-500 dark:text-emerald-300', 'accent' => 'text-emerald-500 dark:text-emerald-300',
], ],
]; ];
$riskExplanation = 'Der Risikowert (0100) fasst Monitoring-Regeln, KYC-Risiken, Negativmeldungen sowie Verhaltens- und Geodaten zu einer Priorität zusammen. Werte über 80 kennzeichnen Sofortmaßnahmen, 5079 markieren erhöhte Aufmerksamkeit, alles darunter gilt als Routineprüfung.'; $riskExplanation = 'Der Risikowert (0100) fasst Monitoring-Regeln, KYC-Risiken, Negativmeldungen sowie Verhaltens- und Geodaten zu einer Priorität zusammen. Werte über 80 kennzeichnen Sofortmaßnahmen, 5079 markieren erhöhte Aufmerksamkeit, alles darunter gilt als Routineprüfung.';
@endphp @endphp
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
@@ -259,7 +259,7 @@ new #[Layout('components.layouts.app')] class extends Component {
<p class="inline-flex items-center gap-2 rounded-full border border-white/25 bg-white/10 px-3 py-1 text-xs font-semibold uppercase tracking-[0.18em] text-slate-200 shadow-sm"> <p class="inline-flex items-center gap-2 rounded-full border border-white/25 bg-white/10 px-3 py-1 text-xs font-semibold uppercase tracking-[0.18em] text-slate-200 shadow-sm">
AFC-Kontrollzentrum AFC-Kontrollzentrum
</p> </p>
<h1 class="text-2xl font-semibold tracking-tight sm:text-3xl">Finanzkriminalitäts-Workbench</h1> <h1 class="text-2xl font-semibold tracking-tight sm:text-3xl">Verdachtsfall-Qualifizierungs-Workbench</h1>
<p class="text-sm leading-relaxed text-slate-300 sm:text-base"> <p class="text-sm leading-relaxed text-slate-300 sm:text-base">
Überwachen Sie verdächtige Transaktionen im DAX-Portfolio, priorisieren Sie Alarme und orchestrieren Sie das manuelle Review im Vier-Augen-Prozess. Überwachen Sie verdächtige Transaktionen im DAX-Portfolio, priorisieren Sie Alarme und orchestrieren Sie das manuelle Review im Vier-Augen-Prozess.
</p> </p>
@@ -356,8 +356,7 @@ new #[Layout('components.layouts.app')] class extends Component {
wire:click="selectTransaction({{ $transaction->id }})" wire:click="selectTransaction({{ $transaction->id }})"
type="button" type="button"
class="{{ implode(' ', $buttonClasses) }}" class="{{ implode(' ', $buttonClasses) }}"
aria-pressed="{{ $selectedState ? 'true' : 'false' }}" aria-pressed="{{ $selectedState ? 'true' : 'false' }}">
>
<div class="space-y-2"> <div class="space-y-2">
<div class="flex items-start justify-between gap-3"> <div class="flex items-start justify-between gap-3">
<div> <div>
@@ -532,8 +531,7 @@ new #[Layout('components.layouts.app')] class extends Component {
<flux:link <flux:link
:href="route('company.transactions', ['company' => $selected->company_id, 'transaction' => $selected->id])" :href="route('company.transactions', ['company' => $selected->company_id, 'transaction' => $selected->id])"
wire:navigate wire:navigate
class="inline-flex items-center gap-2 rounded-full border border-indigo-200/70 bg-indigo-500/10 px-4 py-1.5 text-xs font-semibold text-indigo-600 transition hover:bg-indigo-500/20 dark:border-indigo-500/40 dark:bg-indigo-500/10 dark:text-indigo-200" class="inline-flex items-center gap-2 rounded-full border border-indigo-200/70 bg-indigo-500/10 px-4 py-1.5 text-xs font-semibold text-indigo-600 transition hover:bg-indigo-500/20 dark:border-indigo-500/40 dark:bg-indigo-500/10 dark:text-indigo-200">
>
{{ __('Fallansicht maximieren') }} {{ __('Fallansicht maximieren') }}
<flux:icon name="arrow-top-right-on-square" class="h-4 w-4" /> <flux:icon name="arrow-top-right-on-square" class="h-4 w-4" />
</flux:link> </flux:link>