- {contentModal.neutralizationMappings.length > 0 && (
-
-
- {t('{n} Platzhalter aufgelöst', { n: String(contentModal.neutralizationMappings.length) })}
-
-
- {t('Hover über markierte Platzhalter für Originaltext')}
-
+ {Object.keys(stats.topUsers).length > 0 && (
+
+
{t('Top-Nutzer nach AI-Aufrufen')}
+
+ ({ name, value }))}
+ layout="vertical" margin={{ left: 8, right: 16 }}
+ >
+
+
+
+
+
+
+
)}
+ >
+ )}
+
+ );
-
-
-
-
+ return [
+ {
+ id: 'audit-log',
+ label: _tabLabel('audit-log', t),
+ render: () => (
+
+
+
+ ),
+ },
+ {
+ id: 'ai-log',
+ label: _tabLabel('ai-log', t),
+ render: () => (
+
+
+
+ ,
+ onClick: _handleContentView,
+ },
+ {
+ id: 'downloadContent',
+ title: t('Input/Output herunterladen'),
+ icon: ,
+ onClick: _handleContentDownload,
+ },
+ ]}
+ />
+
+
+
+ <_AiLogDetailView />
+
+
+ ),
+ },
+ {
+ id: 'neutralization',
+ label: _tabLabel('neutralization', t),
+ render: () => (
+
+ ,
+ onClick: _handleDeleteMapping,
+ },
+ ]}
+ />
+
+ ),
+ },
+ {
+ id: 'stats',
+ label: _tabLabel('stats', t),
+ render: () => statsPanel,
+ },
+ ];
+ }, [
+ t,
+ selectedMandateId,
+ auditEntries,
+ auditLogColumns,
+ auditLoading,
+ auditLogHookData,
+ _loadAuditLog,
+ aiEntries,
+ aiLogColumns,
+ aiLoading,
+ aiLogHookData,
+ _loadAiLog,
+ _handleContentView,
+ _handleContentDownload,
+ neutEntries,
+ neutColumns,
+ neutLoading,
+ neutHookData,
+ _loadNeutMappings,
+ _handleDeleteMapping,
+ _handleDeleteMappingsBatch,
+ statsPeriod,
+ statsLoading,
+ stats,
+ _loadStats,
+ ]);
-
- {contentModalLoading ? (
-
{t('Lade Inhalt…')}
- ) : (
-
- {contentModalTab === 'input' ? (
- (() => {
- const text = contentModal.contentInputFull
- || contentModal.contentInputPreview
- || t('(kein Input gespeichert)');
- return _modalMappingLookup.size > 0
- ? _renderHighlightedText(text, _modalMappingLookup)
- : text;
- })()
- ) : (
- (() => {
- const text = contentModal.contentOutputFull
- || contentModal.contentOutputPreview
- || t('(kein Output gespeichert)');
- return _modalMappingLookup.size > 0
- ? _renderHighlightedText(text, _modalMappingLookup)
- : text;
- })()
- )}
-
- )}
-
+ return (
+
+
+ {t('Compliance & AI-Audit')}
+
+ {t('Transparente Übersicht aller AI-Datenflüsse und Sicherheitsereignisse Ihres Mandanten.')}
+
+
+
+
+
+
+
-