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>
|
||||||
@@ -291,19 +291,19 @@ new #[Layout('components.layouts.app')] class extends Component {
|
|||||||
|
|
||||||
<div class="grid gap-4 rounded-3xl border border-zinc-200/60 bg-white/95 p-6 shadow-sm backdrop-blur dark:border-zinc-700/70 dark:bg-zinc-900/90 md:grid-cols-3">
|
<div class="grid gap-4 rounded-3xl border border-zinc-200/60 bg-white/95 p-6 shadow-sm backdrop-blur dark:border-zinc-700/70 dark:bg-zinc-900/90 md:grid-cols-3">
|
||||||
@foreach ($statusLegend as $key => $legend)
|
@foreach ($statusLegend as $key => $legend)
|
||||||
<div class="flex flex-col gap-3 rounded-2xl border border-zinc-100/60 bg-slate-50/80 p-4 shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-zinc-700/60 dark:bg-zinc-800/70">
|
<div class="flex flex-col gap-3 rounded-2xl border border-zinc-100/60 bg-slate-50/80 p-4 shadow-sm transition hover:-translate-y-0.5 hover:shadow-md dark:border-zinc-700/60 dark:bg-zinc-800/70">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="inline-flex h-2.5 w-2.5 rounded-full bg-gradient-to-r @class([
|
<span class="inline-flex h-2.5 w-2.5 rounded-full bg-gradient-to-r @class([
|
||||||
'from-rose-500 to-rose-400' => $key === Transaction::STATUS_TRUE_POSITIVE,
|
'from-rose-500 to-rose-400' => $key === Transaction::STATUS_TRUE_POSITIVE,
|
||||||
'from-amber-400 to-amber-300' => $key === Transaction::STATUS_FALSE_POSITIVE,
|
'from-amber-400 to-amber-300' => $key === Transaction::STATUS_FALSE_POSITIVE,
|
||||||
'from-emerald-400 to-emerald-300' => $key === Transaction::STATUS_CLEARED,
|
'from-emerald-400 to-emerald-300' => $key === Transaction::STATUS_CLEARED,
|
||||||
])"></span>
|
])"></span>
|
||||||
<p class="text-sm font-semibold {{ $legend['accent'] }}">{{ $legend['title'] }}</p>
|
<p class="text-sm font-semibold {{ $legend['accent'] }}">{{ $legend['title'] }}</p>
|
||||||
</div>
|
|
||||||
<p class="text-sm leading-relaxed text-zinc-600 dark:text-zinc-300">
|
|
||||||
{{ $legend['description'] }}
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
<p class="text-sm leading-relaxed text-zinc-600 dark:text-zinc-300">
|
||||||
|
{{ $legend['description'] }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -317,7 +317,7 @@ new #[Layout('components.layouts.app')] class extends Component {
|
|||||||
<div class="flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center">
|
<div class="flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center">
|
||||||
<flux:select wire:model.live="status" class="w-full sm:w-56">
|
<flux:select wire:model.live="status" class="w-full sm:w-56">
|
||||||
@foreach ($this->statusOptions as $value => $label)
|
@foreach ($this->statusOptions as $value => $label)
|
||||||
<option value="{{ $value }}">{{ $label }}</option>
|
<option value="{{ $value }}">{{ $label }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</flux:select>
|
</flux:select>
|
||||||
<flux:input
|
<flux:input
|
||||||
@@ -339,243 +339,241 @@ new #[Layout('components.layouts.app')] class extends Component {
|
|||||||
|
|
||||||
<div class="divide-y divide-zinc-200/60 dark:divide-zinc-700/70">
|
<div class="divide-y divide-zinc-200/60 dark:divide-zinc-700/70">
|
||||||
@forelse ($transactions as $transaction)
|
@forelse ($transactions as $transaction)
|
||||||
@php
|
@php
|
||||||
$selectedState = $transaction->id === $this->selectedTransactionId;
|
$selectedState = $transaction->id === $this->selectedTransactionId;
|
||||||
$buttonClasses = [
|
$buttonClasses = [
|
||||||
'flex w-full flex-col gap-3 px-4 py-4 text-left transition duration-200 sm:grid sm:grid-cols-[1.6fr_1fr_0.7fr]',
|
'flex w-full flex-col gap-3 px-4 py-4 text-left transition duration-200 sm:grid sm:grid-cols-[1.6fr_1fr_0.7fr]',
|
||||||
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-400/70',
|
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-400/70',
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($selectedState) {
|
if ($selectedState) {
|
||||||
$buttonClasses[] = 'border-s-4 border-indigo-500/80 bg-indigo-500/10 shadow-lg shadow-indigo-500/20 ring-2 ring-indigo-400/70 ring-offset-2 ring-offset-white dark:bg-indigo-500/20 dark:ring-offset-zinc-900 scale-[1.01]';
|
$buttonClasses[] = 'border-s-4 border-indigo-500/80 bg-indigo-500/10 shadow-lg shadow-indigo-500/20 ring-2 ring-indigo-400/70 ring-offset-2 ring-offset-white dark:bg-indigo-500/20 dark:ring-offset-zinc-900 scale-[1.01]';
|
||||||
} else {
|
} else {
|
||||||
$buttonClasses[] = 'border-s-4 border-transparent hover:-translate-y-0.5 hover:border-indigo-400/70 hover:bg-zinc-50/70 hover:shadow-lg hover:shadow-zinc-900/20 dark:hover:bg-zinc-800/60';
|
$buttonClasses[] = 'border-s-4 border-transparent hover:-translate-y-0.5 hover:border-indigo-400/70 hover:bg-zinc-50/70 hover:shadow-lg hover:shadow-zinc-900/20 dark:hover:bg-zinc-800/60';
|
||||||
}
|
}
|
||||||
@endphp
|
@endphp
|
||||||
<button
|
<button
|
||||||
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>
|
<p class="text-sm font-semibold text-zinc-900 dark:text-zinc-100">{{ $transaction->company->legal_name }}</p>
|
||||||
<p class="text-sm font-semibold text-zinc-900 dark:text-zinc-100">{{ $transaction->company->legal_name }}</p>
|
<p class="text-xs uppercase tracking-wide text-zinc-400">{{ $transaction->company->name }} · {{ $transaction->company->sector }}</p>
|
||||||
<p class="text-xs uppercase tracking-wide text-zinc-400">{{ $transaction->company->name }} · {{ $transaction->company->sector }}</p>
|
|
||||||
</div>
|
|
||||||
<span class="inline-flex items-center gap-1 rounded-full px-3 py-1 text-xs font-semibold {{ $statusStyles[$transaction->status] ?? 'bg-zinc-500/10 text-zinc-600 dark:text-zinc-300 border border-zinc-500/20' }}">
|
|
||||||
{{ $transaction->statusLabel() }}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-wrap items-center gap-2 text-sm text-zinc-500 dark:text-zinc-400">
|
|
||||||
<span class="font-medium text-zinc-700 dark:text-zinc-200">{{ $transaction->counterparty }}</span>
|
|
||||||
<span>•</span>
|
|
||||||
<span>{{ $transaction->counterparty_country }}</span>
|
|
||||||
<span>•</span>
|
|
||||||
<span>{{ $transaction->executed_at?->format('d.m.Y H:i') }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
<span class="inline-flex items-center gap-1 rounded-full px-3 py-1 text-xs font-semibold {{ $statusStyles[$transaction->status] ?? 'bg-zinc-500/10 text-zinc-600 dark:text-zinc-300 border border-zinc-500/20' }}">
|
||||||
|
{{ $transaction->statusLabel() }}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex flex-wrap items-center gap-2 text-sm text-zinc-500 dark:text-zinc-400">
|
||||||
<div class="space-y-2">
|
<span class="font-medium text-zinc-700 dark:text-zinc-200">{{ $transaction->counterparty }}</span>
|
||||||
<p class="text-sm font-medium text-zinc-700 dark:text-zinc-200">{{ $transaction->channel }}</p>
|
<span>•</span>
|
||||||
<p class="font-mono text-xs text-zinc-400">{{ $transaction->reference }}</p>
|
<span>{{ $transaction->counterparty_country }}</span>
|
||||||
|
<span>•</span>
|
||||||
|
<span>{{ $transaction->executed_at?->format('d.m.Y H:i') }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-col items-end justify-between gap-2">
|
|
||||||
<p class="text-lg font-semibold text-zinc-900 dark:text-zinc-100">
|
|
||||||
{{ number_format($transaction->amount, 2, ',', '.') }} {{ $transaction->currency }}
|
|
||||||
</p>
|
|
||||||
<div class="flex flex-wrap items-center gap-2 text-xs text-zinc-500 dark:text-zinc-400">
|
|
||||||
<flux:tooltip :content="$riskExplanation" position="top">
|
|
||||||
<span class="inline-flex items-center gap-1 rounded-md bg-slate-100/60 px-2 py-1 font-semibold text-slate-700 dark:bg-slate-900/60 dark:text-slate-200">
|
|
||||||
Risiko {{ $transaction->risk_score }}
|
|
||||||
<span aria-hidden="true" class="inline-flex h-3.5 w-3.5 items-center justify-center rounded-full border border-slate-400/60 text-[0.55rem] font-semibold text-slate-600 dark:border-slate-500/60 dark:text-slate-300">
|
|
||||||
i
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</flux:tooltip>
|
|
||||||
<span>{{ $statusCopy[$transaction->status] ?? '' }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
@empty
|
|
||||||
<div class="px-6 py-16 text-center text-sm text-zinc-500 dark:text-zinc-400">
|
|
||||||
Keine Transaktionen für die aktuellen Filterkriterien gefunden. Bitte Seed-Daten neu laden oder Filter anpassen.
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="space-y-2">
|
||||||
|
<p class="text-sm font-medium text-zinc-700 dark:text-zinc-200">{{ $transaction->channel }}</p>
|
||||||
|
<p class="font-mono text-xs text-zinc-400">{{ $transaction->reference }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex flex-col items-end justify-between gap-2">
|
||||||
|
<p class="text-lg font-semibold text-zinc-900 dark:text-zinc-100">
|
||||||
|
{{ number_format($transaction->amount, 2, ',', '.') }} {{ $transaction->currency }}
|
||||||
|
</p>
|
||||||
|
<div class="flex flex-wrap items-center gap-2 text-xs text-zinc-500 dark:text-zinc-400">
|
||||||
|
<flux:tooltip :content="$riskExplanation" position="top">
|
||||||
|
<span class="inline-flex items-center gap-1 rounded-md bg-slate-100/60 px-2 py-1 font-semibold text-slate-700 dark:bg-slate-900/60 dark:text-slate-200">
|
||||||
|
Risiko {{ $transaction->risk_score }}
|
||||||
|
<span aria-hidden="true" class="inline-flex h-3.5 w-3.5 items-center justify-center rounded-full border border-slate-400/60 text-[0.55rem] font-semibold text-slate-600 dark:border-slate-500/60 dark:text-slate-300">
|
||||||
|
i
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</flux:tooltip>
|
||||||
|
<span>{{ $statusCopy[$transaction->status] ?? '' }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
@empty
|
||||||
|
<div class="px-6 py-16 text-center text-sm text-zinc-500 dark:text-zinc-400">
|
||||||
|
Keine Transaktionen für die aktuellen Filterkriterien gefunden. Bitte Seed-Daten neu laden oder Filter anpassen.
|
||||||
|
</div>
|
||||||
@endforelse
|
@endforelse
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if ($transactions->hasPages())
|
@if ($transactions->hasPages())
|
||||||
<div class="flex items-center justify-between gap-3 border-t border-zinc-200/70 bg-zinc-50/70 px-4 py-3 text-sm text-zinc-500 dark:border-zinc-700/60 dark:bg-zinc-900/70 dark:text-zinc-300">
|
<div class="flex items-center justify-between gap-3 border-t border-zinc-200/70 bg-zinc-50/70 px-4 py-3 text-sm text-zinc-500 dark:border-zinc-700/60 dark:bg-zinc-900/70 dark:text-zinc-300">
|
||||||
<button
|
<button
|
||||||
wire:click="previousPage"
|
wire:click="previousPage"
|
||||||
wire:loading.attr="disabled"
|
wire:loading.attr="disabled"
|
||||||
@disabled($transactions->onFirstPage())
|
@disabled($transactions->onFirstPage())
|
||||||
class="inline-flex items-center gap-2 rounded-full border border-zinc-300/70 bg-white/70 px-4 py-1.5 font-medium text-zinc-700 transition hover:bg-white dark:border-zinc-600/70 dark:bg-zinc-800/80 dark:text-zinc-200 dark:hover:bg-zinc-800/60"
|
class="inline-flex items-center gap-2 rounded-full border border-zinc-300/70 bg-white/70 px-4 py-1.5 font-medium text-zinc-700 transition hover:bg-white dark:border-zinc-600/70 dark:bg-zinc-800/80 dark:text-zinc-200 dark:hover:bg-zinc-800/60"
|
||||||
>
|
>
|
||||||
‹ Zurück
|
‹ Zurück
|
||||||
</button>
|
</button>
|
||||||
<span class="text-xs font-medium uppercase tracking-wide text-zinc-500 dark:text-zinc-400">
|
<span class="text-xs font-medium uppercase tracking-wide text-zinc-500 dark:text-zinc-400">
|
||||||
Seite {{ $transactions->currentPage() }} von {{ $transactions->lastPage() }}
|
Seite {{ $transactions->currentPage() }} von {{ $transactions->lastPage() }}
|
||||||
</span>
|
</span>
|
||||||
<button
|
<button
|
||||||
wire:click="nextPage"
|
wire:click="nextPage"
|
||||||
wire:loading.attr="disabled"
|
wire:loading.attr="disabled"
|
||||||
@disabled(! $transactions->hasMorePages())
|
@disabled(! $transactions->hasMorePages())
|
||||||
class="inline-flex items-center gap-2 rounded-full border border-zinc-300/70 bg-white/70 px-4 py-1.5 font-medium text-zinc-700 transition hover:bg-white dark:border-zinc-600/70 dark:bg-zinc-800/80 dark:text-zinc-200 dark:hover:bg-zinc-800/60"
|
class="inline-flex items-center gap-2 rounded-full border border-zinc-300/70 bg-white/70 px-4 py-1.5 font-medium text-zinc-700 transition hover:bg-white dark:border-zinc-600/70 dark:bg-zinc-800/80 dark:text-zinc-200 dark:hover:bg-zinc-800/60"
|
||||||
>
|
>
|
||||||
Weiter ›
|
Weiter ›
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
@if ($selected)
|
@if ($selected)
|
||||||
@php
|
@php
|
||||||
$summaryStyles = $statusSummaryBanner[$selected->status] ?? [
|
$summaryStyles = $statusSummaryBanner[$selected->status] ?? [
|
||||||
'classes' => 'border border-zinc-300/70 bg-zinc-100/80 text-zinc-700 dark:border-zinc-600/60 dark:bg-zinc-800/60 dark:text-zinc-200',
|
'classes' => 'border border-zinc-300/70 bg-zinc-100/80 text-zinc-700 dark:border-zinc-600/60 dark:bg-zinc-800/60 dark:text-zinc-200',
|
||||||
];
|
];
|
||||||
$summaryText = implode(' ', $statusSummaryPhrases[$selected->status] ?? ['Status gemäß aktuellem Prüfpfad.']);
|
$summaryText = implode(' ', $statusSummaryPhrases[$selected->status] ?? ['Status gemäß aktuellem Prüfpfad.']);
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
<div class="rounded-3xl px-6 py-5 text-sm leading-relaxed shadow-sm backdrop-blur {{ $summaryStyles['classes'] }}">
|
<div class="rounded-3xl px-6 py-5 text-sm leading-relaxed shadow-sm backdrop-blur {{ $summaryStyles['classes'] }}">
|
||||||
<div class="flex items-center justify-between gap-3">
|
<div class="flex items-center justify-between gap-3">
|
||||||
<span class="text-xs font-semibold uppercase tracking-wide">Statuszusammenfassung</span>
|
<span class="text-xs font-semibold uppercase tracking-wide">Statuszusammenfassung</span>
|
||||||
<span class="inline-flex items-center gap-2 rounded-full border border-current/20 bg-white/10 px-3 py-1 text-xs font-semibold uppercase tracking-wide">
|
<span class="inline-flex items-center gap-2 rounded-full border border-current/20 bg-white/10 px-3 py-1 text-xs font-semibold uppercase tracking-wide">
|
||||||
{{ $selected->statusLabel() }}
|
{{ $selected->statusLabel() }}
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
<p class="mt-3 text-base font-medium leading-relaxed">
|
||||||
|
{{ $summaryText }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="rounded-3xl border border-zinc-200/70 bg-white/95 p-6 shadow-sm backdrop-blur dark:border-zinc-700/70 dark:bg-zinc-900/90">
|
||||||
|
<div class="flex flex-wrap items-start justify-between gap-4">
|
||||||
|
<div>
|
||||||
|
<h3 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100">{{ $selected->company->legal_name }}</h3>
|
||||||
|
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ $selected->company->summary }}</p>
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-3 text-base font-medium leading-relaxed">
|
<div class="flex flex-col items-end gap-2">
|
||||||
{{ $summaryText }}
|
<span class="inline-flex items-center rounded-full bg-slate-900/90 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-white dark:bg-slate-200/20">
|
||||||
|
Prüfung erforderlich
|
||||||
|
</span>
|
||||||
|
@php($detailStatusStyle = $statusStyles[$selected->status] ?? 'bg-zinc-500/10 text-zinc-600 border border-zinc-500/20')
|
||||||
|
<span class="inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold {{ $detailStatusStyle }}">
|
||||||
|
Status: {{ $selected->statusLabel() }}
|
||||||
|
</span>
|
||||||
|
<span class="text-3xl font-semibold text-slate-900 dark:text-white">
|
||||||
|
{{ number_format($selected->amount, 2, ',', '.') }} {{ $selected->currency }}
|
||||||
|
</span>
|
||||||
|
<div class="flex items-center gap-2 text-xs text-zinc-500 dark:text-zinc-400">
|
||||||
|
<flux:tooltip :content="$riskExplanation" position="top">
|
||||||
|
<span class="inline-flex items-center gap-1 rounded-md bg-slate-900/10 px-2 py-1 font-semibold text-slate-700 dark:bg-slate-200/10 dark:text-slate-200">
|
||||||
|
Risikoscore {{ $selected->risk_score }}
|
||||||
|
<span aria-hidden="true" class="inline-flex h-3.5 w-3.5 items-center justify-center rounded-full border border-slate-500/60 text-[0.55rem] font-semibold text-slate-600 dark:border-slate-400/60 dark:text-slate-200">
|
||||||
|
i
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</flux:tooltip>
|
||||||
|
<span>{{ $selected->executed_at?->format('d.m.Y, H:i') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<dl class="mt-6 grid grid-cols-1 gap-4 text-sm text-zinc-600 dark:text-zinc-300">
|
||||||
|
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
||||||
|
<dt class="text-xs uppercase tracking-wide text-zinc-400">Statusbegründung</dt>
|
||||||
|
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">
|
||||||
|
{{ $statusSummary[$selected->status] ?? 'Status gemäß aktuellem Prüfpfad.' }}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
||||||
|
<dt class="text-xs uppercase tracking-wide text-zinc-400">Gegenpartei</dt>
|
||||||
|
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->counterparty }}</dd>
|
||||||
|
<dd class="text-xs text-zinc-500">{{ $selected->counterparty_country }}</dd>
|
||||||
|
</div>
|
||||||
|
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
||||||
|
<dt class="text-xs uppercase tracking-wide text-zinc-400">Zahlungskanal & Referenz</dt>
|
||||||
|
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->channel }}</dd>
|
||||||
|
<dd class="font-mono text-xs text-zinc-500">{{ $selected->reference }}</dd>
|
||||||
|
</div>
|
||||||
|
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
||||||
|
<dt class="text-xs uppercase tracking-wide text-zinc-400">Flagging-Engine</dt>
|
||||||
|
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->flagged_by }}</dd>
|
||||||
|
<dd class="text-xs text-zinc-500">{{ $selected->flagged_reason }}</dd>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
@if (! empty($selected->signals))
|
||||||
|
<div class="mt-6 space-y-2">
|
||||||
|
<h4 class="text-xs font-semibold uppercase tracking-wide text-zinc-400">Detektionssignale</h4>
|
||||||
|
<div class="flex flex-wrap gap-2">
|
||||||
|
@foreach ($selected->signals as $signal)
|
||||||
|
<span class="inline-flex items-center gap-2 rounded-full border border-slate-300/70 bg-slate-100/60 px-3 py-1 text-xs font-medium text-slate-700 dark:border-slate-600 dark:bg-slate-800/60 dark:text-slate-200">
|
||||||
|
<span class="h-1.5 w-1.5 rounded-full bg-emerald-500"></span>
|
||||||
|
{{ data_get($signal, 'type') }} · {{ data_get($signal, 'value') }}
|
||||||
|
</span>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<div class="mt-6 rounded-2xl border border-indigo-200/60 bg-indigo-500/10 p-4 text-sm text-indigo-900 dark:border-indigo-500/30 dark:bg-indigo-500/10 dark:text-indigo-100">
|
||||||
|
<p class="font-medium">Empfohlene Maßnahme</p>
|
||||||
|
<p class="mt-1 text-sm leading-relaxed">
|
||||||
|
{{ $statusCopy[$selected->status] ?? 'Review abschließen und vollständigen Audit-Trail dokumentieren.' }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="rounded-3xl border border-zinc-200/70 bg-white/95 p-6 shadow-sm backdrop-blur dark:border-zinc-700/70 dark:bg-zinc-900/90">
|
<div class="mt-4 flex justify-end">
|
||||||
<div class="flex flex-wrap items-start justify-between gap-4">
|
<flux:link
|
||||||
<div>
|
:href="route('company.transactions', ['company' => $selected->company_id, 'transaction' => $selected->id])"
|
||||||
<h3 class="text-lg font-semibold text-zinc-900 dark:text-zinc-100">{{ $selected->company->legal_name }}</h3>
|
wire:navigate
|
||||||
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ $selected->company->summary }}</p>
|
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">
|
||||||
</div>
|
{{ __('Fallansicht maximieren') }}
|
||||||
<div class="flex flex-col items-end gap-2">
|
<flux:icon name="arrow-top-right-on-square" class="h-4 w-4" />
|
||||||
<span class="inline-flex items-center rounded-full bg-slate-900/90 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-white dark:bg-slate-200/20">
|
</flux:link>
|
||||||
Prüfung erforderlich
|
|
||||||
</span>
|
|
||||||
@php($detailStatusStyle = $statusStyles[$selected->status] ?? 'bg-zinc-500/10 text-zinc-600 border border-zinc-500/20')
|
|
||||||
<span class="inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold {{ $detailStatusStyle }}">
|
|
||||||
Status: {{ $selected->statusLabel() }}
|
|
||||||
</span>
|
|
||||||
<span class="text-3xl font-semibold text-slate-900 dark:text-white">
|
|
||||||
{{ number_format($selected->amount, 2, ',', '.') }} {{ $selected->currency }}
|
|
||||||
</span>
|
|
||||||
<div class="flex items-center gap-2 text-xs text-zinc-500 dark:text-zinc-400">
|
|
||||||
<flux:tooltip :content="$riskExplanation" position="top">
|
|
||||||
<span class="inline-flex items-center gap-1 rounded-md bg-slate-900/10 px-2 py-1 font-semibold text-slate-700 dark:bg-slate-200/10 dark:text-slate-200">
|
|
||||||
Risikoscore {{ $selected->risk_score }}
|
|
||||||
<span aria-hidden="true" class="inline-flex h-3.5 w-3.5 items-center justify-center rounded-full border border-slate-500/60 text-[0.55rem] font-semibold text-slate-600 dark:border-slate-400/60 dark:text-slate-200">
|
|
||||||
i
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</flux:tooltip>
|
|
||||||
<span>{{ $selected->executed_at?->format('d.m.Y, H:i') }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<dl class="mt-6 grid grid-cols-1 gap-4 text-sm text-zinc-600 dark:text-zinc-300">
|
|
||||||
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
|
||||||
<dt class="text-xs uppercase tracking-wide text-zinc-400">Statusbegründung</dt>
|
|
||||||
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">
|
|
||||||
{{ $statusSummary[$selected->status] ?? 'Status gemäß aktuellem Prüfpfad.' }}
|
|
||||||
</dd>
|
|
||||||
</div>
|
|
||||||
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
|
||||||
<dt class="text-xs uppercase tracking-wide text-zinc-400">Gegenpartei</dt>
|
|
||||||
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->counterparty }}</dd>
|
|
||||||
<dd class="text-xs text-zinc-500">{{ $selected->counterparty_country }}</dd>
|
|
||||||
</div>
|
|
||||||
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
|
||||||
<dt class="text-xs uppercase tracking-wide text-zinc-400">Zahlungskanal & Referenz</dt>
|
|
||||||
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->channel }}</dd>
|
|
||||||
<dd class="font-mono text-xs text-zinc-500">{{ $selected->reference }}</dd>
|
|
||||||
</div>
|
|
||||||
<div class="rounded-2xl bg-zinc-50/80 p-4 dark:bg-zinc-800/80">
|
|
||||||
<dt class="text-xs uppercase tracking-wide text-zinc-400">Flagging-Engine</dt>
|
|
||||||
<dd class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->flagged_by }}</dd>
|
|
||||||
<dd class="text-xs text-zinc-500">{{ $selected->flagged_reason }}</dd>
|
|
||||||
</div>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
@if (! empty($selected->signals))
|
|
||||||
<div class="mt-6 space-y-2">
|
|
||||||
<h4 class="text-xs font-semibold uppercase tracking-wide text-zinc-400">Detektionssignale</h4>
|
|
||||||
<div class="flex flex-wrap gap-2">
|
|
||||||
@foreach ($selected->signals as $signal)
|
|
||||||
<span class="inline-flex items-center gap-2 rounded-full border border-slate-300/70 bg-slate-100/60 px-3 py-1 text-xs font-medium text-slate-700 dark:border-slate-600 dark:bg-slate-800/60 dark:text-slate-200">
|
|
||||||
<span class="h-1.5 w-1.5 rounded-full bg-emerald-500"></span>
|
|
||||||
{{ data_get($signal, 'type') }} · {{ data_get($signal, 'value') }}
|
|
||||||
</span>
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
<div class="mt-6 rounded-2xl border border-indigo-200/60 bg-indigo-500/10 p-4 text-sm text-indigo-900 dark:border-indigo-500/30 dark:bg-indigo-500/10 dark:text-indigo-100">
|
|
||||||
<p class="font-medium">Empfohlene Maßnahme</p>
|
|
||||||
<p class="mt-1 text-sm leading-relaxed">
|
|
||||||
{{ $statusCopy[$selected->status] ?? 'Review abschließen und vollständigen Audit-Trail dokumentieren.' }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-4 flex justify-end">
|
|
||||||
<flux:link
|
|
||||||
:href="route('company.transactions', ['company' => $selected->company_id, 'transaction' => $selected->id])"
|
|
||||||
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"
|
|
||||||
>
|
|
||||||
{{ __('Fallansicht maximieren') }}
|
|
||||||
<flux:icon name="arrow-top-right-on-square" class="h-4 w-4" />
|
|
||||||
</flux:link>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="rounded-3xl border border-zinc-200/60 bg-white/95 p-6 shadow-sm backdrop-blur dark:border-zinc-700/70 dark:bg-zinc-900/90">
|
<div class="rounded-3xl border border-zinc-200/60 bg-white/95 p-6 shadow-sm backdrop-blur dark:border-zinc-700/70 dark:bg-zinc-900/90">
|
||||||
<h4 class="text-sm font-semibold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Unternehmensprofil</h4>
|
<h4 class="text-sm font-semibold uppercase tracking-wide text-zinc-500 dark:text-zinc-400">Unternehmensprofil</h4>
|
||||||
<ul class="mt-4 space-y-3 text-sm text-zinc-600 dark:text-zinc-300">
|
<ul class="mt-4 space-y-3 text-sm text-zinc-600 dark:text-zinc-300">
|
||||||
<li class="flex items-center justify-between">
|
<li class="flex items-center justify-between">
|
||||||
<span>Rechtlicher Name</span>
|
<span>Rechtlicher Name</span>
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->legal_name }}</span>
|
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->legal_name }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between">
|
<li class="flex items-center justify-between">
|
||||||
<span>Ticker</span>
|
<span>Ticker</span>
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->ticker }}</span>
|
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->ticker }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between">
|
<li class="flex items-center justify-between">
|
||||||
<span>Sektor</span>
|
<span>Sektor</span>
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->sector }}</span>
|
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->sector }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between">
|
<li class="flex items-center justify-between">
|
||||||
<span>Hauptsitz</span>
|
<span>Hauptsitz</span>
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->headquarters }}</span>
|
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->headquarters }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between">
|
<li class="flex items-center justify-between">
|
||||||
<span>Land</span>
|
<span>Land</span>
|
||||||
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->country }}</span>
|
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selected->company->country }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center justify-between">
|
<li class="flex items-center justify-between">
|
||||||
<span>KYC-Risikostufe</span>
|
<span>KYC-Risikostufe</span>
|
||||||
<span class="inline-flex items-center rounded-full bg-slate-100 px-2 py-1 text-xs font-semibold uppercase tracking-wide text-slate-700 dark:bg-slate-800 dark:text-slate-200">
|
<span class="inline-flex items-center rounded-full bg-slate-100 px-2 py-1 text-xs font-semibold uppercase tracking-wide text-slate-700 dark:bg-slate-800 dark:text-slate-200">
|
||||||
{{ Str::title($selected->company->kyc_risk_level) }}
|
{{ Str::title($selected->company->kyc_risk_level) }}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<div class="rounded-3xl border border-dashed border-zinc-300/70 bg-white/80 p-6 text-center text-sm text-zinc-500 shadow-sm dark:border-zinc-600/50 dark:bg-zinc-900/60 dark:text-zinc-300">
|
<div class="rounded-3xl border border-dashed border-zinc-300/70 bg-white/80 p-6 text-center text-sm text-zinc-500 shadow-sm dark:border-zinc-600/50 dark:bg-zinc-900/60 dark:text-zinc-300">
|
||||||
Wählen Sie links einen Alarm aus, um den vollständigen Prüfkontext einzusehen.
|
Wählen Sie links einen Alarm aus, um den vollständigen Prüfkontext einzusehen.
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user