diff --git a/.DS_Store b/.DS_Store index 2f628c4..fe39d14 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/misc/transactions_output_structured/transactions_details_output - Menue1 - Transaktion.csv b/misc/transactions_output_structured/transactions_details_output - Menue1 - Transaktion.csv new file mode 100644 index 0000000..b833421 --- /dev/null +++ b/misc/transactions_output_structured/transactions_details_output - Menue1 - Transaktion.csv @@ -0,0 +1,64 @@ +;;;;; +Hauptebene Titel;Unterebene Titel;Daten;Prompt ID;Überschriften je Prompt ID;prompt_id: output_key = DB Feld transaction +Transaktion;;;;; +Transaktion;Analyse Transaktionsbetrag;;"51 +59 +67 +68 +69";"Plausibilität Betrag +Plausibilität Transaktionszeitpunkt +Plausibilität Transaktionsbetrag umsatzbezogen +Plausibilität Transaktionsbetrag ergebnisbezogen +Plausibilität Transaktionsbetrag Branchüblichkeit";"51: tranx_TX_AMOUNT +59: tranx_seasonality +67: tranx_revenueimpact +68: tranx_profitimpact +69: tranx_turnoverimpact" +Transaktion;Analyse Transaktionszweck & außerbetragliche Parameter;;"53 +57 +62 +64 +56 +58 +80 +83 +85 +65 +95 +96";"Verwendungszweck +Plausibilität Zahlungszweck +Plausibilität Geschäftbeziehung +Plausibilität Transaktionsbetrag Branchenadäquanz +Bewertung +Plausibilität Transaktionsumfang +Auffälligkeiten Transaktion +Plausibilität Transaktion Marktüblichkeit +Transaktion Namensabgleich +Titel fehlt +Plausibilität Instruktion Transaktion +Prüfung letztendliche wirtschaftliche Eigentümer";"53: tranx_TX_PURPOSE +57: tranx_PURPOSEbase +62: tranx_businesslogic +64: tranx_plausibilty +56: tranx_report +58: tranx_performanceperiod +80: tranx_pattern2 +83: tranx_contracttenor +85: tranx_mismatch +65: tranx_outliers +95: tranx_weekday +96: tranx_holdingobfuscation +" +Transaktion;Anzeige historischer Transaktionen mit Sender und/oder Empfänger aus der Transaktion inklusive der dokumentierten Auffälligkeiten zu AML pro Datensatz;;"52 +79 +66 +93";"Transaktionshistorie +Smurfing +Historische Transaktionen +Bankverbindung";"52: tranx_historical +79: tranx_duplicate +66: tranx_patterns +93: tranx_newbankaccount" +Transaktion;Zusätzliche Feststellungen (KYC/EDD);;54;Gegenpartei;54: tranx_counterpartyassessment +Transaktion;Export controls/trade restrictions;;81;Sanktionen;"81 entity_corporate_exportcontrol +81 counterparty_corporate_exportcontrol" \ No newline at end of file diff --git a/misc/transactions_output_structured/transactions_details_output - Menue2 - Stammdaten.csv b/misc/transactions_output_structured/transactions_details_output - Menue2 - Stammdaten.csv new file mode 100644 index 0000000..5b2650a --- /dev/null +++ b/misc/transactions_output_structured/transactions_details_output - Menue2 - Stammdaten.csv @@ -0,0 +1,70 @@ +;;;;; +Hauptebene Titel;Unterebene Titel;Daten;Prompt ID;Überschriften je Prompt ID;prompt_id: output_key = DB Feld transaction +Stammdaten;;;;; +Stammdaten;Rechtlicher Name (aktuell) / Firma;;"9 +9 +42 +42";"Name +Name der Gegenpartei +Warnmitteilung +Warnmitteilung der Gegenpartei";"9: entity_corporate_name +9: counterparty_corporate_name +42: entity_corporate_warnings +42: counterparty_corporate_warnings" +Stammdaten;Rechtsform;;10;"Rechtsform +Rechtsform d. Gegenpartei";"10: entity_corporate_form +10: counterparty_corporate_form" +Stammdaten;Registergericht & Nummer;;11;"Registernummer +Registernummer d. Gegenpartei";"11: entity_corporate_forum +11: counterparty_corporate_forum" +Stammdaten;Sitz / eingetragene Adresse;;"12 +48 +50 +74 +86";"Sitzadresse +Sitzadresse d. Gegenpartei +Korruption +Korruption d. Gegenpartei +Länderrisiko +Länderrisiko d. Gegenpartei +Korruption Land +Korruption Land d. Gegenpartei +Risikoländer +Risikoländer d. Gegenpartei";"12: entity_corporate_HQ +12: counterparty_corporate_HQ +48: entity_corporate_corruptionexposure +48: counterparty_corporate_corruptionexposure +50: entity_corporate_CTYexposure +50: counterparty_corporate_CTYexposure +74: entity_corruption_country +74: counterparty_corruption_country +86: entity_country_risk +86: counterparty_country_risk" +Stammdaten;Handelsname/Marke;;"34 +42";"Handelsnamen +Handelsnamen d. Gegenpartei +Warnmitteilungen +Warnmitteilungen d. Gegenpartei";"34: entity_corporate_brands +34: counterparty_corporate_brands +42: entity_corporate_warnings +42: counterparty_corporate_warnings" +Stammdaten;"Ebene 1 +Summary Geschäftsmodell";;3;Geschäft;"3: entity_corporate_purpose +3: counterparty_corporate_purpose" +Stammdaten;Brief History of the company;;2;Historie;"2: entity_corporate_history +2: counterparty_corporate_history" +Stammdaten;IBAN/BIC der Firma (alle, Listenform);;" +37";IBAN / BIC;"37: entity_corporate_IBAN +37: counterparty_corporate_IBAN" +Stammdaten;Mitarbeiteranzahl;;22;Mitarbeiteranzahl;"22: entity_corporate_employeecount +22: counterparty_corporate_employeecount" +Stammdaten;LEI (Legal Endity Identifikation Number , zu deutsch: internationale Handelsbuchnummer) + Status;;20;"LEI +";"20: entity_corporate_LEI +20: counterparty_corporate_LEI" +Stammdaten;USt-IdNr. (VAT);;19;"Umsatzsteuer-Identifikationsnummer +";"19: entity_corporate_taxID +19: counterparty_corporate_taxID" +Stammdaten;Offizielle Website;;35;Website;"35: entity_corporate_website +35: counterparty_corporate_website" +Stammdaten;Domain(s) & WHOIS;;36;Domains;"36: entity_corporate_domain +36: counterparty_corporate_domain" \ No newline at end of file diff --git a/resources/views/livewire/companies/transactions.blade.php b/resources/views/livewire/companies/transactions.blade.php index 6d7f243..77e5622 100644 --- a/resources/views/livewire/companies/transactions.blade.php +++ b/resources/views/livewire/companies/transactions.blade.php @@ -11,7 +11,8 @@ use Livewire\Attributes\Title; use Livewire\Volt\Component; use Livewire\WithPagination; -new #[Layout('components.layouts.app'), Title('Unternehmensauskunft Transaktionen')] class extends Component { +new #[Layout('components.layouts.app'), Title('Unternehmensauskunft Transaktionen')] class extends Component +{ use WithPagination; public Company $company; @@ -152,7 +153,7 @@ new #[Layout('components.layouts.app'), Title('Unternehmensauskunft Transaktione ->selectRaw('status, COUNT(*) as total, COALESCE(SUM(amount), 0) as volume') ->groupBy('status') ->get() - ->mapWithKeys(fn($row) => [ + ->mapWithKeys(fn ($row) => [ $row->status => [ 'count' => (int) $row->total, 'amount' => (float) $row->volume, @@ -258,11 +259,448 @@ new #[Layout('components.layouts.app'), Title('Unternehmensauskunft Transaktione return $items; } + #[Computed] + public function transactionDetailStructure(): array + { + return [ + [ + 'level' => 1, + 'title' => 'Transaktion', + 'sections' => [ + [ + 'title' => 'Analyse Transaktionsbetrag', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Plausibilität Betrag', + 'key' => 'tranx_TX_AMOUNT', + 'prompt_id' => '51', + ], + [ + 'label' => 'Plausibilität Transaktionszeitpunkt', + 'key' => 'tranx_seasonality', + 'prompt_id' => '59', + ], + [ + 'label' => 'Plausibilität Transaktionsbetrag umsatzbezogen', + 'key' => 'tranx_revenueimpact', + 'prompt_id' => '67', + ], + [ + 'label' => 'Plausibilität Transaktionsbetrag ergebnisbezogen', + 'key' => 'tranx_profitimpact', + 'prompt_id' => '68', + ], + [ + 'label' => 'Plausibilität Transaktionsbetrag Branchüblichkeit', + 'key' => 'tranx_turnoverimpact', + 'prompt_id' => '69', + ], + ], + ], + [ + 'title' => 'Analyse Transaktionszweck & außerbetragliche Parameter', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Verwendungszweck', + 'key' => 'tranx_TX_PURPOSE', + 'prompt_id' => '53', + ], + [ + 'label' => 'Plausibilität Zahlungszweck', + 'key' => 'tranx_PURPOSEbase', + 'prompt_id' => '57', + ], + [ + 'label' => 'Plausibilität Geschäftsbeziehung', + 'key' => 'tranx_businesslogic', + 'prompt_id' => '62', + ], + [ + 'label' => 'Plausibilität Transaktionsbetrag Branchenadäquanz', + 'key' => 'tranx_plausibilty', + 'prompt_id' => '64', + ], + [ + 'label' => 'Bewertung', + 'key' => 'tranx_report', + 'prompt_id' => '56', + ], + [ + 'label' => 'Plausibilität Transaktionsumfang', + 'key' => 'tranx_performanceperiod', + 'prompt_id' => '58', + ], + [ + 'label' => 'Auffälligkeiten Transaktion', + 'key' => 'tranx_pattern2', + 'prompt_id' => '80', + ], + [ + 'label' => 'Plausibilität Transaktion Marktüblichkeit', + 'key' => 'tranx_contracttenor', + 'prompt_id' => '83', + ], + [ + 'label' => 'Transaktion Namensabgleich', + 'key' => 'tranx_mismatch', + 'prompt_id' => '85', + ], + [ + 'label' => 'Titel fehlt', + 'key' => 'tranx_outliers', + 'prompt_id' => '65', + ], + [ + 'label' => 'Plausibilität Instruktion Transaktion', + 'key' => 'tranx_weekday', + 'prompt_id' => '95', + ], + [ + 'label' => 'Prüfung letztendliche wirtschaftliche Eigentümer', + 'key' => 'tranx_holdingobfuscation', + 'prompt_id' => '96', + ], + ], + ], + [ + 'title' => 'Anzeige historischer Transaktionen mit Sender und/oder Empfänger aus der Transaktion inklusive der dokumentierten Auffälligkeiten zu AML pro Datensatz', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Transaktionshistorie', + 'key' => 'tranx_historical', + 'prompt_id' => '52', + ], + [ + 'label' => 'Smurfing', + 'key' => 'tranx_duplicate', + 'prompt_id' => '79', + ], + [ + 'label' => 'Historische Transaktionen', + 'key' => 'tranx_patterns', + 'prompt_id' => '66', + ], + [ + 'label' => 'Bankverbindung', + 'key' => 'tranx_newbankaccount', + 'prompt_id' => '93', + ], + ], + ], + [ + 'title' => 'Zusätzliche Feststellungen (KYC/EDD)', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Gegenpartei', + 'key' => 'tranx_counterpartyassessment', + 'prompt_id' => '54', + ], + ], + ], + [ + 'title' => 'Export controls/trade restrictions', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Sanktionen (Entity)', + 'key' => 'entity_corporate_exportcontrol', + 'prompt_id' => '81', + ], + [ + 'label' => 'Sanktionen (Counterparty)', + 'key' => 'counterparty_corporate_exportcontrol', + 'prompt_id' => '81', + ], + ], + ], + ], + ], + [ + 'level' => 2, + 'title' => 'Stammdaten', + 'sections' => [ + [ + 'title' => 'Rechtlicher Name (aktuell) / Firma', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Name', + 'key' => 'entity_corporate_name', + 'prompt_id' => '9', + ], + [ + 'label' => 'Name der Gegenpartei', + 'key' => 'counterparty_corporate_name', + 'prompt_id' => '9', + ], + [ + 'label' => 'Warnmitteilung', + 'key' => 'entity_corporate_warnings', + 'prompt_id' => '42', + ], + [ + 'label' => 'Warnmitteilung der Gegenpartei', + 'key' => 'counterparty_corporate_warnings', + 'prompt_id' => '42', + ], + ], + ], + [ + 'title' => 'Rechtsform', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Rechtsform', + 'key' => 'entity_corporate_form', + 'prompt_id' => '10', + ], + [ + 'label' => 'Rechtsform d. Gegenpartei', + 'key' => 'counterparty_corporate_form', + 'prompt_id' => '10', + ], + ], + ], + [ + 'title' => 'Registergericht & Nummer', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Registernummer', + 'key' => 'entity_corporate_forum', + 'prompt_id' => '11', + ], + [ + 'label' => 'Registernummer d. Gegenpartei', + 'key' => 'counterparty_corporate_forum', + 'prompt_id' => '11', + ], + ], + ], + [ + 'title' => 'Sitz / eingetragene Adresse', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Sitzadresse', + 'key' => 'entity_corporate_HQ', + 'prompt_id' => '12', + ], + [ + 'label' => 'Sitzadresse d. Gegenpartei', + 'key' => 'counterparty_corporate_HQ', + 'prompt_id' => '12', + ], + [ + 'label' => 'Korruption', + 'key' => 'entity_corporate_corruptionexposure', + 'prompt_id' => '48', + ], + [ + 'label' => 'Korruption d. Gegenpartei', + 'key' => 'counterparty_corporate_corruptionexposure', + 'prompt_id' => '48', + ], + [ + 'label' => 'Länderrisiko', + 'key' => 'entity_corporate_CTYexposure', + 'prompt_id' => '50', + ], + [ + 'label' => 'Länderrisiko d. Gegenpartei', + 'key' => 'counterparty_corporate_CTYexposure', + 'prompt_id' => '50', + ], + [ + 'label' => 'Korruption Land', + 'key' => 'entity_corruption_country', + 'prompt_id' => '74', + ], + [ + 'label' => 'Korruption Land d. Gegenpartei', + 'key' => 'counterparty_corruption_country', + 'prompt_id' => '74', + ], + [ + 'label' => 'Risikoländer', + 'key' => 'entity_country_risk', + 'prompt_id' => '86', + ], + [ + 'label' => 'Risikoländer d. Gegenpartei', + 'key' => 'counterparty_country_risk', + 'prompt_id' => '86', + ], + ], + ], + [ + 'title' => 'Handelsname/Marke', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Handelsnamen', + 'key' => 'entity_corporate_brands', + 'prompt_id' => '34', + ], + [ + 'label' => 'Handelsnamen d. Gegenpartei', + 'key' => 'counterparty_corporate_brands', + 'prompt_id' => '34', + ], + [ + 'label' => 'Warnmitteilungen', + 'key' => 'entity_corporate_warnings', + 'prompt_id' => '42', + ], + [ + 'label' => 'Warnmitteilungen d. Gegenpartei', + 'key' => 'counterparty_corporate_warnings', + 'prompt_id' => '42', + ], + ], + ], + [ + 'title' => 'Summary Geschäftsmodell', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Geschäft', + 'key' => 'entity_corporate_purpose', + 'prompt_id' => '3', + ], + [ + 'label' => 'Geschäft d. Gegenpartei', + 'key' => 'counterparty_corporate_purpose', + 'prompt_id' => '3', + ], + ], + ], + [ + 'title' => 'Brief History of the company', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Historie', + 'key' => 'entity_corporate_history', + 'prompt_id' => '2', + ], + [ + 'label' => 'Historie d. Gegenpartei', + 'key' => 'counterparty_corporate_history', + 'prompt_id' => '2', + ], + ], + ], + [ + 'title' => 'IBAN/BIC der Firma (alle, Listenform)', + 'description' => null, + 'fields' => [ + [ + 'label' => 'IBAN / BIC', + 'key' => 'entity_corporate_IBAN', + 'prompt_id' => '37', + ], + [ + 'label' => 'IBAN / BIC d. Gegenpartei', + 'key' => 'counterparty_corporate_IBAN', + 'prompt_id' => '37', + ], + ], + ], + [ + 'title' => 'Mitarbeiteranzahl', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Mitarbeiteranzahl', + 'key' => 'entity_corporate_employeecount', + 'prompt_id' => '22', + ], + [ + 'label' => 'Mitarbeiteranzahl d. Gegenpartei', + 'key' => 'counterparty_corporate_employeecount', + 'prompt_id' => '22', + ], + ], + ], + [ + 'title' => 'LEI (Legal Entity Identification Number)', + 'description' => null, + 'fields' => [ + [ + 'label' => 'LEI', + 'key' => 'entity_corporate_LEI', + 'prompt_id' => '20', + ], + [ + 'label' => 'LEI d. Gegenpartei', + 'key' => 'counterparty_corporate_LEI', + 'prompt_id' => '20', + ], + ], + ], + [ + 'title' => 'USt-IdNr. (VAT)', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Umsatzsteuer-Identifikationsnummer', + 'key' => 'entity_corporate_taxID', + 'prompt_id' => '19', + ], + [ + 'label' => 'Umsatzsteuer-Identifikationsnummer d. Gegenpartei', + 'key' => 'counterparty_corporate_taxID', + 'prompt_id' => '19', + ], + ], + ], + [ + 'title' => 'Offizielle Website', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Website', + 'key' => 'entity_corporate_website', + 'prompt_id' => '35', + ], + [ + 'label' => 'Website d. Gegenpartei', + 'key' => 'counterparty_corporate_website', + 'prompt_id' => '35', + ], + ], + ], + [ + 'title' => 'Domain(s) & WHOIS', + 'description' => null, + 'fields' => [ + [ + 'label' => 'Domains', + 'key' => 'entity_corporate_domain', + 'prompt_id' => '36', + ], + [ + 'label' => 'Domains d. Gegenpartei', + 'key' => 'counterparty_corporate_domain', + 'prompt_id' => '36', + ], + ], + ], + ], + ], + ]; + } + protected function filteredQuery(): Builder { return $this->baseQuery() - ->when($this->status !== 'all', fn(Builder $query) => $query->where('status', $this->status)) - ->when($this->channel !== 'all', fn(Builder $query) => $query->where('channel', $this->channel)); + ->when($this->status !== 'all', fn (Builder $query) => $query->where('status', $this->status)) + ->when($this->channel !== 'all', fn (Builder $query) => $query->where('channel', $this->channel)); } protected function baseQuery(): Builder @@ -284,6 +722,7 @@ $counterpartyHistory = $this->counterpartyHistory; $recentAlerts = $this->recentAlerts; $actionChecklist = $this->actionChecklist; $checklistIntro = __('Fokusbereiche für diesen Fall'); +$detailStructure = $this->transactionDetailStructure; $formatCurrency = static fn (float $value): string => number_format($value, 2, ',', '.') . ' €'; $formatCurrencyCompact = static function (float $value): string { @@ -776,6 +1215,187 @@ Transaction::STATUS_CLEARED => __('Keine Auffälligkeiten. Dokumentieren und arc @endif + + @if (! empty($detailStructure)) +
+ {{ $field['label'] }} +
+{{ $answer }}
+{{ __('Quellen') }}:
++ {{ __('Nicht verfügbar') }} +
+ @endif ++ {{ __('Feld') }}: {{ $field['key'] }} +
++ {{ __('Hinweis zur Datenstruktur') }} +
++ {{ __('Diese Felder basieren auf der strukturierten Analyse-Konfiguration. Fehlende Werte können durch erweiterte Datenquellen oder manuelle Eingaben ergänzt werden.') }} +
+