diff --git a/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx b/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx index 014dc8f..98f41fd 100644 --- a/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx +++ b/admin-compliance/app/sdk/agent/_components/ChecklistView.tsx @@ -24,6 +24,13 @@ interface DocResult { checks: CheckItem[] findings_count: number error: string + scenario?: string // regenerate | fix | import | skip +} + +const SCENARIO_LABELS: Record = { + regenerate: { label: 'Neugenerierung', color: 'text-red-700', bg: 'bg-red-100' }, + fix: { label: 'Korrekturen', color: 'text-amber-700', bg: 'bg-amber-100' }, + import: { label: 'Konform', color: 'text-green-700', bg: 'bg-green-100' }, } const DOC_TYPE_LABELS: Record = { @@ -91,14 +98,23 @@ export function ChecklistView({ results }: { results: DocResult[] }) { if (!results || results.length === 0) return null - const totalOk = results.filter(r => r.completeness_pct === 100).length + const scenarioCounts = { + regenerate: results.filter(r => r.scenario === 'regenerate').length, + fix: results.filter(r => r.scenario === 'fix').length, + import: results.filter(r => r.scenario === 'import').length, + } return (
-
+

- Dokumenten-Pruefung ({results.length} Dokumente, {totalOk} vollstaendig) + Dokumenten-Pruefung ({results.length} Dokumente)

+
+ {scenarioCounts.import > 0 && {scenarioCounts.import} konform} + {scenarioCounts.fix > 0 && {scenarioCounts.fix} Korrekturen} + {scenarioCounts.regenerate > 0 && {scenarioCounts.regenerate} Neugenerierung} +
@@ -131,7 +147,14 @@ export function ChecklistView({ results }: { results: DocResult[] }) { {typeLabel}
-
{r.label}
+
+ {r.label} + {r.scenario && SCENARIO_LABELS[r.scenario] && ( + + {SCENARIO_LABELS[r.scenario].label} + + )} +
{l1Checks.length > 0 ? `${l1Passed}/${l1Scoreable.length} Pflichtangaben` diff --git a/admin-compliance/app/sdk/agent/_components/ComplianceCheckTab.tsx b/admin-compliance/app/sdk/agent/_components/ComplianceCheckTab.tsx index 4811d6c..05d2fc0 100644 --- a/admin-compliance/app/sdk/agent/_components/ComplianceCheckTab.tsx +++ b/admin-compliance/app/sdk/agent/_components/ComplianceCheckTab.tsx @@ -364,6 +364,46 @@ export function ComplianceCheckTab() {
)} + {/* Extracted Profile — pre-fill suggestion */} + {results.extracted_profile?.company_profile && Object.keys(results.extracted_profile.company_profile).length > 0 && ( +
+
+ Aus Dokumenten extrahiert + +
+
+ {results.extracted_profile.company_profile.companyName && ( + Firma: {results.extracted_profile.company_profile.companyName} + )} + {results.extracted_profile.company_profile.legalForm && ( + Rechtsform: {results.extracted_profile.company_profile.legalForm.toUpperCase()} + )} + {results.extracted_profile.company_profile.headquartersCity && ( + Sitz: {results.extracted_profile.company_profile.headquartersZip} {results.extracted_profile.company_profile.headquartersCity} + )} + {results.extracted_profile.company_profile.dpoEmail && ( + DSB: {results.extracted_profile.company_profile.dpoEmail} + )} + {results.extracted_profile.company_profile.ustIdNr && ( + USt-IdNr: {results.extracted_profile.company_profile.ustIdNr} + )} +
+ {results.extracted_profile.compliance_scope_hints?.length > 0 && ( +
+ Scope-Hinweise: + {results.extracted_profile.compliance_scope_hints.map((h: any, i: number) => ( + + {h.source} + + ))} +
+ )} +
+ )} + {/* Banner Check Result */} {results.banner_result && (
Banner erkannt{results.banner_result.provider ? ` (${results.banner_result.provider})` : ''}. {results.banner_result.violations > 0 - ? ` ${results.banner_result.violations} Auffaelligkeit${results.banner_result.violations !== 1 ? 'en' : ''} gefunden — Cross-Check-Ergebnisse sind in der Cookie-Richtlinie-Checkliste enthalten.` - : ' Keine Auffaelligkeiten beim Banner-Cookie-Abgleich.'} + ? ` ${results.banner_result.violations} Auffaelligkeit${results.banner_result.violations !== 1 ? 'en' : ''} gefunden.` + : ' Keine Auffaelligkeiten.'} ) : ( 'Kein Cookie-Banner erkannt oder Banner-Check nicht moeglich.'