diff --git a/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx b/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx
index ff97f9d..e6330b2 100644
--- a/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx
+++ b/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx
@@ -264,13 +264,11 @@ function SidebarContent({ onNavigate }: SidebarContentProps) {
return packageCompletion[prevPkg.id] < 100
}
- // Get visible steps based on customer type
- const getVisibleSteps = (packageId: SDKPackageId): SDKStep[] => {
+ // Filter steps based on visibleWhen conditions
+ const getVisibleStepsForPackage = (packageId: SDKPackageId): SDKStep[] => {
const steps = getStepsForPackage(packageId)
return steps.filter(step => {
- if (step.id === 'import' && state.customerType === 'new') {
- return false
- }
+ if (step.visibleWhen) return step.visibleWhen(state)
return true
})
}
@@ -282,7 +280,7 @@ function SidebarContent({ onNavigate }: SidebarContentProps) {
- {/* Zusatzmodule */}
-
-
- Zusatzmodule
-
-
- {[
- { href: '/sdk/rag', label: 'Legal RAG', icon: 'π' },
- { href: '/sdk/quality', label: 'AI Quality', icon: 'β
' },
- { href: '/sdk/security-backlog', label: 'Security Backlog', icon: 'β οΈ' },
- { href: '/sdk/compliance-hub', label: 'Compliance Hub', icon: 'π' },
- { href: '/sdk/dsms', label: 'DSMS', icon: 'π‘οΈ' },
- { href: '/sdk/academy', label: 'Academy', icon: 'π' },
- { href: '/sdk/whistleblower', label: 'Whistleblower', icon: 'π’' },
- { href: '/sdk/incidents', label: 'Incidents', icon: 'π¨' },
- { href: '/sdk/reporting', label: 'Reporting', icon: 'π' },
- { href: '/sdk/industry-templates', label: 'Branchenvorlagen', icon: 'π’' },
- { href: '/sdk/document-crawler', label: 'Doc Crawler', icon: 'π' },
- { href: '/sdk/advisory-board', label: 'Beirat', icon: 'π¬' },
- ].map(mod => (
-
- {mod.icon}
- {mod.label}
-
- ))}
-
-
-
{/* Quick Info */}
{currentStep && (
diff --git a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx
index b7fb544..3260c2e 100644
--- a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx
+++ b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx
@@ -347,14 +347,11 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP
return steps.some(s => s.url === pathname)
}
- // Filter steps based on customer type
- const getVisibleSteps = (packageId: SDKPackageId): SDKStep[] => {
+ // Filter steps based on visibleWhen conditions
+ const getVisibleStepsForPackage = (packageId: SDKPackageId): SDKStep[] => {
const steps = getStepsForPackage(packageId)
return steps.filter(step => {
- // Hide import step for new customers
- if (step.id === 'import' && state.customerType === 'new') {
- return false
- }
+ if (step.visibleWhen) return step.visibleWhen(state)
return true
})
}
@@ -397,7 +394,7 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP
{/* Navigation - 5 Packages */}
diff --git a/admin-compliance/lib/sdk/context.tsx b/admin-compliance/lib/sdk/context.tsx
index 1c9bc6b..f3502b0 100644
--- a/admin-compliance/lib/sdk/context.tsx
+++ b/admin-compliance/lib/sdk/context.tsx
@@ -99,6 +99,9 @@ const initialState: SDKState = {
dsrConfig: null,
escalationWorkflows: [],
+ // IACE (Industrial AI Compliance Engine)
+ iaceProjects: [],
+
// Security
sbom: null,
securityIssues: [],
@@ -705,26 +708,26 @@ export function SDKProvider({
)
const goToNextStep = useCallback(() => {
- const nextStep = getNextStep(state.currentStep)
+ const nextStep = getNextStep(state.currentStep, state)
if (nextStep) {
goToStep(nextStep.id)
}
- }, [state.currentStep, goToStep])
+ }, [state, goToStep])
const goToPreviousStep = useCallback(() => {
- const prevStep = getPreviousStep(state.currentStep)
+ const prevStep = getPreviousStep(state.currentStep, state)
if (prevStep) {
goToStep(prevStep.id)
}
- }, [state.currentStep, goToStep])
+ }, [state, goToStep])
const canGoNext = useMemo(() => {
- return getNextStep(state.currentStep) !== undefined
- }, [state.currentStep])
+ return getNextStep(state.currentStep, state) !== undefined
+ }, [state])
const canGoPrevious = useMemo(() => {
- return getPreviousStep(state.currentStep) !== undefined
- }, [state.currentStep])
+ return getPreviousStep(state.currentStep, state) !== undefined
+ }, [state])
// Progress
const completionPercentage = useMemo(() => getCompletionPercentage(state), [state])
diff --git a/admin-compliance/lib/sdk/types.ts b/admin-compliance/lib/sdk/types.ts
index 388d44f..97951d2 100644
--- a/admin-compliance/lib/sdk/types.ts
+++ b/admin-compliance/lib/sdk/types.ts
@@ -62,6 +62,86 @@ export type LegalForm =
| 'stiftung' // Foundation
| 'other' // Other
+// =============================================================================
+// MACHINE BUILDER PROFILE (IACE - Industrial AI Compliance Engine)
+// =============================================================================
+
+export type MachineProductType = 'test_stand' | 'robot_cell' | 'special_machine' | 'production_line' | 'other'
+
+export type AIIntegrationType = 'vision' | 'predictive_maintenance' | 'quality_control' | 'robot_control' | 'process_optimization' | 'other'
+
+export type HumanOversightLevel = 'full' | 'partial' | 'minimal' | 'none'
+
+export type CriticalSector = 'energy' | 'water' | 'transport' | 'health' | 'pharma' | 'automotive' | 'defense'
+
+export interface MachineBuilderProfile {
+ // Produkt
+ productTypes: MachineProductType[]
+ productDescription: string
+ productPride: string
+ containsSoftware: boolean
+ containsFirmware: boolean
+ containsAI: boolean
+ aiIntegrationType: AIIntegrationType[]
+
+ // Sicherheit
+ hasSafetyFunction: boolean
+ safetyFunctionDescription: string
+ autonomousBehavior: boolean
+ humanOversightLevel: HumanOversightLevel
+
+ // Konnektivitaet
+ isNetworked: boolean
+ hasRemoteAccess: boolean
+ hasOTAUpdates: boolean
+ updateMechanism: string
+
+ // Markt & Kunden
+ exportMarkets: string[]
+ criticalSectorClients: boolean
+ criticalSectors: CriticalSector[]
+ oemClients: boolean
+
+ // CE
+ ceMarkingRequired: boolean
+ existingCEProcess: boolean
+ hasRiskAssessment: boolean
+}
+
+export const MACHINE_PRODUCT_TYPE_LABELS: Record