refactor: Integrate Modules into Scope-Decision (Option C)
- RegulationsPanel: added enable/disable toggles per regulation - ScopeDecisionTab: passes enabledModules + onToggleModule - Scope page: auto-enables all applicable regulations when loaded - Modules step: isOptional=true, moved to Zusatzmodule - Requirements: now depends on compliance-scope, not modules - Source-policy: now depends on use-case-assessment, not modules Flow: Profile → Scope → Scope-Decision shows applicable regulations with toggles → Requirements derived from enabled regulations Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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({
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-right text-sm text-gray-600">
|
||||
<span>{reg.obligation_count} Pflichten</span>
|
||||
{reg.control_count > 0 && <span className="ml-2">{reg.control_count} Controls</span>}
|
||||
<div className="flex items-center gap-3">
|
||||
<div className="text-right text-sm text-gray-600">
|
||||
<span>{reg.obligation_count} Pflichten</span>
|
||||
{reg.control_count > 0 && <span className="ml-2">{reg.control_count} Controls</span>}
|
||||
</div>
|
||||
{onToggleModule && (
|
||||
<label className="flex items-center gap-1.5 cursor-pointer">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={enabledModules?.includes(reg.id) ?? true}
|
||||
onChange={e => onToggleModule(reg.id, e.target.checked)}
|
||||
className="w-4 h-4 text-purple-600 rounded"
|
||||
/>
|
||||
<span className="text-xs text-gray-500">Aktiv</span>
|
||||
</label>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
|
||||
@@ -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<number | null>(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}
|
||||
/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user