feat: Marktsignale KPI panel with adjustable radius (5/10/15/20 km)

Adds MarketKpis domain type with formula-based radius scaling, a MarketKpiPanel
component (vacancy rate, platform searches, avg vacancy duration, demand/supply
ratio — color-coded with interpretation badges), and integrates it at the top of
PropertyMarketSignalsTab. Demand/supply section labels now update with the
selected radius. Mock data covers all 5 existing market reports.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-24 22:28:04 +02:00
parent 61a26d00a7
commit a9e038a64f
4 changed files with 307 additions and 22 deletions
+40
View File
@@ -4,6 +4,14 @@ export const mockPropertyMarketSignals: MarketReport[] = [
{
propertyId: 'prop-001',
generatedAt: '2025-05-18T08:00:00Z',
assetTypeLabel: 'Büro',
kpis: {
vacancyRatePct: 4.2,
activePlatformSearches: 14,
avgVacancyMonths: 4.2,
demandSupplyRatio: 2.3,
comparableListings: 3,
},
signals: [
{
id: 'sig-001-1',
@@ -44,6 +52,14 @@ export const mockPropertyMarketSignals: MarketReport[] = [
{
propertyId: 'prop-007',
generatedAt: '2025-05-18T08:00:00Z',
assetTypeLabel: 'Büro',
kpis: {
vacancyRatePct: 3.8,
activePlatformSearches: 11,
avgVacancyMonths: 3.5,
demandSupplyRatio: 2.8,
comparableListings: 1,
},
signals: [
{
id: 'sig-007-1',
@@ -83,6 +99,14 @@ export const mockPropertyMarketSignals: MarketReport[] = [
{
propertyId: 'prop-008',
generatedAt: '2025-05-18T08:00:00Z',
assetTypeLabel: 'Büro',
kpis: {
vacancyRatePct: 7.1,
activePlatformSearches: 7,
avgVacancyMonths: 6.0,
demandSupplyRatio: 1.4,
comparableListings: 4,
},
signals: [
{
id: 'sig-008-1',
@@ -123,6 +147,14 @@ export const mockPropertyMarketSignals: MarketReport[] = [
{
propertyId: 'prop-012',
generatedAt: '2025-05-18T08:00:00Z',
assetTypeLabel: 'Büro',
kpis: {
vacancyRatePct: 2.9,
activePlatformSearches: 22,
avgVacancyMonths: 2.8,
demandSupplyRatio: 3.4,
comparableListings: 2,
},
signals: [
{
id: 'sig-012-1',
@@ -172,6 +204,14 @@ export const mockPropertyMarketSignals: MarketReport[] = [
{
propertyId: 'prop-014',
generatedAt: '2025-05-18T08:00:00Z',
assetTypeLabel: 'Lager / Logistik',
kpis: {
vacancyRatePct: 5.5,
activePlatformSearches: 11,
avgVacancyMonths: 5.8,
demandSupplyRatio: 1.9,
comparableListings: 2,
},
signals: [
{
id: 'sig-014-1',