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:
@@ -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',
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user