+ {/* Verdikt-Kopf */}
+
+ {sc && (
+
+ {sc.label}
+
+ )}
+
+ {l1Passed}/{l1Score.length} Pflichtangaben
+ {l2.length > 0 && <>, {l2Passed}/{l2.length} Detailprüfungen>}
+
+
+
+ {l2.length > 0 && (
+
+ )}
+
+
+
+ {/* Pflichtangaben-Tabelle */}
+
+ {grouped.map(g => {
+ const l1Info = g.check.severity === 'INFO' && !g.check.passed
+ return (
+
+
+
+
+
+ {g.check.label}
+
+ {g.check.passed && g.check.matched_text && g.children.length === 0 && (
+
+ )}
+ {!g.check.passed && g.check.hint && (
+
+ {g.check.hint}
+
+ )}
+
+
+ {g.children.length > 0 && (
+
+ {g.children.map(ch => {
+ const chInfo = ch.severity === 'INFO' && !ch.passed && !ch.skipped
+ return (
+
+
+
+
+ {ch.label}{ch.skipped && ' (übersprungen)'}
+
+ {ch.passed && ch.matched_text &&
}
+ {!ch.passed && !ch.skipped && ch.hint && (
+
+ {ch.hint}
+
+ )}
+
+
+ )
+ })}
+
+ )}
+
+ )
+ })}
+
+
+ {doc.word_count > 0 && (
+
{doc.word_count} Wörter analysiert
+ )}
+
+ )
+}
diff --git a/admin-compliance/app/sdk/agent/_components/__tests__/AgentPflichtTable.test.tsx b/admin-compliance/app/sdk/agent/_components/__tests__/AgentPflichtTable.test.tsx
new file mode 100644
index 00000000..f625659f
--- /dev/null
+++ b/admin-compliance/app/sdk/agent/_components/__tests__/AgentPflichtTable.test.tsx
@@ -0,0 +1,29 @@
+import { describe, it, expect } from 'vitest'
+import { render, screen } from '@testing-library/react'
+
+import { AgentPflichtTable } from '../AgentPflichtTable'
+import type { McCoverage } from '../_agentTypes'
+
+const COV: McCoverage[] = [
+ { mc_id: 'IMP-MC-002', status: 'ok', label: 'Email-Adresse',
+ found: 'kundenbetreuung@bmw.de' },
+ { mc_id: 'IMP-MC-010', status: 'possibly_applicable',
+ label: 'Verbraucher-Streitbeilegung-Hinweis' },
+ { mc_id: 'IMP-MC-009', status: 'na', label: 'Verantwortlicher § 18 MStV' },
+]
+
+describe('AgentPflichtTable', () => {
+ it('zeigt Label + gefundenen Wert, aber KEINE mc_id', () => {
+ render(