Files
property-match/src/mock-data/dataSources.ts
T

303 lines
10 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { DataSource, ConnectorRun } from '../domain/dataSource'
import {
DataSourceType,
SourceStatus,
TermsStatus,
ConnectorRunStatus,
} from '../domain/dataSource'
import { FreshnessStatus } from '../domain/enums'
export const MOCK_DATA_SOURCES: DataSource[] = [
{
id: 'src-001',
name: 'ImmoScout24 Zürich/Bern Feed',
sourceType: DataSourceType.PUBLIC_WEB_SOURCE,
legalBasis: 'Öffentlich zugängliche Listings keine personenbezogenen Daten',
termsStatus: TermsStatus.NEEDS_LEGAL_REVIEW,
dataCategories: ['Gewerbeimmobilien', 'Mietpreise', 'Verfügbarkeit'],
supportedAssetTypes: ['OFFICE', 'RETAIL', 'LIGHT_INDUSTRIAL'],
regionCoverage: ['Zürich', 'Bern', 'Basel'],
reliabilityScore: 0.72,
freshnessStatus: FreshnessStatus.FRESH,
lastRunAt: '2026-05-15T06:00:00Z',
nextRunAt: '2026-05-16T06:00:00Z',
status: SourceStatus.ACTIVE,
notes: 'Daily refresh via FUTURE_CRAWLER_STUB. Rechtliche Freigabe ausstehend.',
},
{
id: 'src-002',
name: 'Ideal Sharing Portfolio Export',
sourceType: DataSourceType.INTERNAL_PORTFOLIO_EXPORT,
ownerOrganizationId: 'org-001',
legalBasis: 'Internes Dateneigentum vollständig genehmigt',
termsStatus: TermsStatus.APPROVED,
dataCategories: ['Portoflio', 'Mietverträge', 'Flächen'],
supportedAssetTypes: ['OFFICE', 'LOGISTICS', 'MIXED'],
regionCoverage: ['Zürich', 'Zug', 'Luzern'],
reliabilityScore: 0.97,
freshnessStatus: FreshnessStatus.FRESH,
lastRunAt: '2026-05-15T02:00:00Z',
nextRunAt: '2026-05-15T14:00:00Z',
status: SourceStatus.ACTIVE,
},
{
id: 'src-003',
name: 'CBRE Market Data API',
sourceType: DataSourceType.API_CONNECTOR,
ownerOrganizationId: 'org-002',
legalBasis: 'API-Lizenzvertrag mit CBRE vom 12.01.2026',
termsStatus: TermsStatus.APPROVED,
dataCategories: ['Marktdaten', 'Mietindizes', 'Transaktionsvolumen'],
supportedAssetTypes: ['OFFICE', 'RETAIL', 'LOGISTICS'],
regionCoverage: ['Schweiz', 'DACH'],
reliabilityScore: 0.91,
freshnessStatus: FreshnessStatus.STALE,
lastRunAt: '2026-05-13T10:00:00Z',
nextRunAt: '2026-05-17T10:00:00Z',
status: SourceStatus.ACTIVE,
notes: 'Wöchentlicher Refresh Quarterly Report verfügbar.',
},
{
id: 'src-004',
name: 'Handelsregister CH Firmenumzüge',
sourceType: DataSourceType.PUBLIC_WEB_SOURCE,
legalBasis: 'Öffentliches Staatsregister (SHAB)',
termsStatus: TermsStatus.APPROVED,
dataCategories: ['Firmensitze', 'Umzüge', 'Neugründungen'],
supportedAssetTypes: ['OFFICE', 'MIXED'],
regionCoverage: ['Schweiz'],
reliabilityScore: 0.88,
freshnessStatus: FreshnessStatus.FRESH,
lastRunAt: '2026-05-15T03:30:00Z',
nextRunAt: '2026-05-16T03:30:00Z',
status: SourceStatus.ACTIVE,
},
{
id: 'src-005',
name: 'Baubewilligungsregister Kt. Zürich',
sourceType: DataSourceType.FUTURE_CRAWLER_STUB,
legalBasis: 'Amtliche Publikation öffentlich zugänglich',
termsStatus: TermsStatus.UNKNOWN,
dataCategories: ['Baubewilligungen', 'Umnutzungen', 'Abbrüche'],
supportedAssetTypes: ['OFFICE', 'PRODUCTION', 'LIGHT_INDUSTRIAL'],
regionCoverage: ['Kanton Zürich'],
reliabilityScore: 0.65,
freshnessStatus: FreshnessStatus.OUTDATED,
lastRunAt: '2026-04-30T08:00:00Z',
status: SourceStatus.PENDING_REVIEW,
notes: 'Crawler-Implementierung noch ausstehend. Manuelle Prüfung erforderlich.',
},
{
id: 'src-006',
name: 'Mietvertragsdaten (CSV Upload Q1 2026)',
sourceType: DataSourceType.CSV_IMPORT,
ownerOrganizationId: 'org-001',
legalBasis: 'Interner Upload durch Portfoliomanager DSGVO-konform',
termsStatus: TermsStatus.APPROVED,
dataCategories: ['Mietverträge', 'Laufzeiten', 'Mieter'],
supportedAssetTypes: ['OFFICE', 'RETAIL'],
regionCoverage: ['Zürich', 'Basel'],
reliabilityScore: 0.84,
freshnessStatus: FreshnessStatus.STALE,
lastRunAt: '2026-03-31T09:00:00Z',
status: SourceStatus.PAUSED,
notes: 'Q2-Upload ausstehend. Quelle pausiert bis neue Datei verfügbar.',
},
{
id: 'src-007',
name: 'JLL Research Partner Feed',
sourceType: DataSourceType.PARTNER_FEED,
ownerOrganizationId: 'org-003',
legalBasis: 'Datenaustauschabkommen mit JLL Schweiz AG vertraulich',
termsStatus: TermsStatus.RESTRICTED,
dataCategories: ['Marktberichte', 'Leerstandsquoten', 'Prime Rents'],
supportedAssetTypes: ['OFFICE', 'LOGISTICS'],
regionCoverage: ['Zürich', 'Genf', 'Basel'],
reliabilityScore: 0.93,
freshnessStatus: FreshnessStatus.FRESH,
lastRunAt: '2026-05-15T07:00:00Z',
nextRunAt: '2026-05-22T07:00:00Z',
status: SourceStatus.ACTIVE,
notes: 'Wöchentlicher Push durch JLL. Nur für interne Nutzung kein Re-Export.',
},
{
id: 'src-008',
name: 'Analyst-Eingaben (Team Zürich)',
sourceType: DataSourceType.ANALYST_ENTRY,
ownerOrganizationId: 'org-001',
legalBasis: 'Interne Datenerhebung durch Analysten-Team',
termsStatus: TermsStatus.APPROVED,
dataCategories: ['Marktsignale', 'Qualitative Einschätzungen', 'Netzwerkinfos'],
supportedAssetTypes: ['OFFICE', 'RETAIL', 'MIXED'],
regionCoverage: ['Zürich', 'Winterthur'],
reliabilityScore: 0.78,
freshnessStatus: FreshnessStatus.FRESH,
lastRunAt: '2026-05-14T16:45:00Z',
status: SourceStatus.ACTIVE,
},
{
id: 'src-009',
name: 'Homegate Gewerbe-Scraper (Beta)',
sourceType: DataSourceType.FUTURE_CRAWLER_STUB,
legalBasis: 'In rechtlicher Prüfung noch nicht freigegeben',
termsStatus: TermsStatus.BLOCKED,
dataCategories: ['Gewerbelistings', 'Mietpreise'],
supportedAssetTypes: ['OFFICE', 'RETAIL'],
regionCoverage: ['Schweiz'],
reliabilityScore: 0.0,
freshnessStatus: FreshnessStatus.OUTDATED,
status: SourceStatus.DISABLED,
errorState: 'Quelle gesperrt robots.txt-Prüfung negativ, AGB untersagt automatisiertes Crawling.',
},
]
export const MOCK_CONNECTOR_RUNS: ConnectorRun[] = [
// src-001 runs
{
id: 'run-001-a',
sourceId: 'src-001',
startedAt: '2026-05-15T06:00:00Z',
finishedAt: '2026-05-15T06:12:34Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 342,
itemsNormalized: 318,
itemsRejected: 24,
signalsCreated: 7,
errors: [],
warnings: ['24 Einträge ohne gültige Flächenangabe übersprungen'],
runSummary: '342 Listings importiert. 318 normalisiert, 7 neue Marktsignale erkannt.',
},
{
id: 'run-001-b',
sourceId: 'src-001',
startedAt: '2026-05-14T06:00:00Z',
finishedAt: '2026-05-14T06:09:11Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 289,
itemsNormalized: 277,
itemsRejected: 12,
signalsCreated: 4,
errors: [],
warnings: [],
runSummary: '289 Listings importiert. 4 neue Marktsignale erkannt.',
},
{
id: 'run-001-c',
sourceId: 'src-001',
startedAt: '2026-05-13T06:00:00Z',
finishedAt: '2026-05-13T06:04:22Z',
status: ConnectorRunStatus.PARTIAL,
itemsDetected: 310,
itemsNormalized: 201,
itemsRejected: 109,
signalsCreated: 2,
errors: ['HTTP 429 nach 201 Einträgen Rate Limit erreicht'],
warnings: ['109 Einträge konnten nicht abgerufen werden'],
runSummary: 'Teilimport wegen Rate Limiting. 201 von 310 Einträgen verarbeitet.',
},
// src-002 runs
{
id: 'run-002-a',
sourceId: 'src-002',
startedAt: '2026-05-15T02:00:00Z',
finishedAt: '2026-05-15T02:03:08Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 1240,
itemsNormalized: 1240,
itemsRejected: 0,
signalsCreated: 12,
errors: [],
warnings: [],
runSummary: 'Vollständiger Portfolio-Sync. 12 Lease-Expiry-Signale erzeugt.',
},
{
id: 'run-002-b',
sourceId: 'src-002',
startedAt: '2026-05-14T14:00:00Z',
finishedAt: '2026-05-14T14:02:55Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 1238,
itemsNormalized: 1238,
itemsRejected: 0,
signalsCreated: 3,
errors: [],
warnings: [],
runSummary: 'Delta-Sync erfolgreich. 3 neue Objekte hinzugefügt.',
},
// src-003 runs
{
id: 'run-003-a',
sourceId: 'src-003',
startedAt: '2026-05-13T10:00:00Z',
finishedAt: '2026-05-13T10:18:42Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 86,
itemsNormalized: 86,
itemsRejected: 0,
signalsCreated: 0,
errors: [],
warnings: ['Quartalsdaten verfügbar manueller Review empfohlen'],
runSummary: 'Marktdaten-Update Q1 2026 importiert. 86 Datenpunkte aktualisiert.',
},
// src-004 runs
{
id: 'run-004-a',
sourceId: 'src-004',
startedAt: '2026-05-15T03:30:00Z',
finishedAt: '2026-05-15T03:44:17Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 523,
itemsNormalized: 498,
itemsRejected: 25,
signalsCreated: 9,
errors: [],
warnings: ['25 Einträge ohne Adressangabe ignoriert'],
runSummary: '523 Handelsregistereinträge geprüft. 9 Firmensitz-Signale erkannt.',
},
// src-007 runs
{
id: 'run-007-a',
sourceId: 'src-007',
startedAt: '2026-05-15T07:00:00Z',
finishedAt: '2026-05-15T07:05:30Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 14,
itemsNormalized: 14,
itemsRejected: 0,
signalsCreated: 3,
errors: [],
warnings: [],
runSummary: 'JLL Weekly Report verarbeitet. 3 Marktberichte als Signale importiert.',
},
// src-008 runs
{
id: 'run-008-a',
sourceId: 'src-008',
startedAt: '2026-05-14T16:45:00Z',
finishedAt: '2026-05-14T16:45:52Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 3,
itemsNormalized: 3,
itemsRejected: 0,
signalsCreated: 3,
errors: [],
warnings: [],
runSummary: '3 manuelle Analysten-Einträge verarbeitet. Je 1 Signal pro Eintrag.',
},
// src-006 last run before pause
{
id: 'run-006-a',
sourceId: 'src-006',
startedAt: '2026-03-31T09:00:00Z',
finishedAt: '2026-03-31T09:02:19Z',
status: ConnectorRunStatus.COMPLETED,
itemsDetected: 412,
itemsNormalized: 408,
itemsRejected: 4,
signalsCreated: 18,
errors: [],
warnings: ['4 Einträge mit doppelter Vertrags-ID ignoriert'],
runSummary: 'Q1 CSV verarbeitet. 408 Mietverträge importiert, 18 Lease-Expiry-Signale.',
},
]