chore: remove DaxCompanySeeder (legacy demo data)

The DaxCompanySeeder created fake DAX-40 companies and transactions
for development. We now use real data from the backend via the
TransformDataPoolToProduction job, so this seeder is no longer needed.
This commit is contained in:
2025-11-21 10:32:15 +01:00
parent f23d56a0b7
commit b34612aeaa
2 changed files with 2 additions and 154 deletions
+2 -1
View File
@@ -20,6 +20,7 @@ class DatabaseSeeder extends Seeder
'email' => 'test@example.com', 'email' => 'test@example.com',
]); ]);
$this->call(DaxCompanySeeder::class); // Note: Company and Transaction data is now synced from the backend
// via TransformDataPoolToProduction job, not seeded manually
} }
} }
-153
View File
@@ -1,153 +0,0 @@
<?php
namespace Database\Seeders;
use App\Models\Company;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
class DaxCompanySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$companies = [
['name' => 'Adidas AG', 'legal_name' => 'adidas Aktiengesellschaft', 'ticker' => 'ADS', 'sector' => 'Konsumgüter (Zyklisch)', 'headquarters' => 'Herzogenaurach', 'summary' => 'Globaler Sportartikelhersteller mit Schwerpunkt auf Schuhen, Bekleidung und digitalen Services.', 'kyc_risk_level' => 'medium'],
['name' => 'Airbus SE', 'legal_name' => 'Airbus Societas Europaea', 'ticker' => 'AIR', 'sector' => 'Industrie', 'headquarters' => 'Leiden', 'country' => 'NL', 'summary' => 'Luft- und Raumfahrtkonzern mit zivilen, militärischen und Raumfahrtaktivitäten.', 'kyc_risk_level' => 'medium'],
['name' => 'Allianz SE', 'legal_name' => 'Allianz Societas Europaea', 'ticker' => 'ALV', 'sector' => 'Finanzen', 'headquarters' => 'München', 'summary' => 'Versicherung und Vermögensverwaltung mit globalem Risikoportfolio.', 'kyc_risk_level' => 'low'],
['name' => 'BASF SE', 'legal_name' => 'BASF Societas Europaea', 'ticker' => 'BAS', 'sector' => 'Grundstoffe', 'headquarters' => 'Ludwigshafen', 'summary' => 'Chemiekonzern mit Aktivitäten in Materialien, Industrial Solutions und Agricultural Solutions.', 'kyc_risk_level' => 'medium'],
['name' => 'Bayer AG', 'legal_name' => 'Bayer Aktiengesellschaft', 'ticker' => 'BAYN', 'sector' => 'Gesundheit', 'headquarters' => 'Leverkusen', 'summary' => 'Life-Science-Unternehmen mit den Segmenten Pharmaceuticals, Consumer Health und Crop Science.', 'kyc_risk_level' => 'medium'],
['name' => 'Beiersdorf AG', 'legal_name' => 'Beiersdorf Aktiengesellschaft', 'ticker' => 'BEI', 'sector' => 'Konsumgüter (Defensiv)', 'headquarters' => 'Hamburg', 'summary' => 'Hautpflegeexperte mit Marken wie Nivea, Eucerin und Tesa.', 'kyc_risk_level' => 'low'],
['name' => 'BMW AG', 'legal_name' => 'Bayerische Motoren Werke Aktiengesellschaft', 'ticker' => 'BMW', 'sector' => 'Konsumgüter (Zyklisch)', 'headquarters' => 'München', 'summary' => 'Hersteller von Premiumfahrzeugen mit den Marken BMW, MINI und Rolls-Royce.', 'kyc_risk_level' => 'medium'],
['name' => 'Brenntag SE', 'legal_name' => 'Brenntag Societas Europaea', 'ticker' => 'BNR', 'sector' => 'Industrie', 'headquarters' => 'Essen', 'summary' => 'Weltweit führender Chemie- und Inhaltsstoffdistributor mit Value-Added Services.', 'kyc_risk_level' => 'medium'],
['name' => 'Commerzbank AG', 'legal_name' => 'Commerzbank Aktiengesellschaft', 'ticker' => 'CBK', 'sector' => 'Finanzen', 'headquarters' => 'Frankfurt am Main', 'summary' => 'Universalbank mit Fokus auf Mittelstands- und Firmenkunden.', 'kyc_risk_level' => 'high'],
['name' => 'Daimler Truck AG', 'legal_name' => 'Daimler Truck Holding Aktiengesellschaft', 'ticker' => 'DTG', 'sector' => 'Industrie', 'headquarters' => 'Leinfelden-Echterdingen', 'summary' => 'Hersteller von schweren Lkw und Bussen mit globalem Produktionsnetzwerk.', 'kyc_risk_level' => 'medium'],
['name' => 'Deutsche Bank AG', 'legal_name' => 'Deutsche Bank Aktiengesellschaft', 'ticker' => 'DBK', 'sector' => 'Finanzen', 'headquarters' => 'Frankfurt am Main', 'summary' => 'Globales Investment- und Firmenkundengeschäft mit Vermögensverwaltung.', 'kyc_risk_level' => 'high'],
['name' => 'Deutsche Börse AG', 'legal_name' => 'Deutsche Börse Aktiengesellschaft', 'ticker' => 'DB1', 'sector' => 'Finanzen', 'headquarters' => 'Eschborn', 'summary' => 'Marktinfrastrukturbetreiber für Handel, Clearing und Settlement.', 'kyc_risk_level' => 'low'],
['name' => 'Deutsche Post AG', 'legal_name' => 'Deutsche Post Aktiengesellschaft', 'ticker' => 'DPW', 'sector' => 'Industrie', 'headquarters' => 'Bonn', 'summary' => 'Logistikkonzern der Deutsche Post DHL Group mit globaler Supply-Chain-Plattform.', 'kyc_risk_level' => 'medium'],
['name' => 'Deutsche Telekom AG', 'legal_name' => 'Deutsche Telekom Aktiengesellschaft', 'ticker' => 'DTE', 'sector' => 'Kommunikation', 'headquarters' => 'Bonn', 'summary' => 'Integrierter Telekommunikationsanbieter mit Fokus auf Europa und USA.', 'kyc_risk_level' => 'low'],
['name' => 'E.ON SE', 'legal_name' => 'E.ON Societas Europaea', 'ticker' => 'EOAN', 'sector' => 'Versorger', 'headquarters' => 'Essen', 'summary' => 'Energieversorger mit Schwerpunkt auf Energienetzen und Kundenlösungen.', 'kyc_risk_level' => 'medium'],
['name' => 'Fresenius SE & Co. KGaA', 'legal_name' => 'Fresenius SE & Co. KGaA', 'ticker' => 'FRE', 'sector' => 'Gesundheit', 'headquarters' => 'Bad Homburg vor der Höhe', 'summary' => 'Gesundheitskonzern mit Kliniken, Medizintechnik und Dienstleistungen.', 'kyc_risk_level' => 'medium'],
['name' => 'Hannover Rück SE', 'legal_name' => 'Hannover Rück Societas Europaea', 'ticker' => 'HNR1', 'sector' => 'Finanzen', 'headquarters' => 'Hannover', 'summary' => 'Rückversicherer mit Sparten in Schaden/Unfall und Leben/Kranken.', 'kyc_risk_level' => 'low'],
['name' => 'Heidelberg Materials AG', 'legal_name' => 'Heidelberg Materials Aktiengesellschaft', 'ticker' => 'HEI', 'sector' => 'Grundstoffe', 'headquarters' => 'Heidelberg', 'summary' => 'Baustoffhersteller mit Schwerpunkt auf Zement, Zuschlagstoffen und Transportbeton.', 'kyc_risk_level' => 'medium'],
['name' => 'Henkel AG & Co. KGaA', 'legal_name' => 'Henkel AG & Co. Kommanditgesellschaft auf Aktien', 'ticker' => 'HEN3', 'sector' => 'Konsumgüter (Defensiv)', 'headquarters' => 'Düsseldorf', 'summary' => 'Hersteller von Konsumgütern und Klebstofftechnologien mit globaler Präsenz.', 'kyc_risk_level' => 'low'],
['name' => 'Infineon Technologies AG', 'legal_name' => 'Infineon Technologies Aktiengesellschaft', 'ticker' => 'IFX', 'sector' => 'Informationstechnologie', 'headquarters' => 'Neubiberg', 'summary' => 'Halbleiterhersteller für Mobilität, Energieeffizienz und Sicherheit.', 'kyc_risk_level' => 'medium'],
['name' => 'Mercedes-Benz Group AG', 'legal_name' => 'Mercedes-Benz Group Aktiengesellschaft', 'ticker' => 'MBG', 'sector' => 'Konsumgüter (Zyklisch)', 'headquarters' => 'Stuttgart', 'summary' => 'Hersteller von Premium-Pkw und Vans mit starkem E-Mobility-Fokus.', 'kyc_risk_level' => 'medium'],
['name' => 'Porsche SE', 'legal_name' => 'Porsche Automobil Holding Societas Europaea', 'ticker' => 'PAH3', 'sector' => 'Konsumgüter (Zyklisch)', 'headquarters' => 'Stuttgart', 'summary' => 'Strategische Beteiligungsgesellschaft mit Schwerpunkt Automobil- und Mobilitätssektor.', 'kyc_risk_level' => 'medium'],
['name' => 'PUMA SE', 'legal_name' => 'PUMA Societas Europaea', 'ticker' => 'PUM', 'sector' => 'Konsumgüter (Zyklisch)', 'headquarters' => 'Herzogenaurach', 'summary' => 'Sportartikelunternehmen mit Performance- und Lifestyle-Sortiment.', 'kyc_risk_level' => 'medium'],
['name' => 'Qiagen N.V.', 'legal_name' => 'Qiagen Naamloze Vennootschap', 'ticker' => 'QIA', 'sector' => 'Gesundheit', 'headquarters' => 'Venlo', 'country' => 'NL', 'summary' => 'Spezialist für molekulare Diagnostik und Probenaufbereitung.', 'kyc_risk_level' => 'medium'],
['name' => 'RWE AG', 'legal_name' => 'RWE Aktiengesellschaft', 'ticker' => 'RWE', 'sector' => 'Versorger', 'headquarters' => 'Essen', 'summary' => 'Energieunternehmen in Transformation hin zu erneuerbaren Energien.', 'kyc_risk_level' => 'medium'],
['name' => 'SAP SE', 'legal_name' => 'SAP Societas Europaea', 'ticker' => 'SAP', 'sector' => 'Informationstechnologie', 'headquarters' => 'Walldorf', 'summary' => 'Anbieter von Unternehmenssoftware für ERP und Cloud-Lösungen.', 'kyc_risk_level' => 'low'],
['name' => 'Siemens AG', 'legal_name' => 'Siemens Aktiengesellschaft', 'ticker' => 'SIE', 'sector' => 'Industrie', 'headquarters' => 'München', 'summary' => 'Technologiekonzern mit Fokus auf Automatisierung, Digitalisierung und Infrastruktur.', 'kyc_risk_level' => 'low'],
['name' => 'Siemens Healthineers AG', 'legal_name' => 'Siemens Healthineers Aktiengesellschaft', 'ticker' => 'SHL', 'sector' => 'Gesundheit', 'headquarters' => 'Erlangen', 'summary' => 'Medizintechnikanbieter für Bildgebung, Diagnostik und Therapie.', 'kyc_risk_level' => 'medium'],
['name' => 'Symrise AG', 'legal_name' => 'Symrise Aktiengesellschaft', 'ticker' => 'SY1', 'sector' => 'Grundstoffe', 'headquarters' => 'Holzminden', 'summary' => 'Hersteller von Duft-, Geschmacks- und Nährstofflösungen.', 'kyc_risk_level' => 'medium'],
['name' => 'Volkswagen AG', 'legal_name' => 'Volkswagen Aktiengesellschaft', 'ticker' => 'VOW', 'sector' => 'Konsumgüter (Zyklisch)', 'headquarters' => 'Wolfsburg', 'summary' => 'Automobilkonzern mit Markenportfolio von Volumen bis Luxus.', 'kyc_risk_level' => 'high'],
];
$channels = [
'SEPA-Überweisung',
'Auslandsüberweisung',
'SWIFT MT103',
'Grenzüberschreitendes ACH',
'Hochwertiges Clearing',
'Handelsfinanzierungs-Abwicklung',
];
$flaggedReasons = [
'Gegenpartei erscheint auf konsolidierter Sanktionsliste.',
'Transaktionsbetrag liegt 300 % über dem historischen Durchschnitt.',
'Unüblicher Zahlungskorridor für das Branchensegment.',
'Mehrere gestapelte Überweisungen im Monitoring erkannt.',
'Begünstigte Bank sitzt in Hochrisiko-Jurisdiktion.',
'Schnelle Mittelbewegungen über verschachtelte Konten.',
'Negativmeldung zur Geschäftsleitung der Gegenpartei gefunden.',
];
$analysts = ['AML-Radar', 'Sanktionswächter', 'Verhaltensanalyse', 'Netzwerk-Intelligence', 'Adverse-Media-Scan'];
$signalCatalog = [
['type' => 'Sanktionsliste', 'value' => 'Treffer EU-Konsolidierte Liste'],
['type' => 'PEP-Screening', 'value' => 'Politisch exponierte Person, Stufe 2'],
['type' => 'Geo-Risiko', 'value' => 'Hochrisikoland: TR'],
['type' => 'Transaktionsdichte', 'value' => '6 verknüpfte Zahlungen binnen 24h'],
['type' => 'Strukturierung', 'value' => 'Hinweise auf Smurfing-Muster'],
['type' => 'Negativnachrichten', 'value' => 'Aktuelle Betrugsermittlungen gemeldet'],
['type' => 'Wirtschaftlich Berechtigter', 'value' => 'Intransparente Eigentümerstruktur'],
['type' => 'Branchenabweichung', 'value' => 'Handelswert 210 % über Peergroup'],
];
$statusPool = [
Transaction::STATUS_TRUE_POSITIVE,
Transaction::STATUS_FALSE_POSITIVE,
Transaction::STATUS_FALSE_POSITIVE,
Transaction::STATUS_CLEARED,
Transaction::STATUS_CLEARED,
Transaction::STATUS_CLEARED,
];
$faker = fake('en_GB');
$sequence = 1;
DB::transaction(function () use (
$companies,
$channels,
$flaggedReasons,
$analysts,
$signalCatalog,
$statusPool,
$faker,
&$sequence
) {
Transaction::query()->delete();
Company::query()->delete();
foreach ($companies as $companyData) {
$company = Company::create(array_merge(
[
'country' => $companyData['country'] ?? 'DE',
],
$companyData
));
$transactionTotal = random_int(4, 7);
for ($i = 0; $i < $transactionTotal; $i++) {
$status = Arr::random($statusPool);
$riskScore = match ($status) {
Transaction::STATUS_TRUE_POSITIVE => random_int(82, 95),
Transaction::STATUS_FALSE_POSITIVE => random_int(48, 65),
default => random_int(12, 28),
};
$executedAt = Carbon::now()
->subDays(random_int(1, 45))
->setTime(random_int(7, 19), random_int(0, 59), random_int(0, 59));
$company->transactions()->create([
'reference' => 'TRX-'.str_pad((string) $sequence++, 6, '0', STR_PAD_LEFT),
'amount' => $faker->randomFloat(2, 8_500, 4_500_000),
'currency' => Arr::random(['EUR', 'USD', 'GBP']),
'counterparty' => $faker->company(),
'counterparty_country' => Arr::random(['DE', 'DE', 'CH', 'AT', 'NL', 'GB', 'LU', 'SG']),
'channel' => Arr::random($channels),
'executed_at' => $executedAt,
'risk_score' => $riskScore,
'status' => $status,
'requires_review' => true,
'flagged_by' => Arr::random($analysts),
'flagged_reason' => Arr::random($flaggedReasons),
'signals' => array_values(Arr::random(
$signalCatalog,
random_int(1, min(3, count($signalCatalog)))
)),
]);
}
}
});
}
}