Typo changes
This commit is contained in:
@@ -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 (0–100) fasst Monitoring-Regeln, KYC-Risiken, Negativmeldungen sowie Verhaltens- und Geodaten zu einer Priorität zusammen. Werte über 80 kennzeichnen Sofortmaßnahmen, 50–79 markieren erhöhte Aufmerksamkeit, alles darunter gilt als Routineprüfung.';
|
$riskExplanation = 'Der Risikowert (0–100) fasst Monitoring-Regeln, KYC-Risiken, Negativmeldungen sowie Verhaltens- und Geodaten zu einer Priorität zusammen. Werte über 80 kennzeichnen Sofortmaßnahmen, 50–79 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>
|
||||||
|
|||||||
Reference in New Issue
Block a user