feat: Reminder Manager + Schattenmarkt-Freigabe + mock data overhaul
- Add Reminder Manager page (/supply/reminder-manager) with KPI bar, filter bar, list/card feed, and detail drawer (7 sections incl. activity log, snooze, complete, dismiss actions) - Add Schattenmarkt-Freigabe toggle on PropertyDetailView: Verwaltung can opt-in properties for early market exposure before contract expiry - Auto-generate FutureSignal cards via useSchattenmarktSignals hook when leaseEndDate - leadTimeMonths <= MOCK_TODAY - Fix useUnifiedResults: use property.resultType as fallback (was defaulting everything to VERIFIED_PORTFOLIO) - Fix demand Results: hide VERIFIED_PORTFOLIO from non-manager users even when showOwnProperties toggle was previously enabled - Fix AppShell: redirect to allowed workspace on user role switch - Fix 3 wrong match scores (match-002: 93→62, match-009: 86→55, match-017: 87→52) - Add 7 new match records (match-050–056) for need-001, need-002, need-011 - Add need-011 (Retail Bern Innenstadt) - Add prop-031–036 (EXTERNAL_MARKET / MAISON_WORK / FUTURE_AVAILABILITY) - Fix duplicate image URLs across all properties - Add signal-011 (Bern Altstadt, Mode Boutique) + propertyId to signal-001 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+209
-20
@@ -44,6 +44,7 @@ export const mockProperties: Property[] = [
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
propertyNumber: 'ZH-2024-001',
|
||||
|
||||
units: [
|
||||
{ id: 'unit-001-1', floorLevel: 1, unitLabel: 'Nord', areaSqm: 280, available: false, rentPricePerSqm: 456, currentTenant: 'MediaGroup Schweiz AG', leaseTerm: '5 Jahre', leaseEndDate: '2025-08-31' },
|
||||
{ id: 'unit-001-2', floorLevel: 2, unitLabel: 'Süd', areaSqm: 310, available: false, rentPricePerSqm: 456, currentTenant: 'MediaGroup Schweiz AG', leaseTerm: '5 Jahre', leaseEndDate: '2025-08-31' },
|
||||
@@ -55,8 +56,9 @@ export const mockProperties: Property[] = [
|
||||
currentTenant: 'MediaGroup Schweiz AG',
|
||||
leaseTerm: '5 Jahre',
|
||||
leaseStartDate: '2020-09-01',
|
||||
leaseEndDate: '2025-08-31',
|
||||
leaseEndDate: '2026-10-31',
|
||||
breakoutOption: false,
|
||||
schattenmarktRelease: { enabled: true, leadTimeMonths: 6 },
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2025-01-10T08:00:00Z',
|
||||
updatedAt: '2025-04-28T10:30:00Z',
|
||||
@@ -103,8 +105,9 @@ export const mockProperties: Property[] = [
|
||||
currentTenant: 'Spedition Rhein GmbH',
|
||||
leaseTerm: '3 Jahre',
|
||||
leaseStartDate: '2022-07-01',
|
||||
leaseEndDate: '2025-06-30',
|
||||
leaseEndDate: '2026-09-30',
|
||||
breakoutOption: false,
|
||||
schattenmarktRelease: { enabled: true, leadTimeMonths: 5 },
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2024-11-20T09:00:00Z',
|
||||
updatedAt: '2025-05-05T11:00:00Z',
|
||||
@@ -145,7 +148,7 @@ export const mockProperties: Property[] = [
|
||||
contractDurationMonths: 48,
|
||||
ancillaryCosts: 5.0,
|
||||
riskLevel: RiskLevel.LOW,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
propertyNumber: 'ZH-2021-007',
|
||||
units: [
|
||||
@@ -159,9 +162,10 @@ export const mockProperties: Property[] = [
|
||||
currentTenant: 'Consulting Partners AG',
|
||||
leaseTerm: '4 Jahre',
|
||||
leaseStartDate: '2021-10-01',
|
||||
leaseEndDate: '2025-09-30',
|
||||
leaseEndDate: '2026-11-30',
|
||||
breakoutOption: true,
|
||||
breakoutOptionDate: '2024-10-01',
|
||||
breakoutOptionDate: '2026-09-01',
|
||||
schattenmarktRelease: { enabled: true, leadTimeMonths: 7 },
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2025-02-01T09:00:00Z',
|
||||
updatedAt: '2025-05-01T08:00:00Z',
|
||||
@@ -201,7 +205,7 @@ export const mockProperties: Property[] = [
|
||||
contractDurationMonths: 48,
|
||||
ancillaryCosts: 4.5,
|
||||
riskLevel: RiskLevel.LOW,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1568992687947-868a62a9f521?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
importedFrom: 'SAP RE-FX',
|
||||
importedAt: '2025-01-15T08:00:00Z',
|
||||
@@ -209,8 +213,9 @@ export const mockProperties: Property[] = [
|
||||
currentTenant: 'Pharma Research GmbH',
|
||||
leaseTerm: '4 Jahre',
|
||||
leaseStartDate: '2021-09-01',
|
||||
leaseEndDate: '2025-08-31',
|
||||
leaseEndDate: '2027-08-31',
|
||||
breakoutOption: false,
|
||||
schattenmarktRelease: { enabled: false, leadTimeMonths: 6 },
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2025-01-20T10:00:00Z',
|
||||
updatedAt: '2025-04-30T09:00:00Z',
|
||||
@@ -249,7 +254,7 @@ export const mockProperties: Property[] = [
|
||||
contractDurationMonths: 60,
|
||||
ancillaryCosts: 2.8,
|
||||
riskLevel: RiskLevel.LOW,
|
||||
images: ['https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1553413077-190dd305871c?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
importedFrom: 'SAP RE-FX',
|
||||
importedAt: '2025-01-15T08:00:00Z',
|
||||
@@ -394,7 +399,7 @@ export const mockProperties: Property[] = [
|
||||
contractDurationMonths: 36,
|
||||
ancillaryCosts: 6.0,
|
||||
riskLevel: RiskLevel.LOW,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1504384308090-c894fdcc538d?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
propertyNumber: 'ZG-2022-012',
|
||||
units: [
|
||||
@@ -505,7 +510,7 @@ export const mockProperties: Property[] = [
|
||||
contractDurationMonths: 60,
|
||||
ancillaryCosts: 2.8,
|
||||
riskLevel: RiskLevel.LOW,
|
||||
images: ['https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
importedFrom: 'SAP RE-FX',
|
||||
importedAt: '2025-01-15T08:00:00Z',
|
||||
@@ -555,7 +560,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 2,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1555529669-e69e7aa0ba9a?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-02-15T14:00:00Z',
|
||||
updatedAt: '2025-04-10T09:00:00Z',
|
||||
@@ -584,7 +589,7 @@ export const mockProperties: Property[] = [
|
||||
warnings: ['Daten aus Drittquelle – nicht verifiziert'],
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1486325212027-8081e485255e?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1498049794561-7780e7231661?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-01T10:00:00Z',
|
||||
updatedAt: '2025-03-20T15:00:00Z',
|
||||
@@ -619,7 +624,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 5,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1556761175-b413da4baf72?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-12T11:00:00Z',
|
||||
updatedAt: '2025-04-05T10:00:00Z',
|
||||
@@ -654,7 +659,7 @@ export const mockProperties: Property[] = [
|
||||
parkingSpots: 35,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1525498128493-380d1990a112?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-02-20T09:00:00Z',
|
||||
updatedAt: '2025-03-28T12:00:00Z',
|
||||
@@ -690,7 +695,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 3,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1556742502-ec7c0e9f34b6?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-05T13:00:00Z',
|
||||
updatedAt: '2025-04-18T11:00:00Z',
|
||||
@@ -725,7 +730,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 8,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-02-28T10:00:00Z',
|
||||
updatedAt: '2025-04-02T09:00:00Z',
|
||||
@@ -755,7 +760,7 @@ export const mockProperties: Property[] = [
|
||||
warnings: ['Hallenhöhe nicht verifiziert', 'Kranbahn Status unklar'],
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1565043589221-1a6fd9ae45c7?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1572021335469-31706a17aaef?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-10T08:00:00Z',
|
||||
updatedAt: '2025-03-25T14:00:00Z',
|
||||
@@ -790,7 +795,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 9,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1524758631624-e2822e304c36?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-18T09:00:00Z',
|
||||
updatedAt: '2025-04-12T11:00:00Z',
|
||||
@@ -826,7 +831,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 3,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1528698827591-e19ccd7bc23d?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-02-10T10:00:00Z',
|
||||
updatedAt: '2025-04-08T09:00:00Z',
|
||||
@@ -861,7 +866,7 @@ export const mockProperties: Property[] = [
|
||||
publicTransportMinutes: 6,
|
||||
},
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1497366216548-37526070297c?w=800&h=400&fit=crop'],
|
||||
images: ['https://images.unsplash.com/photo-1497366754035-f200968a6e72?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-08T08:00:00Z',
|
||||
updatedAt: '2025-04-14T10:00:00Z',
|
||||
@@ -1096,6 +1101,190 @@ export const mockProperties: Property[] = [
|
||||
updatedAt: '2025-05-10T08:00:00Z',
|
||||
},
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// NEW — for demo searches
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
{
|
||||
id: 'prop-031',
|
||||
title: 'Bürofläche Hardturm West 16',
|
||||
assetType: AssetType.OFFICE,
|
||||
resultType: ResultType.EXTERNAL_MARKET,
|
||||
location: { city: 'Zürich', district: 'Zürich-West', canton: 'ZH', country: 'CH', coordinates: { lat: 47.3862, lng: 8.5045 } },
|
||||
address: { street: 'Hardturmstrasse', houseNumber: '16', postalCode: '8005', city: 'Zürich', country: 'CH' },
|
||||
areaSqm: 780,
|
||||
rentPricePerSqm: 420,
|
||||
totalRentMonthly: 327600,
|
||||
availabilityDate: '2025-10-01',
|
||||
availabilityStatus: AvailabilityStatus.AVAILABLE_SOON,
|
||||
sourceType: 'IMMOSCOUT_SCRAPE',
|
||||
sourceUrl: 'https://example.com/listing/prop-031',
|
||||
confidenceScore: 0.72,
|
||||
dataQuality: {
|
||||
score: 0.64,
|
||||
missingCriticalFields: ['contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts'],
|
||||
lastVerifiedAt: '2025-05-10',
|
||||
freshness: DataFreshness.STALE,
|
||||
warnings: ['Daten aus Drittquelle'],
|
||||
},
|
||||
softFactors: { prestige: 76, accessibility: 88, visibilityScore: 62, talentAccess: 82, parkingSpots: 8, publicTransportMinutes: 4 },
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1542314831-068cd1dbfeeb?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-04-25T10:00:00Z',
|
||||
updatedAt: '2025-05-10T09:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-032',
|
||||
title: 'Büroloft Pfingstweidstrasse 10',
|
||||
assetType: AssetType.OFFICE,
|
||||
resultType: ResultType.MAISON_WORK,
|
||||
location: { city: 'Zürich', district: 'Kreis 5', canton: 'ZH', country: 'CH', coordinates: { lat: 47.3875, lng: 8.5095 } },
|
||||
address: { street: 'Pfingstweidstrasse', houseNumber: '10', postalCode: '8005', city: 'Zürich', country: 'CH' },
|
||||
areaSqm: 720,
|
||||
rentPricePerSqm: 480,
|
||||
totalRentMonthly: 345600,
|
||||
availabilityDate: '2025-11-01',
|
||||
availabilityStatus: AvailabilityStatus.AVAILABLE_SOON,
|
||||
sourceType: 'HOMEGATE_SCRAPE',
|
||||
sourceUrl: 'https://example.com/listing/prop-032',
|
||||
confidenceScore: 0.71,
|
||||
dataQuality: {
|
||||
score: 0.62,
|
||||
missingCriticalFields: ['contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'expansionPotentialSqm'],
|
||||
lastVerifiedAt: '2025-05-08',
|
||||
freshness: DataFreshness.STALE,
|
||||
warnings: ['Ausbaustandard nicht bestätigt'],
|
||||
},
|
||||
softFactors: { prestige: 74, accessibility: 86, visibilityScore: 60, talentAccess: 80, parkingSpots: 6, publicTransportMinutes: 5 },
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1613545325278-f24b0cae1224?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-04-20T11:00:00Z',
|
||||
updatedAt: '2025-05-08T10:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-033',
|
||||
title: 'Retailfläche Marktgasse 44',
|
||||
assetType: AssetType.RETAIL,
|
||||
resultType: ResultType.MAISON_WORK,
|
||||
location: { city: 'Bern', district: 'Innenstadt', canton: 'BE', country: 'CH', coordinates: { lat: 46.9480, lng: 7.4468 } },
|
||||
address: { street: 'Marktgasse', houseNumber: '44', postalCode: '3011', city: 'Bern', country: 'CH' },
|
||||
areaSqm: 260,
|
||||
rentPricePerSqm: 1440,
|
||||
totalRentMonthly: 374400,
|
||||
availabilityDate: '2025-10-01',
|
||||
availabilityStatus: AvailabilityStatus.AVAILABLE_SOON,
|
||||
sourceType: 'MATCHOFFICE_SCRAPE',
|
||||
sourceUrl: 'https://example.com/listing/prop-033',
|
||||
confidenceScore: 0.70,
|
||||
dataQuality: {
|
||||
score: 0.60,
|
||||
missingCriticalFields: ['contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel'],
|
||||
lastVerifiedAt: '2025-05-05',
|
||||
freshness: DataFreshness.STALE,
|
||||
warnings: ['Mietpreis nicht final bestätigt'],
|
||||
},
|
||||
softFactors: { prestige: 88, visibilityScore: 92, passerbyFrequency: 'HIGH', accessibility: 92, publicTransportMinutes: 3 },
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1528698827591-e19ccd7bc23d?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-03-28T09:00:00Z',
|
||||
updatedAt: '2025-05-05T10:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-034',
|
||||
title: 'Ladenfläche Lorrainestrasse 8',
|
||||
assetType: AssetType.RETAIL,
|
||||
resultType: ResultType.EXTERNAL_MARKET,
|
||||
location: { city: 'Bern', district: 'Lorraine', canton: 'BE', country: 'CH', coordinates: { lat: 46.9565, lng: 7.4388 } },
|
||||
address: { street: 'Lorrainestrasse', houseNumber: '8', postalCode: '3013', city: 'Bern', country: 'CH' },
|
||||
areaSqm: 340,
|
||||
rentPricePerSqm: 1320,
|
||||
totalRentMonthly: 448800,
|
||||
availabilityDate: '2026-01-01',
|
||||
availabilityStatus: AvailabilityStatus.AVAILABLE_SOON,
|
||||
sourceType: 'NEWHOME_SCRAPE',
|
||||
sourceUrl: 'https://example.com/listing/prop-034',
|
||||
confidenceScore: 0.68,
|
||||
dataQuality: {
|
||||
score: 0.56,
|
||||
missingCriticalFields: ['contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel'],
|
||||
lastVerifiedAt: '2025-04-22',
|
||||
freshness: DataFreshness.STALE,
|
||||
warnings: ['Daten aus Drittquelle', 'Schaufensterfront nicht bestätigt'],
|
||||
},
|
||||
softFactors: { prestige: 72, visibilityScore: 78, passerbyFrequency: 'MEDIUM', accessibility: 82, publicTransportMinutes: 6 },
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1534398079543-7ae6d016b86a?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-04-08T10:00:00Z',
|
||||
updatedAt: '2025-04-22T09:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-035',
|
||||
title: 'Retailfläche Gerechtigkeitsgasse Bern (Signal: Auszug)',
|
||||
assetType: AssetType.RETAIL,
|
||||
resultType: ResultType.FUTURE_AVAILABILITY,
|
||||
location: { city: 'Bern', district: 'Altstadt', canton: 'BE', country: 'CH', coordinates: { lat: 46.9475, lng: 7.4492 } },
|
||||
address: { street: 'Gerechtigkeitsgasse', houseNumber: '22', postalCode: '3011', city: 'Bern', country: 'CH' },
|
||||
areaSqm: 290,
|
||||
rentPricePerSqm: 1560,
|
||||
availabilityDate: '2026-04-01',
|
||||
availabilityStatus: AvailabilityStatus.FUTURE_SIGNAL,
|
||||
sourceType: 'AI_SIGNAL',
|
||||
confidenceScore: 0.55,
|
||||
dataQuality: {
|
||||
score: 0.36,
|
||||
missingCriticalFields: ['totalRentMonthly', 'contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel'],
|
||||
freshness: DataFreshness.FRESH,
|
||||
warnings: ['Probabilistisches Signal – kein bestätigtes Objekt', 'Mietpreis geschätzt'],
|
||||
},
|
||||
riskLevel: RiskLevel.HIGH,
|
||||
createdAt: '2025-04-28T09:00:00Z',
|
||||
updatedAt: '2025-05-15T10:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-036',
|
||||
title: 'Lagerhalle Klybeckstrasse 280',
|
||||
assetType: AssetType.LOGISTICS,
|
||||
resultType: ResultType.EXTERNAL_MARKET,
|
||||
location: { city: 'Basel', district: 'Kleinhüningen', canton: 'BS', country: 'CH', coordinates: { lat: 47.5744, lng: 7.5862 } },
|
||||
address: { street: 'Klybeckstrasse', houseNumber: '280', postalCode: '4057', city: 'Basel', country: 'CH' },
|
||||
areaSqm: 2600,
|
||||
rentPricePerSqm: 180,
|
||||
totalRentMonthly: 468000,
|
||||
availabilityDate: '2025-09-01',
|
||||
availabilityStatus: AvailabilityStatus.AVAILABLE_SOON,
|
||||
sourceType: 'IMMOSCOUT_SCRAPE',
|
||||
sourceUrl: 'https://example.com/listing/prop-036',
|
||||
confidenceScore: 0.70,
|
||||
dataQuality: {
|
||||
score: 0.60,
|
||||
missingCriticalFields: ['contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts'],
|
||||
lastVerifiedAt: '2025-05-02',
|
||||
freshness: DataFreshness.STALE,
|
||||
warnings: ['Hallenhöhe nicht bestätigt', 'Daten aus Drittquelle'],
|
||||
},
|
||||
softFactors: { prestige: 44, accessibility: 90, parkingSpots: 38 },
|
||||
riskLevel: RiskLevel.MEDIUM,
|
||||
images: ['https://images.unsplash.com/photo-1590239926044-4131a46e3f27?w=800&h=400&fit=crop'],
|
||||
mapImageUrl: 'https://images.unsplash.com/photo-1524661135-423995f22d0b?w=600&h=300&fit=crop',
|
||||
createdAt: '2025-04-15T08:00:00Z',
|
||||
updatedAt: '2025-05-02T10:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-030',
|
||||
title: 'Bürofläche St.Gallen Riethüsli (Signal: Expansion)',
|
||||
|
||||
Reference in New Issue
Block a user