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:
+13
-4
@@ -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 // 0–6 months
|
||||
medium: number // 6–12 months
|
||||
long: number // 12–24 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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user