feat: Verwaltungszugang refactor — lease data, 3-tab detail, market signals

- Dashboard: remove QuickActionPanel, StrongMatchOverview, FutureSignalWidget,
  DataQualityWidget, header buttons, Marktchancen nav; KpiGrid → 4 cards
- Property domain: 9 new fields (leaseTerm, leaseStartDate/End, breakoutOption,
  currentTenant, importedFrom, importedAt, lastUpdatedAt)
- Mock data: annual CHF/m²/Jahr prices (×12), Swiss images, tenant/lease data
  for all 10 VERIFIED_PORTFOLIO properties; need budgets updated to annual
- PropertyTable: swap columns — add Aktueller Mieter, Mietlaufzeit,
  Breakoutoption, Breakoutoption Zeitpunkt; remove Verfügbarkeit, Konfidenz, Quelle
- PropertyDetailView: 3 tabs (Übersicht, Matchability, Marktsignale) with
  inline edit mode, NeedMatchCard list, PropertyMarketSignalsTab
- New: marketReport domain + mock data + service, NeedMatchCard,
  PropertyMarketSignalsTab with 4 sections + PDF button
- matchService: getNeedMatchesForProperty(propertyId, {minScore})

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-19 15:43:52 +02:00
parent 52a2693cad
commit 920ce8eb09
17 changed files with 1036 additions and 476 deletions
+18
View File
@@ -0,0 +1,18 @@
export type SignalCategory = 'development' | 'demand' | 'supply' | 'negotiation'
export interface PropertyMarketSignal {
id: string
category: SignalCategory
title: string
body: string
source?: string
sourceUrl?: string
date?: string
confidence?: number
}
export interface MarketReport {
propertyId: string
generatedAt: string
signals: PropertyMarketSignal[]
}
+18 -1
View File
@@ -1,4 +1,21 @@
import type { MatchStrength, MatchStatus, RiskLevel, ResultType, ConfidenceLevel } from './enums'
import type { MatchStrength, MatchStatus, RiskLevel, ResultType, ConfidenceLevel, AssetType } from './enums'
// ── PropertyNeedMatch (Matchability tab) ──────────────────────────────────────
export interface PropertyNeedMatch {
matchId: string
score: number
needId: string
needTitle: string
company: string
areaRequired: string
budget: string
locations: string[]
assetType: AssetType
timing: string
mustHaves: string[]
matchHighlights: string[]
}
// ── Score Building Blocks ─────────────────────────────────────────────────────
+10
View File
@@ -129,6 +129,16 @@ export interface Property {
description?: string
images?: string[]
leaseTerm?: string
leaseStartDate?: string
leaseEndDate?: string
breakoutOption?: boolean
breakoutOptionDate?: string
currentTenant?: string
importedFrom?: string
importedAt?: string
lastUpdatedAt?: string
status?: 'ACTIVE' | 'INACTIVE' | 'DRAFT' | 'ARCHIVED'
lastReviewedAt?: string
createdAt: string