feat: F006 supply dashboard — complete spec implementation

- dataQualityService with getPortfolioQualitySummary()
- Service methods: getDashboardPropertiesSummary, getStrongMatches,
  getSignalSummary, getDashboardTasks added to respective services
- dashboardService uses Promise.allSettled for partial error resilience
- KpiCard: onClick + Tooltip support
- KpiGrid: navigate actions and tooltips per card
- StrongMatchMiniCard: Match Center, Prüfung, Vergleichen action buttons
- FutureSignalWidget: time horizon distribution (0–6, 6–12, 12–24 Mo.)
- SupplyDashboard: DashboardHeader, empty state, error state,
  partial widget errors, permission-based rendering per UserRole

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-15 16:31:54 +02:00
parent 46acca9e62
commit 7b7be0b436
12 changed files with 454 additions and 183 deletions
+13 -4
View File
@@ -5,6 +5,8 @@ export interface KpiCardData {
trend?: 'up' | 'down' | 'neutral'
trendLabel?: string
accent?: string
tooltip?: string
onClick?: () => void
}
export interface StrongMatchItem {
@@ -19,12 +21,19 @@ export interface StrongMatchItem {
nextBestAction: string
}
export interface TimeHorizonDistribution {
short: number // 06 months
medium: number // 612 months
long: number // 1224 months
}
export interface FutureSignalSummary {
total: number
highConfidence: number
restricted: number
needsReview: number
avgTimeHorizonMonths: number
timeHorizonDistribution: TimeHorizonDistribution
}
export interface DataQualitySummary {
@@ -47,9 +56,9 @@ export interface DashboardData {
activeProperties: number
strongMatchCount: number
avgDataQuality: number
futureSignals: FutureSignalSummary
dataQuality: DataQualitySummary
reviewTasks: DashboardReviewTask[]
strongMatches: StrongMatchItem[]
futureSignals: FutureSignalSummary | null
dataQuality: DataQualitySummary | null
reviewTasks: DashboardReviewTask[] | null
strongMatches: StrongMatchItem[] | null
lastUpdated: string
}