feat: F021 market intelligence & signal discovery

Signal domain types, mock data (8 signals), provider interface + MockupMarketIntelligenceProvider, marketIntelligenceService, TanStack Query hooks, 10 ops components (SignalInbox, MarketSignalCard, MarketSignalFilterBar, MarketSignalSkeleton, MarketSignalEmptyState, SignalConfidenceBadge, SourceReliabilityBadge, SensitivityWarningPanel, SignalConversionPanel, SignalEvidenceList), MarketIntelligence page wired into AppShell nav and App router.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-15 17:07:58 +02:00
parent 3cd2e83b25
commit cb18f3c381
17 changed files with 1389 additions and 4 deletions
+281
View File
@@ -0,0 +1,281 @@
import {
MarketSignalSourceCategory,
SignalProcessingStatus,
EvidenceType,
ExtractedEntityType,
} from '../domain/marketSignal'
import type { MarketSignal } from '../domain/marketSignal'
import { AssetType, SignalType, SensitivityLevel, FreshnessStatus } from '../domain/enums'
export const MOCK_MARKET_SIGNALS: MarketSignal[] = [
{
id: 'sig-001',
title: 'UBS plant 200 neue Stellen Büroflächenbedarf Zürich Innenstadt',
summary: 'UBS AG plant laut Medienbericht die Einstellung von 200 Spezialisten im Bereich Digital Banking bis Ende 2025. Standort ist primär Zürich. Der abgeleitete Flächenbedarf beträgt ca. 2\'500 m² zusätzlicher Bürofläche.',
sourceCategory: MarketSignalSourceCategory.COMPANY_NEWS,
sourceLabel: 'Neue Zürcher Zeitung',
sourceUrl: 'https://www.nzz.ch/',
detectedAt: '2025-05-10T09:23:00Z',
location: 'Zürich, ZH',
affectedAssetTypes: [AssetType.OFFICE],
signalType: SignalType.EXPANSION,
rawEvidenceSummary: '"UBS plant signifikante Aufstockung der digitalen Teams" NZZ 10.05.2025',
extractedEntities: [
{ type: ExtractedEntityType.COMPANY, value: 'UBS AG', confidence: 0.98 },
{ type: ExtractedEntityType.LOCATION, value: 'Zürich', confidence: 0.95 },
{ type: ExtractedEntityType.DATE, value: 'Ende 2025', confidence: 0.87 },
],
evidence: [
{
id: 'ev-001-1', signalId: 'sig-001',
evidenceType: EvidenceType.TEXT_EXCERPT,
content: '"UBS plant signifikante Aufstockung der digitalen Teams in Zürich" NZZ, 10.05.2025',
sourceUrl: 'https://www.nzz.ch/',
retrievedAt: '2025-05-10T09:23:00Z', confidence: 0.92,
},
],
sourceReliabilityScore: 0.85,
confidenceScore: 0.72,
sensitivityLevel: SensitivityLevel.INTERNAL,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.NEEDS_REVIEW,
analystNotes: 'Flächenbedarf abgeleitet, nicht direkt kommuniziert. Bestätigung durch Quellenanfrage empfohlen.',
createdAt: '2025-05-10T10:00:00Z',
updatedAt: '2025-05-11T08:00:00Z',
},
{
id: 'sig-002',
title: 'Baugesuch für neues Gewerbepark-Areal in Basel-Nord',
summary: 'Im Handelsregister Basel-Stadt wurde ein Baugesuch für ein gemischt genutztes Gewerbeareal mit ca. 8\'000 m² Nutzfläche eingereicht. Projekt umfasst Büro, Logistik und Retail. Baubeginn geplant für Q1 2026.',
sourceCategory: MarketSignalSourceCategory.BUILDING_PERMIT_REGISTER,
sourceLabel: 'Bau- und Gastgewerbeinspektorat Basel-Stadt',
detectedAt: '2025-05-08T14:00:00Z',
location: 'Basel, BS',
affectedAssetTypes: [AssetType.OFFICE, AssetType.LOGISTICS, AssetType.RETAIL],
signalType: SignalType.CONSTRUCTION_PROJECT,
rawEvidenceSummary: 'Baugesuch Nr. BS-2025-0312 gemischte Gewerbefläche, 8\'000 m², Basel-Nord',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Basel-Nord', confidence: 0.97 },
{ type: ExtractedEntityType.ASSET, value: 'Gewerbeareal 8\'000 m²', confidence: 0.88 },
{ type: ExtractedEntityType.DATE, value: 'Q1 2026', confidence: 0.83 },
],
evidence: [
{
id: 'ev-002-1', signalId: 'sig-002',
evidenceType: EvidenceType.URL_REFERENCE,
content: 'Baugesuch Nr. BS-2025-0312, Bau- und Gastgewerbeinspektorat Basel-Stadt',
retrievedAt: '2025-05-08T14:00:00Z', confidence: 0.95,
},
],
sourceReliabilityScore: 0.92,
confidenceScore: 0.88,
sensitivityLevel: SensitivityLevel.PUBLIC,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.APPROVED_AS_SIGNAL,
analystNotes: 'Öffentliches Register. Hohe Verlässlichkeit. Eigentümerstruktur noch nicht ermittelt.',
createdAt: '2025-05-08T15:00:00Z',
updatedAt: '2025-05-12T09:30:00Z',
},
{
id: 'sig-003',
title: 'Crypto-Unternehmen in Zug verdreifacht Belegschaft Expansionsbedarf',
summary: 'Ein in Zug ansässiges Blockchain-Unternehmen hat laut LinkedIn-Auswertung innerhalb von 6 Monaten 80 neue Stellen ausgeschrieben. Bisherige Bürofläche reicht nicht mehr aus. Umzug oder Erweiterung erwartet.',
sourceCategory: MarketSignalSourceCategory.JOB_GROWTH_SIGNAL,
sourceLabel: 'LinkedIn Hiring Data',
detectedAt: '2025-05-09T11:30:00Z',
location: 'Zug, ZG',
affectedAssetTypes: [AssetType.OFFICE],
signalType: SignalType.EXPANSION,
rawEvidenceSummary: '80 offene Stellen in 6 Monaten (LinkedIn), Mitarbeiterzahl +210% YoY',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Zug', confidence: 0.91 },
{ type: ExtractedEntityType.DATE, value: '6 Monate', confidence: 0.78 },
],
evidence: [
{
id: 'ev-003-1', signalId: 'sig-003',
evidenceType: EvidenceType.TEXT_EXCERPT,
content: '80 offene Stellen in den letzten 6 Monaten. Mitarbeiterwachstum +210% gegenüber Vorjahr.',
retrievedAt: '2025-05-09T11:30:00Z', confidence: 0.78,
},
],
sourceReliabilityScore: 0.67,
confidenceScore: 0.61,
sensitivityLevel: SensitivityLevel.PUBLIC,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.ENRICHED,
analystNotes: 'Unternehmensname nicht öffentlich kommuniziert. Weitere Verifizierung über HR-Netzwerke empfohlen.',
createdAt: '2025-05-09T12:00:00Z',
updatedAt: '2025-05-11T14:00:00Z',
},
{
id: 'sig-004',
title: 'Vertragslaufdaten: Grossmieter Hardturmstrasse 201 läuft 03/2026 aus',
summary: 'Laut internen Vertragsdaten läuft der Mietvertrag eines Grossmieters an der Hardturmstrasse 201, Zürich, im März 2026 aus. Kontakt für Verlängerung wurde noch nicht aufgenommen. Mietfläche: ca. 3\'200 m².',
sourceCategory: MarketSignalSourceCategory.LEASE_EXPIRY_DATA,
sourceLabel: 'Internes ERP Vertragsverwaltung',
detectedAt: '2025-05-05T08:00:00Z',
location: 'Zürich-West, ZH',
affectedAssetTypes: [AssetType.OFFICE],
signalType: SignalType.POSSIBLE_MOVE_OUT,
rawEvidenceSummary: 'Vertrag ID V-2019-0481, Ablauf 31.03.2026, keine Verlängerungsoption',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Hardturmstrasse 201, Zürich', confidence: 0.99 },
{ type: ExtractedEntityType.DATE, value: '31.03.2026', confidence: 0.99 },
{ type: ExtractedEntityType.ASSET, value: '3\'200 m² Bürofläche', confidence: 0.97 },
],
evidence: [
{
id: 'ev-004-1', signalId: 'sig-004',
evidenceType: EvidenceType.DOCUMENT,
content: 'Mietvertrag V-2019-0481, Laufzeit bis 31.03.2026, keine Option auf Verlängerung.',
retrievedAt: '2025-05-05T08:00:00Z', confidence: 0.99,
},
],
sourceReliabilityScore: 0.99,
confidenceScore: 0.97,
sensitivityLevel: SensitivityLevel.CONFIDENTIAL,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.NEEDS_REVIEW,
analystNotes: 'VERTRAULICH Nur intern. Mieteridentität darf nicht in Demand Feed erscheinen. Property Manager informieren.',
createdAt: '2025-05-05T08:30:00Z',
updatedAt: '2025-05-10T10:00:00Z',
},
{
id: 'sig-005',
title: 'Sitzverlegung: Logistikunternehmen wechselt von Bern nach Zürich-Flughafen',
summary: 'Laut Handelsregistermutation hat ein mittelgrosses Logistikunternehmen seinen Hauptsitz von Bern nach Kloten verlegt. Aktiver Suchprozess nach Lagerfläche am Flughafen Zürich wahrscheinlich.',
sourceCategory: MarketSignalSourceCategory.COMMERCIAL_REGISTER,
sourceLabel: 'Handelsregister Schweiz Zefix',
sourceUrl: 'https://www.zefix.ch/',
detectedAt: '2025-05-07T16:20:00Z',
location: 'Kloten, ZH',
affectedAssetTypes: [AssetType.LOGISTICS],
signalType: SignalType.POSSIBLE_MOVE_OUT,
rawEvidenceSummary: 'HR-Mutation: Sitzverlegung von 3014 Bern nach 8302 Kloten, eingetragen 07.05.2025',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Kloten', confidence: 0.97 },
{ type: ExtractedEntityType.LOCATION, value: 'Bern', confidence: 0.97 },
{ type: ExtractedEntityType.DATE, value: '07.05.2025', confidence: 0.99 },
],
evidence: [
{
id: 'ev-005-1', signalId: 'sig-005',
evidenceType: EvidenceType.URL_REFERENCE,
content: 'Handelsregistermutation: Sitzverlegung von 3014 Bern nach 8302 Kloten, eingetragen 07.05.2025',
sourceUrl: 'https://www.zefix.ch/',
retrievedAt: '2025-05-07T16:20:00Z', confidence: 0.97,
},
],
sourceReliabilityScore: 0.91,
confidenceScore: 0.63,
sensitivityLevel: SensitivityLevel.PUBLIC,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.NORMALIZED,
analystNotes: 'Sitzverlegung bestätigt. Flächenbedarf am Zielort noch zu validieren.',
createdAt: '2025-05-07T17:00:00Z',
updatedAt: '2025-05-08T09:00:00Z',
},
{
id: 'sig-006',
title: 'Neue Ausschreibung: 800 m² Lager-/Logistik in Winterthur',
summary: 'Auf Immoscout24 wurde eine neue Ausschreibung für 800 m² Lagerfläche in Winterthur publiziert. Suche aktiv, Einzug ab September 2025 gewünscht.',
sourceCategory: MarketSignalSourceCategory.PUBLIC_LISTING_PLATFORM,
sourceLabel: 'Immoscout24',
sourceUrl: 'https://www.immoscout24.ch/',
detectedAt: '2025-05-12T08:15:00Z',
location: 'Winterthur, ZH',
affectedAssetTypes: [AssetType.LOGISTICS],
signalType: SignalType.EXPANSION,
rawEvidenceSummary: 'Inseratstitel: "800m² Lager gesucht Winterthur sofort" Immoscout24, 12.05.2025',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Winterthur', confidence: 0.99 },
{ type: ExtractedEntityType.ASSET, value: '800 m² Lagerfläche', confidence: 0.96 },
{ type: ExtractedEntityType.DATE, value: 'September 2025', confidence: 0.88 },
],
evidence: [
{
id: 'ev-006-1', signalId: 'sig-006',
evidenceType: EvidenceType.URL_REFERENCE,
content: '"800m² Lager gesucht Winterthur sofort" Immoscout24, 12.05.2025',
sourceUrl: 'https://www.immoscout24.ch/',
retrievedAt: '2025-05-12T08:15:00Z', confidence: 0.96,
},
],
sourceReliabilityScore: 0.78,
confidenceScore: 0.83,
sensitivityLevel: SensitivityLevel.PUBLIC,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.DETECTED,
analystNotes: '',
createdAt: '2025-05-12T08:30:00Z',
updatedAt: '2025-05-12T08:30:00Z',
},
{
id: 'sig-007',
title: 'Neue S-Bahn-Station Schlieren 2027 Aufwertung für Gewerbeflächen',
summary: 'Die SBB hat die neue Haltestelle Schlieren-West für 2027 bestätigt. Das umliegende Gewerbegebiet wird deutlich aufgewertet. Frühzeitige Positionierung im Büro- und Produktionssegment empfohlen.',
sourceCategory: MarketSignalSourceCategory.INFRASTRUCTURE_PROJECT,
sourceLabel: 'SBB Medienmitteilung',
sourceUrl: 'https://www.sbb.ch/de/medien.html',
detectedAt: '2025-05-06T10:00:00Z',
location: 'Schlieren, ZH',
affectedAssetTypes: [AssetType.OFFICE, AssetType.PRODUCTION],
signalType: SignalType.PROJECT_DEVELOPMENT,
rawEvidenceSummary: 'SBB bestätigt neue Haltestelle Schlieren-West, Inbetriebnahme Dezember 2027',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Schlieren-West', confidence: 0.98 },
{ type: ExtractedEntityType.DATE, value: 'Dezember 2027', confidence: 0.95 },
],
evidence: [
{
id: 'ev-007-1', signalId: 'sig-007',
evidenceType: EvidenceType.URL_REFERENCE,
content: 'SBB Medienmitteilung: Neue Haltestelle Schlieren-West, Inbetriebnahme Dezember 2027',
sourceUrl: 'https://www.sbb.ch/de/medien.html',
retrievedAt: '2025-05-06T10:00:00Z', confidence: 0.95,
},
],
sourceReliabilityScore: 0.96,
confidenceScore: 0.79,
sensitivityLevel: SensitivityLevel.PUBLIC,
freshnessStatus: FreshnessStatus.FRESH,
processingStatus: SignalProcessingStatus.ENRICHED,
analystNotes: 'Infrastrukturverbesserung. Kein direktes Verfügbarkeitssignal, aber relevanter Standortfaktor.',
createdAt: '2025-05-06T11:00:00Z',
updatedAt: '2025-05-10T15:00:00Z',
},
{
id: 'sig-008',
title: 'Analyst-Beobachtung: Leerstehende Etage Tour de Berne, Lausanne',
summary: 'Eigene Marktbeobachtung: Die 4. Etage im Bürogebäude "Tour de Berne" in Lausanne steht seit mindestens 3 Monaten leer. Kein offizielles Inserat gefunden. Mögliche Vermarktung oder Leerstand durch Eigentümer.',
sourceCategory: MarketSignalSourceCategory.MANUAL_ANALYST_SIGNAL,
sourceLabel: 'Eigene Beobachtung Marktanalyse Mai 2025',
detectedAt: '2025-05-03T14:30:00Z',
location: 'Lausanne, VD',
affectedAssetTypes: [AssetType.OFFICE],
signalType: SignalType.POSSIBLE_MOVE_OUT,
rawEvidenceSummary: 'Begehung 03.05.2025: 4. OG leer, keine Beschilderung, kein Inserat gefunden.',
extractedEntities: [
{ type: ExtractedEntityType.LOCATION, value: 'Tour de Berne, Lausanne', confidence: 0.94 },
{ type: ExtractedEntityType.ASSET, value: '4. Obergeschoss', confidence: 0.92 },
],
evidence: [
{
id: 'ev-008-1', signalId: 'sig-008',
evidenceType: EvidenceType.ANALYST_NOTE,
content: 'Vor-Ort-Begehung am 03.05.2025: 4. OG im Tour de Berne leer stehend, keine aktive Vermarktung erkennbar.',
retrievedAt: '2025-05-03T14:30:00Z', confidence: 0.82,
},
],
sourceReliabilityScore: 0.72,
confidenceScore: 0.68,
sensitivityLevel: SensitivityLevel.INTERNAL,
freshnessStatus: FreshnessStatus.STALE,
processingStatus: SignalProcessingStatus.CONVERTED_TO_FUTURE_AVAILABILITY,
possibleFutureSignalId: 'fs-lausanne-001',
analystNotes: 'Zu Future Availability überführt. Eigentümer Kontaktaufnahme ausstehend.',
createdAt: '2025-05-03T15:00:00Z',
updatedAt: '2025-05-13T11:00:00Z',
},
]