'use client' import React, { useState, useEffect } from 'react' import Link from 'next/link' import { RiskScoreGauge } from '@/components/sdk/use-case-assessment/RiskScoreGauge' interface Assessment { id: string title: string feasibility: string risk_level: string risk_score: number domain: string created_at: string } const FEASIBILITY_STYLES: Record = { YES: { bg: 'bg-green-100', text: 'text-green-700', label: 'Machbar' }, CONDITIONAL: { bg: 'bg-yellow-100', text: 'text-yellow-700', label: 'Bedingt' }, NO: { bg: 'bg-red-100', text: 'text-red-700', label: 'Nein' }, } export default function UseCasesPage() { const [assessments, setAssessments] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const [filterFeasibility, setFilterFeasibility] = useState('all') const [filterRisk, setFilterRisk] = useState('all') const [searchQuery, setSearchQuery] = useState('') const [page, setPage] = useState(0) const [totalCount, setTotalCount] = useState(0) const PAGE_SIZE = 20 useEffect(() => { fetchAssessments() }, [page, searchQuery]) async function fetchAssessments() { try { setLoading(true) const params = new URLSearchParams({ limit: String(PAGE_SIZE), offset: String(page * PAGE_SIZE), }) if (searchQuery) params.set('search', searchQuery) const response = await fetch(`/api/sdk/v1/ucca/assessments?${params}`) if (!response.ok) { throw new Error('Fehler beim Laden der Assessments') } const data = await response.json() setAssessments(data.assessments || []) setTotalCount(data.total || data.assessments?.length || 0) } catch (err) { setError(err instanceof Error ? err.message : 'Unbekannter Fehler') } finally { setLoading(false) } } const filtered = assessments.filter(a => { if (filterFeasibility !== 'all' && a.feasibility !== filterFeasibility) return false if (filterRisk !== 'all' && a.risk_level !== filterRisk) return false return true }) const stats = { total: assessments.length, feasible: assessments.filter(a => a.feasibility === 'YES').length, conditional: assessments.filter(a => a.feasibility === 'CONDITIONAL').length, rejected: assessments.filter(a => a.feasibility === 'NO').length, } return (
{/* Header */}

Use Case Assessment

KI-Anwendungsfaelle erfassen und auf Compliance pruefen

Neues Assessment
{/* Stats */}
Gesamt
{stats.total}
Machbar
{stats.feasible}
Bedingt
{stats.conditional}
Abgelehnt
{stats.rejected}
{/* Search */}
{ setSearchQuery(e.target.value); setPage(0) }} className="w-full px-4 py-2 pl-10 bg-white border border-gray-200 rounded-lg text-sm focus:ring-2 focus:ring-purple-500 focus:border-purple-500" />
{/* Filters */}
Machbarkeit: {['all', 'YES', 'CONDITIONAL', 'NO'].map(f => ( ))}
Risiko: {['all', 'MINIMAL', 'LOW', 'MEDIUM', 'HIGH', 'UNACCEPTABLE'].map(f => ( ))}
{/* Error */} {error && (
{error}
)} {/* Loading */} {loading && (
Lade Assessments...
)} {/* Assessment List */} {!loading && filtered.length > 0 && (
{filtered.map(assessment => { const feasibility = FEASIBILITY_STYLES[assessment.feasibility] || FEASIBILITY_STYLES.YES return (

{assessment.title || 'Unbenanntes Assessment'}

{feasibility.label}
{assessment.domain} {new Date(assessment.created_at).toLocaleDateString('de-DE')}
) })}
)} {/* Pagination */} {!loading && totalCount > PAGE_SIZE && (

{page * PAGE_SIZE + 1}–{Math.min((page + 1) * PAGE_SIZE, totalCount)} von {totalCount}

)} {/* Empty State */} {!loading && filtered.length === 0 && !error && (

Noch keine Assessments

Erstellen Sie Ihr erstes Use Case Assessment, um die Compliance-Bewertung zu starten.

Erstes Assessment erstellen
)}
) }