diff --git a/admin-compliance/app/sdk/compliance-scope/page.tsx b/admin-compliance/app/sdk/compliance-scope/page.tsx index 0e31258..57321cd 100644 --- a/admin-compliance/app/sdk/compliance-scope/page.tsx +++ b/admin-compliance/app/sdk/compliance-scope/page.tsx @@ -78,6 +78,14 @@ export default function ComplianceScopePage() { const [supervisoryAuthorities, setSupervisoryAuthorities] = useState([]) const [regulationAssessmentLoading, setRegulationAssessmentLoading] = useState(false) + // Enabled compliance modules (derived from applicable regulations) + const [enabledModules, setEnabledModules] = useState([]) + + // Auto-enable all applicable regulations when they load + const handleToggleModule = (moduleId: string, enabled: boolean) => { + setEnabledModules(prev => enabled ? [...prev, moduleId] : prev.filter(id => id !== moduleId)) + } + // Sync from SDK context when it becomes available (handles async loading). // The SDK context loads state from server/localStorage asynchronously, so // sdkState.complianceScope may arrive AFTER this page has already mounted. @@ -159,6 +167,10 @@ export default function ComplianceScopePage() { // Set applicable regulations from response const regs: ApplicableRegulation[] = data.overview?.applicable_regulations || data.applicable_regulations || [] setApplicableRegulations(regs) + // Auto-enable all applicable regulations as modules + if (enabledModules.length === 0) { + setEnabledModules(regs.map(r => r.id)) + } // Derive supervisory authorities const regIds = regs.map(r => r.id) @@ -375,6 +387,8 @@ export default function ComplianceScopePage() { supervisoryAuthorities={supervisoryAuthorities} regulationAssessmentLoading={regulationAssessmentLoading} onGoToObligations={() => { window.location.href = '/sdk/obligations' }} + enabledModules={enabledModules} + onToggleModule={handleToggleModule} /> )} diff --git a/admin-compliance/components/sdk/compliance-scope/ScopeDecisionSections.tsx b/admin-compliance/components/sdk/compliance-scope/ScopeDecisionSections.tsx index 7f43e1e..1d2e6b3 100644 --- a/admin-compliance/components/sdk/compliance-scope/ScopeDecisionSections.tsx +++ b/admin-compliance/components/sdk/compliance-scope/ScopeDecisionSections.tsx @@ -110,6 +110,8 @@ interface RegulationsPanelProps { supervisoryAuthorities?: SupervisoryAuthorityInfo[] regulationAssessmentLoading?: boolean onGoToObligations?: () => void + enabledModules?: string[] + onToggleModule?: (moduleId: string, enabled: boolean) => void } export function RegulationsPanel({ @@ -117,6 +119,8 @@ export function RegulationsPanel({ supervisoryAuthorities, regulationAssessmentLoading, onGoToObligations, + enabledModules, + onToggleModule, }: RegulationsPanelProps) { if (!applicableRegulations && !regulationAssessmentLoading) return null return ( @@ -149,9 +153,22 @@ export function RegulationsPanel({ )} -
- {reg.obligation_count} Pflichten - {reg.control_count > 0 && {reg.control_count} Controls} +
+
+ {reg.obligation_count} Pflichten + {reg.control_count > 0 && {reg.control_count} Controls} +
+ {onToggleModule && ( + + )}
))} diff --git a/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx b/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx index bfcc173..037d67e 100644 --- a/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx +++ b/admin-compliance/components/sdk/compliance-scope/ScopeDecisionTab.tsx @@ -25,6 +25,8 @@ interface ScopeDecisionTabProps { supervisoryAuthorities?: SupervisoryAuthorityInfo[] regulationAssessmentLoading?: boolean onGoToObligations?: () => void + enabledModules?: string[] + onToggleModule?: (moduleId: string, enabled: boolean) => void } export function ScopeDecisionTab({ @@ -38,6 +40,8 @@ export function ScopeDecisionTab({ supervisoryAuthorities, regulationAssessmentLoading, onGoToObligations, + enabledModules, + onToggleModule, }: ScopeDecisionTabProps) { const [expandedTrigger, setExpandedTrigger] = useState(null) const [showAuditTrail, setShowAuditTrail] = useState(false) @@ -71,6 +75,8 @@ export function ScopeDecisionTab({ applicableRegulations={applicableRegulations} supervisoryAuthorities={supervisoryAuthorities} regulationAssessmentLoading={regulationAssessmentLoading} + enabledModules={enabledModules} + onToggleModule={onToggleModule} onGoToObligations={onGoToObligations} /> diff --git a/admin-compliance/lib/sdk/types/sdk-steps.ts b/admin-compliance/lib/sdk/types/sdk-steps.ts index c624fdb..b71adce 100644 --- a/admin-compliance/lib/sdk/types/sdk-steps.ts +++ b/admin-compliance/lib/sdk/types/sdk-steps.ts @@ -78,11 +78,11 @@ export const SDK_STEPS: SDKStep[] = [ order: 6, name: 'Compliance Modules', nameShort: 'Module', - description: 'Abgleich welche Regulierungen gelten', + description: 'Manuelle Modul-Verwaltung (Experten)', url: '/sdk/modules', checkpointId: 'CP-MOD', prerequisiteSteps: ['use-case-assessment'], - isOptional: false }, + isOptional: true }, { id: 'source-policy', seq: 700, @@ -94,7 +94,7 @@ export const SDK_STEPS: SDKStep[] = [ description: 'RAG Quellen-Whitelist (Enterprise)', url: '/sdk/source-policy', checkpointId: 'CP-SPOL', - prerequisiteSteps: ['modules'], + prerequisiteSteps: ['use-case-assessment'], isOptional: true }, // PAKET 2: ANALYSE (Assessment) @@ -109,7 +109,7 @@ export const SDK_STEPS: SDKStep[] = [ description: 'Pr\u00fcfaspekte aus Regulierungen ableiten', url: '/sdk/requirements', checkpointId: 'CP-REQ', - prerequisiteSteps: ['modules'], + prerequisiteSteps: ['compliance-scope'], isOptional: false }, { id: 'controls',