10 KiB
Detaillierte Beschreibung der Datenbank-Tabellen
Backend Schema
1. backend.transactions
Zweck: Rohdaten-Tabelle für eingehende Transaktionen aus verschiedenen Quellen (vermutlich CSV/Excel-Uploads oder API-Imports)
Struktur: 14 Spalten
Identifikation
- id (integer, NOT NULL, AUTO_INCREMENT)
- Primärschlüssel
- Sequenz:
backend.transactions_id_seq
Transaktions-Stammdaten
-
corporate_entity (text, NOT NULL)
- Name der durchführenden Firma/Entität
- Kein Foreign Key - als Textfeld gespeichert
-
corporate_counterparty (text, NOT NULL)
- Name der Gegenpartei/Empfänger
- Freitext, keine Normalisierung
-
tx_date (text, NOT NULL)
- Transaktionsdatum
- ⚠️ Als Text gespeichert (nicht als DATE/TIMESTAMP)
- Wahrscheinlich verschiedene Formate möglich
-
tx_amount (double precision, NOT NULL)
- Transaktionsbetrag
- Fließkommazahl für Währungsbeträge
-
tx_currency (text, nullable)
- Währungscode (z.B. EUR, USD)
- Optional
-
tx_purpose (text, nullable)
- Verwendungszweck/Beschreibung der Transaktion
- Freitextfeld
Geografische Informationen
-
tx_country_outgoing (text, nullable)
- Herkunftsland der Zahlung
-
tx_country_incoming (text, nullable)
- Zielland der Zahlung
Metadaten & Verarbeitung
-
source_file (text, nullable)
- Name/Pfad der Quelldatei
- Für Nachverfolgbarkeit der Datenherkunft
-
raw_payload (text, nullable)
- Rohdaten im Originalformat
- Ermöglicht Reprocessing bei Bedarf
-
status (text, NOT NULL)
- Verarbeitungsstatus (z.B. "pending", "processed", "error")
-
created_at (text, NOT NULL)
- Erstellungszeitpunkt
- ⚠️ Als Text gespeichert (nicht als TIMESTAMP)
-
last_modified_at (text, NOT NULL)
- Letzte Änderung
- ⚠️ Als Text gespeichert (nicht als TIMESTAMP)
Charakteristik: ETL-/Staging-Tabelle mit lockerer Typisierung für maximale Flexibilität beim Import
2. backend.transaction_outputs
Zweck: Speichert generierte Outputs/Ergebnisse aus Prompt-Verarbeitung für Transaktionen (vermutlich KI/LLM-generierte Analysen)
Struktur: 5 Spalten
Primärschlüssel (zusammengesetzt)
-
transaction_id (integer, NOT NULL)
- Foreign Key zu
backend.transactions.id - Referenziert die analysierte Transaktion
- Foreign Key zu
-
prompt_id (integer, NOT NULL)
- Foreign Key zu
backend.prompt_templates(vermutlich) - Identifiziert welcher Prompt verwendet wurde
- Foreign Key zu
-
output_key (text, NOT NULL)
- Schlüssel für den Output-Typ
- Beispiele: "risk_assessment", "compliance_check", "summary", "recommendations"
Output-Daten
- content (text, NOT NULL)
- Der generierte Inhalt/Ergebnis
- Kann strukturierter Text, JSON oder Markdown sein
Verknüpfung
- run_id (integer, nullable)
- Foreign Key zu
backend.prompt_runs(vermutlich) - Gruppiert Outputs aus demselben Batch/Durchlauf
- Optional für ad-hoc Generierungen
- Foreign Key zu
Charakteristik: N:M-Mapping zwischen Transaktionen und Prompts mit flexiblen Output-Keys
Public Schema
3. public.companies
Zweck: Normalisierte Firmenstammdaten für KYC (Know Your Customer) und Compliance
Struktur: 11 Spalten
Identifikation
- id (bigint, NOT NULL, AUTO_INCREMENT)
- Primärschlüssel
- Sequenz:
companies_id_seq
Firmenidentifikation
-
name (varchar, NOT NULL)
- Primärer Firmenname (Kurzform/Handelsname)
-
legal_name (varchar, nullable)
- Offizieller rechtlicher Name
- Kann vom Handelsnamen abweichen
-
ticker (varchar, nullable)
- Börsenticker-Symbol (z.B. "AAPL", "MSFT")
- Nur für börsennotierte Unternehmen
Klassifikation & Lokalisierung
-
sector (varchar, nullable)
- Wirtschaftssektor/Branche
- Z.B. "Technology", "Finance", "Manufacturing"
-
country (varchar, NOT NULL, default: 'DE')
- Ländercode (ISO 2-Letter)
- Standard: Deutschland
-
headquarters (varchar, nullable)
- Hauptsitz/Firmenzentrale
- Stadt oder Stadt + Land
Risk & Compliance
- kyc_risk_level (varchar, NOT NULL, default: 'medium')
- KYC-Risikoeinstufung
- Mögliche Werte: "low", "medium", "high"
- Default: mittleres Risiko
Zusatzinformationen
- summary (text, nullable)
- Firmenbeschreibung/Zusammenfassung
- Freitextfeld für Kontext
Zeitstempel
-
created_at (timestamp, nullable)
- Erstellungszeitpunkt
-
updated_at (timestamp, nullable)
- Letzte Aktualisierung
- Laravel-Standard für Timestamps
Charakteristik: Saubere, normalisierte Stammdatentabelle mit KYC-Fokus
4. public.transactions
Zweck: Produktive Transaktionsdaten mit umfassender Anreicherung aus externen Datenquellen und Risikoanalyse
Struktur: 54 Spalten (!)
Identifikation
- id (bigint, NOT NULL, AUTO_INCREMENT) - 9x aufgelistet (⚠️ Schema-Anomalie!)
- Primärschlüssel
- Sequenz:
transactions_id_seq
Transaktions-Basis
-
company_id (bigint, NOT NULL, default: 1)
- Foreign Key zu
public.companies.id - Zuordnung zur durchführenden Firma
- Foreign Key zu
-
reference (varchar, NOT NULL)
- Transaktionsreferenz/Buchungsnummer
- Eindeutiger Identifier
-
amount (numeric, NOT NULL)
- Transaktionsbetrag
- Numeric für präzise Währungsbeträge
-
currency (varchar, NOT NULL, default: 'EUR')
- Währungscode
- Standard: Euro
-
counterparty (varchar, NOT NULL)
- Name der Gegenpartei
-
counterparty_country (varchar, nullable)
- Land der Gegenpartei
-
channel (varchar, nullable)
- Transaktionskanal (z.B. "wire", "sepa", "swift")
-
executed_at (timestamp, NOT NULL)
- Ausführungszeitpunkt der Transaktion
Risk Management
-
risk_score (smallint, NOT NULL, default: 0)
- Risikobewertung (0-100 oder ähnlich)
-
status (varchar, NOT NULL)
- Transaktionsstatus (z.B. "pending", "approved", "flagged")
-
requires_review (boolean, NOT NULL, default: true)
- Manuelles Review erforderlich?
-
flagged_by (varchar, nullable)
- System/User der die Transaktion markiert hat
-
flagged_reason (text, nullable)
- Grund für Markierung
-
signals (json, nullable)
- Risikosignale/Trigger als JSON
- Strukturierte Risikoindikatoren
Externe Datenquellen (11 Integrationen)
1. Registry (Handelsregister Basic)
- registry_company_number (text)
- registry_source (text) - Quelle (z.B. "Handelsregister")
- registry_match_score (double precision) - Matching-Genauigkeit
- registry_data (jsonb) - Registrierungsdaten
- registry_last_refreshed_at (timestamp)
2. Genesis (Statistisches Bundesamt)
- genesis_context (jsonb)
- genesis_last_refreshed_at (timestamp)
3. GovData (Offene Verwaltungsdaten)
- govdata_data (jsonb)
- govdata_last_refreshed_at (timestamp)
4. Bundesanzeiger
- bundesanzeiger_data (jsonb)
- bundesanzeiger_last_refreshed_at (timestamp)
5. Insolvency (Insolvenzregister)
- insolvency_data (jsonb)
- insolvency_last_refreshed_at (timestamp)
6. RSS Alerts (News/Medien)
- rss_alerts (jsonb)
- rss_last_refreshed_at (timestamp)
7. Sanctions (Sanktionslisten)
- sanctions_data (jsonb)
- sanctions_last_refreshed_at (timestamp)
8. PEP (Politically Exposed Persons)
- pep_data (jsonb)
- pep_last_refreshed_at (timestamp)
9. GLEIF (Legal Entity Identifier)
- gleif_lei (text) - LEI-Nummer
- gleif_data (json)
- gleif_last_refreshed_at (timestamp)
10. EU Sanctions
- eu_sanctions_data (jsonb)
- eu_sanctions_last_refreshed_at (timestamp)
11. Handelsregister (Extended)
- handelsregister_data (jsonb)
- handelsregister_last_refreshed_at (timestamp)
- handelsregister_status (text)
- handelsregister_entity_id (bigint)
Zeitstempel
- created_at (timestamp, nullable)
- updated_at (timestamp, nullable)
Charakteristik: Hochgradig angereichertes Data Warehouse für Compliance und Risk Management mit Multi-Source-Integration
Zusammenfassung der Architektur
┌─────────────────────────────────────┐
│ Backend Schema (Staging) │
├─────────────────────────────────────┤
│ • Rohdaten-Import │
│ • Lockere Typisierung (text) │
│ • Source-Tracking │
│ • Prompt/AI-Integration │
└────────────┬────────────────────────┘
│
│ ETL/Processing
↓
┌─────────────────────────────────────┐
│ Public Schema (Production) │
├─────────────────────────────────────┤
│ • Normalisierte Daten │
│ • Strikte Typisierung │
│ • Multi-Source-Enrichment │
│ • Risk & Compliance Features │
└─────────────────────────────────────┘
Datenfluss-Hypothese
- Import: Rohdaten landen in
backend.transactions - AI-Verarbeitung: Prompts generieren Outputs in
backend.transaction_outputs - Enrichment: Externe Datenquellen werden abgefragt
- Normalisierung: Daten werden nach
public.companiesundpublic.transactionsübertragen - Risk Assessment: Risikoscores und Flags werden berechnet
- Review: Transaktionen mit
requires_review=truelanden in der Queue
Technische Hinweise
Probleme
- ⚠️
public.transactionshat 9x duplizierteidSpalte im Schema - ⚠️
backend.transactionsspeichert Timestamps als TEXT statt TIMESTAMP - ⚠️ Keine expliziten Foreign Key Constraints sichtbar zwischen den Schemas
Empfehlungen
- Schema-Anomalie in
public.transactionsuntersuchen - Datum-Felder in
backend.transactionszu echten TIMESTAMP-Typen migrieren - Indizes auf häufig genutzte JOIN/WHERE Spalten prüfen
- Foreign Key Constraints zwischen den Schemas dokumentieren