'use client' import React, { useEffect, useState, useCallback, use } from 'react' import { SeverityBadge } from '../../_components/SeverityBadge' interface BacklogItem { rank: number req_id: string title: string category: string severity: string annex_anchor: string description: string effort_days: number mapped_measure_names: { id: string; name: string }[] status: string priority_score: number } interface BacklogResponse { project_id: string classification: string | null days_to_ce_deadline: number deadlines: { date: string; label: string }[] total: number items: BacklogItem[] } export default function BacklogPage({ params, }: { params: Promise<{ projectId: string }> }) { const { projectId } = use(params) const [data, setData] = useState(null) const [loading, setLoading] = useState(true) const [error, setError] = useState('') const load = useCallback(async () => { try { const res = await fetch(`/api/sdk/v1/cra/projects/${projectId}/backlog`, { headers: { 'X-Tenant-ID': '00000000-0000-0000-0000-000000000001' }, }) if (!res.ok) throw new Error(await res.text()) setData(await res.json()) } catch (e) { setError(e instanceof Error ? e.message : 'Fehler beim Laden') } finally { setLoading(false) } }, [projectId]) useEffect(() => { load() }, [load]) if (loading) return

Laedt...

if (error) return

{error}

if (!data) return null return (
← Zurueck zum Projekt

Prioritaeten-Backlog

Sortiert nach Severity × Deadline-Druck × Effort. Was du heute tust, was naechsten Sprint, was vor 11.12.2027.

{/* Deadline-Banner */}
{data.deadlines.map(d => { const days = Math.max(0, Math.round((new Date(d.date).getTime() - Date.now()) / 86400000)) const isPast = new Date(d.date).getTime() < Date.now() return (
{d.date}
{d.label}
{isPast ? 'bereits abgelaufen' : `noch ${days} Tage`}
) })}
{/* Backlog */}
{data.items.map(item => ( ))}
Rang Anforderung Severity Score Aufwand Massnahme Aktion
{item.rank}
{item.title}
{item.category} · {item.annex_anchor}
{item.priority_score} {item.effort_days} PT {item.mapped_measure_names.length > 0 ? (
{item.mapped_measure_names.map(m => (
{m.id}: {m.name.length > 50 ? m.name.slice(0, 50) + '...' : m.name}
))}
) : ( )}

Tage bis CE-Marking-Pflicht (11.12.2027): {data.days_to_ce_deadline}

) }