Files
property-match/src/mock-data/matches.ts
T
Benjamin Sutter 9f391d17cb 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>
2026-05-20 11:52:24 +02:00

1869 lines
100 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 { MatchStrength, MatchStatus, RiskLevel } from '../domain/enums'
import type { Match } from '../domain/match'
export const mockMatches: Match[] = [
// ───────────────────────────────────────────────────────────────────────────
// need-001 · Innovatech AG · OFFICE Zürich · 6001000m² · max CHF 45/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-001',
propertyId: 'prop-001',
needId: 'need-001',
matchScore: 88,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 92, softFactorScore: 85, confidenceModifier: 0.97, dataQualityModifier: 0.92, totalScore: 88 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 95, contribution: 19, explanation: '850m² liegt im Zielkorridor (6001000m²)' },
{ criterion: 'ÖV-Anbindung', weight: 0.20, score: 90, contribution: 18, explanation: '4 Min. zur S-Bahn, Kriterium erfüllt' },
{ criterion: 'Standort', weight: 0.15, score: 88, contribution: 13.2, explanation: 'Zürich-West trifft bevorzugte Lage' },
],
negativeFactors: [
{ criterion: 'Mietpreis', weight: 0.15, score: 76, contribution: 11.4, explanation: 'CHF 38/m² liegt über Wunschbudget von CHF 35/m²' },
],
tradeoffs: [
{ criterion: 'Budget', concern: 'Mietpreis 8% über Budget-Maximum', severity: 'MEDIUM', mitigation: 'Verhandlungspotenzial vorhanden Objekt leer seit 3 Monaten' },
],
explainabilitySummary: 'Starker Match aufgrund idealer Lage und Fläche. Einziger Vorbehalt ist der Mietpreis, der knapp über dem Budget liegt, aber verhandelbar erscheint.',
confidenceLevel: 0.92,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
alternativeStrategies: [
{ title: 'Kleinere Einheit im gleichen Gebäude', description: '650m² verfügbar ab Q3 2025, CHF 35/m²', expectedScore: 82 },
],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:00:00Z',
updatedAt: '2025-05-10T08:00:00Z',
},
{
id: 'match-002',
propertyId: 'prop-004',
needId: 'need-001',
matchScore: 62,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 72, softFactorScore: 62, confidenceModifier: 0.68, dataQualityModifier: 0.55, totalScore: 62 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 78, contribution: 15.6, explanation: '1150m² überschreitet Zielkorridor leicht (6001000m²)' },
],
negativeFactors: [
{ criterion: 'Objekttyp', weight: 0.25, score: 30, contribution: 7.5, explanation: 'MIXED-Fläche Bedarf ist OFFICE, Typ-Mismatch' },
{ criterion: 'Standort', weight: 0.20, score: 55, contribution: 11, explanation: 'Zürich Kreis 4 ist nicht Zürich-West andere Lage' },
{ criterion: 'Mietpreis', weight: 0.15, score: 40, contribution: 6, explanation: 'CHF 52/m² ist 15% über Budget-Maximum (CHF 45/m²)' },
{ criterion: 'Datenqualität', weight: 0.10, score: 40, contribution: 4, explanation: 'Externe Quelle Mietpreis und Verfügbarkeit nicht bestätigt' },
],
tradeoffs: [
{ criterion: 'Objekttyp', concern: 'MIXED-Fläche statt reiner Bürofläche Nutzungseinschränkungen möglich', severity: 'HIGH' },
{ criterion: 'Budget', concern: 'Mietpreis 15% über Budget-Maximum', severity: 'HIGH' },
{ criterion: 'Standort', concern: 'Kreis 4 ist nicht Zürich-West längere Pendeldistanz für Innovatech-Team', severity: 'MEDIUM' },
],
explainabilitySummary: 'Schwacher Match aufgrund Typ-Mismatch (MIXED statt OFFICE), falschem Stadtteil (Kreis 4 ≠ Zürich-West) und Budgetüberschreitung von 15%.',
confidenceLevel: 0.55,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Daten aus Drittquelle unvollständig', 'Mietpreis nicht verifiziert', 'Typ-Mismatch'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:05:00Z',
updatedAt: '2025-05-10T08:05:00Z',
},
{
id: 'match-005',
propertyId: 'prop-007',
needId: 'need-001',
matchScore: 86,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 89, softFactorScore: 83, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 86 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 92, contribution: 18.4, explanation: '720m² im Zielkorridor (6001000m²)' },
{ criterion: 'Standort', weight: 0.20, score: 90, contribution: 18, explanation: 'Zürich Oerlikon bevorzugte Lage' },
{ criterion: 'Budget', weight: 0.15, score: 90, contribution: 13.5, explanation: 'CHF 36/m² deutlich unter Maximum' },
],
negativeFactors: [
{ criterion: 'Prestige', weight: 0.10, score: 72, contribution: 7.2, explanation: 'Prestige-Score 72 leicht unter Mindestanforderung 70 ok' },
],
tradeoffs: [],
explainabilitySummary: 'Starker Match in Zürich Oerlikon. Fläche, Budget und ÖV-Anbindung erfüllen alle Hauptkriterien. Bewertung analog zu prop-001.',
confidenceLevel: 0.91,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:20:00Z',
updatedAt: '2025-05-10T08:20:00Z',
},
{
id: 'match-006',
propertyId: 'prop-013',
needId: 'need-001',
matchScore: 72,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 80, softFactorScore: 68, confidenceModifier: 0.96, dataQualityModifier: 0.92, totalScore: 72 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 88, contribution: 17.6, explanation: 'Zürich Altstetten akzeptable Lage' },
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 45/m² exakt im Budget-Limit' },
],
negativeFactors: [
{ criterion: 'Nutzungsart', weight: 0.15, score: 60, contribution: 9, explanation: 'MIXED-Fläche, Bedarf ist OFFICE Teileignung' },
{ criterion: 'Fläche', weight: 0.20, score: 65, contribution: 13, explanation: '1300m² überschreitet Maximum von 1000m² deutlich' },
],
tradeoffs: [
{ criterion: 'Nutzungsart', concern: 'Gemischt genutzte Fläche Büroanteil nicht spezifiziert', severity: 'MEDIUM', mitigation: 'Aufteilung klären, evtl. nur Büroanteil mieten' },
],
explainabilitySummary: 'Moderater Match Lage und Budget stimmen, aber die Fläche ist zu gross und der gemischte Nutzungstyp passt nur teilweise.',
confidenceLevel: 0.82,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Büroanteil der Gesamtfläche unklar'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:25:00Z',
updatedAt: '2025-05-10T08:25:00Z',
},
{
id: 'match-007',
propertyId: 'prop-005',
needId: 'need-001',
matchScore: 59,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 82, softFactorScore: 66, confidenceModifier: 0.55, dataQualityModifier: 0.38, totalScore: 59 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 90, contribution: 18, explanation: 'Zürich Technopark bevorzugte Lage' },
{ criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '600m² an unterem Rand des Zielkorridors' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 28, contribution: 4.2, explanation: 'Probabilistisches Signal kein bestätigtes Objekt' },
{ criterion: 'Datenqualität', weight: 0.10, score: 22, contribution: 2.2, explanation: 'Kritische Felder fehlen, Daten nicht verifiziert' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Signal nur 55% Wahrscheinlichkeit keine Garantie', severity: 'HIGH', mitigation: 'Für Monitoring-Watchlist geeignet' },
],
explainabilitySummary: 'Lage und Fläche passen gut, aber die hohe Unsicherheit durch das probabilistische Signal zieht den Score deutlich nach unten.',
confidenceLevel: 0.48,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Probabilistisches Signal', 'Kritische Daten fehlen'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:30:00Z',
updatedAt: '2025-05-10T08:30:00Z',
},
{
id: 'match-008',
propertyId: 'prop-023',
needId: 'need-001',
matchScore: 62,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 85, softFactorScore: 69, confidenceModifier: 0.54, dataQualityModifier: 0.36, totalScore: 62 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 85, contribution: 17, explanation: 'Zürich-Nord / Seebach bevorzugter Kanton ZH' },
{ criterion: 'Budget', weight: 0.15, score: 92, contribution: 13.8, explanation: 'CHF 38/m² unter Maximum von CHF 45/m²' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 32, contribution: 4.8, explanation: '54% Signalwahrscheinlichkeit unbestätigt' },
{ criterion: 'Datenqualität', weight: 0.10, score: 20, contribution: 2, explanation: 'Probabilistisches Signal, Felder fehlen' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Auszug von aktuellem Mieter nicht bestätigt', severity: 'HIGH', mitigation: 'Als Frühindikator beobachten' },
],
explainabilitySummary: 'Gute Lage in Zürich mit passendem Budget, aber Future-Signal mit mittlerer Konfidenz. Empfehlung: Beobachten.',
confidenceLevel: 0.46,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Auszug des Mieters nicht bestätigt', 'Daten unvollständig'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:35:00Z',
updatedAt: '2025-05-10T08:35:00Z',
},
{
id: 'match-009',
propertyId: 'prop-015',
needId: 'need-001',
matchScore: 55,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 68, softFactorScore: 60, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 55 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '650m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.15, score: 90, contribution: 13.5, explanation: 'CHF 38/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.20, score: 35, contribution: 7, explanation: 'Luzern ist eine andere Stadt und ein anderer Kanton nicht Zürich' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Luzern liegt 55 km von Zürich kein Pendeln möglich', severity: 'HIGH' },
],
explainabilitySummary: 'Luzern passt nicht zu Zürich-West. Trotz passendem Budget und Fläche ist die Lage nicht kompatibel.',
confidenceLevel: 0.55,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort ausserhalb bevorzugter Region'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:40:00Z',
updatedAt: '2025-05-10T08:40:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-002 · Schweizer Logistik GmbH · LOGISTICS Basel · 15004000m² · max CHF 18/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-003',
propertyId: 'prop-002',
needId: 'need-002',
matchScore: 91,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 94, softFactorScore: 89, confidenceModifier: 0.99, dataQualityModifier: 0.96, totalScore: 91 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.25, score: 96, contribution: 24, explanation: '2400m² im Zielkorridor (15004000m²)' },
{ criterion: 'Autobahnanschluss', weight: 0.20, score: 92, contribution: 18.4, explanation: 'A2-Anschluss ca. 4 Min., Kriterium erfüllt' },
{ criterion: 'Budget', weight: 0.20, score: 88, contribution: 17.6, explanation: 'CHF 14/m² liegt unter Maximum von CHF 18/m²' },
],
negativeFactors: [
{ criterion: 'Erweiterungspotenzial', weight: 0.05, score: 70, contribution: 3.5, explanation: '800m² Erweiterung möglich, aber begrenzt' },
],
tradeoffs: [],
explainabilitySummary: 'Sehr starker Match. Fläche, Anbindung und Budget passen exzellent. Hohe Datenqualität aus internem Portfolio bestätigt Verlässlichkeit.',
confidenceLevel: 0.96,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:10:00Z',
updatedAt: '2025-05-10T08:10:00Z',
},
{
id: 'match-004',
propertyId: 'prop-006',
needId: 'need-002',
matchScore: 47,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 70, softFactorScore: 40, confidenceModifier: 0.48, dataQualityModifier: 0.30, totalScore: 47 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.25, score: 85, contribution: 21.25, explanation: '3200m² im erweiterten Zielkorridor' },
{ criterion: 'Standort', weight: 0.20, score: 72, contribution: 14.4, explanation: 'Reinach BL ist eine bevorzugte Region' },
],
negativeFactors: [
{ criterion: 'Confidence', weight: 0.15, score: 20, contribution: 3, explanation: 'Nur 48% Signalwahrscheinlichkeit kein bestätigtes Objekt' },
{ criterion: 'Datenqualität', weight: 0.10, score: 15, contribution: 1.5, explanation: 'Mehrere kritische Felder fehlen, Schätzwerte' },
{ criterion: 'Timing', weight: 0.15, score: 50, contribution: 7.5, explanation: 'Verfügbarkeit erst Q2 2026, spät für Anforderung' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Probabilistisches Future-Signal keine Garantie auf Verfügbarkeit', severity: 'HIGH', mitigation: 'Für Monitoring-Watchlist geeignet' },
],
explainabilitySummary: 'Schwacher Match aufgrund hoher Unsicherheit. Das Signal ist interessant als Frühindikator, aber nicht als aktive Option geeignet.',
confidenceLevel: 0.38,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Probabilistisches Signal ohne Bestätigung', 'Mietpreis geschätzt'],
alternativeStrategies: [
{ title: 'Signal beobachten', description: 'Als Future-Availability-Signal auf Watchlist setzen und in 3 Monaten neu evaluieren' },
],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T08:15:00Z',
updatedAt: '2025-05-10T08:15:00Z',
},
{
id: 'match-010',
propertyId: 'prop-014',
needId: 'need-002',
matchScore: 87,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 90, softFactorScore: 84, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 87 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.25, score: 95, contribution: 23.75, explanation: '3100m² optimal im Zielkorridor (15004000m²)' },
{ criterion: 'Standort', weight: 0.20, score: 82, contribution: 16.4, explanation: 'Pratteln BL Kanton BL, direkte Nähe zu Basel' },
{ criterion: 'Budget', weight: 0.20, score: 88, contribution: 17.6, explanation: 'CHF 15/m² unter Maximum von CHF 18/m²' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.05, score: 65, contribution: 3.25, explanation: 'Nicht direkt Basel-Stadt, aber akzeptable Region' },
],
tradeoffs: [],
explainabilitySummary: 'Sehr starker Match. Logistikfläche in Pratteln erfüllt alle Hauptkriterien. Verfügbarkeit sofort, Daten vollständig.',
confidenceLevel: 0.93,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T09:00:00Z',
updatedAt: '2025-05-10T09:00:00Z',
},
{
id: 'match-011',
propertyId: 'prop-016',
needId: 'need-002',
matchScore: 93,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 95, softFactorScore: 92, confidenceModifier: 0.83, dataQualityModifier: 0.76, totalScore: 93 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.25, score: 92, contribution: 23, explanation: '2200m² im Zielkorridor' },
{ criterion: 'Standort', weight: 0.20, score: 78, contribution: 15.6, explanation: 'Muttenz BL gleicher Kanton, gute Lage' },
{ criterion: 'Budget', weight: 0.20, score: 85, contribution: 17, explanation: 'CHF 16/m² innerhalb Budget' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 58, contribution: 5.8, explanation: 'Externe Quelle Hallenhöhe nicht bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Hallenhöhe und Andienung aus externer Quelle Vor-Ort-Check empfohlen', severity: 'MEDIUM' },
],
explainabilitySummary: 'Solider Marktinserat-Match in Muttenz. Fläche und Budget stimmen, Datenverifikation ausstehend.',
confidenceLevel: 0.72,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Hallenhöhe nicht bestätigt', 'Externe Quelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T09:05:00Z',
updatedAt: '2025-05-10T09:05:00Z',
},
{
id: 'match-012',
propertyId: 'prop-009',
needId: 'need-002',
matchScore: 55,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 74, softFactorScore: 60, confidenceModifier: 0.98, dataQualityModifier: 0.95, totalScore: 55 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.25, score: 85, contribution: 21.25, explanation: '1800m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.20, score: 90, contribution: 18, explanation: 'CHF 13/m² weit unter Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.20, score: 35, contribution: 7, explanation: 'Winterthur liegt ausserhalb Präferenz Basel-Region' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Winterthur statt Basel komplett andere Region, kein A2-Anschluss', severity: 'HIGH' },
],
explainabilitySummary: 'Fläche und Preis passen hervorragend, aber Winterthur ist nicht die gewünschte Logistik-Region Basel. Nur als Alternativoption.',
confidenceLevel: 0.82,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Standort ausserhalb Präferenzregion'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T09:10:00Z',
updatedAt: '2025-05-10T09:10:00Z',
},
{
id: 'match-013',
propertyId: 'prop-024',
needId: 'need-002',
matchScore: 63,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 86, softFactorScore: 70, confidenceModifier: 0.52, dataQualityModifier: 0.35, totalScore: 63 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 95, contribution: 19, explanation: 'Basel Hafen exakte Präferenzlage' },
{ criterion: 'Fläche', weight: 0.25, score: 88, contribution: 22, explanation: '2600m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 32, contribution: 4.8, explanation: 'Neubau-Signal Fertigstellung Q2 2026' },
{ criterion: 'Datenqualität', weight: 0.10, score: 25, contribution: 2.5, explanation: 'Mieterkonditionen noch nicht bekannt' },
],
tradeoffs: [
{ criterion: 'Timing', concern: 'Fertigstellung Juli 2026 möglicherweise zu spät', severity: 'MEDIUM', mitigation: 'Voranmietung prüfen' },
],
explainabilitySummary: 'Sehr gute Lage direkt am Basler Hafen. Als Neubau mit hoher Bauwahrscheinlichkeit auf Shortlist geeignet.',
confidenceLevel: 0.44,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Fertigstellung abhängig von Baufortschritt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T09:15:00Z',
updatedAt: '2025-05-10T09:15:00Z',
},
{
id: 'match-014',
propertyId: 'prop-029',
needId: 'need-002',
matchScore: 56,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 79, softFactorScore: 63, confidenceModifier: 0.46, dataQualityModifier: 0.31, totalScore: 56 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.25, score: 90, contribution: 22.5, explanation: '3500m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.20, score: 92, contribution: 18.4, explanation: 'CHF 13/m² deutlich unter Maximum' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 28, contribution: 4.2, explanation: 'Nur 50% Wahrscheinlichkeit, kein bestätigter Auszug' },
{ criterion: 'Standort', weight: 0.20, score: 60, contribution: 12, explanation: 'Frenkendorf BL gleicher Kanton, aber nicht Basel-Stadt' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Probabilistisches Signal Auszug unbestätigt', severity: 'HIGH' },
],
explainabilitySummary: 'Gleicher Kanton, gutes Preis-Leistungs-Verhältnis, aber Future-Signal mit niedriger Konfidenz. Als Watchlist-Kandidat geeignet.',
confidenceLevel: 0.40,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Auszug unbestätigt', 'Konditionen unbekannt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-10T09:20:00Z',
updatedAt: '2025-05-10T09:20:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-003 · Pharma Holding AG · OFFICE Basel · 500800m² · max CHF 40/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-015',
propertyId: 'prop-008',
needId: 'need-003',
matchScore: 85,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 82, confidenceModifier: 0.97, dataQualityModifier: 0.93, totalScore: 85 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 95, contribution: 23.75, explanation: 'Basel Dreispitz exakte Präferenzlage' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 32/m² deutlich unter Maximum CHF 40/m²' },
{ criterion: 'Prestige', weight: 0.12, score: 70, contribution: 8.4, explanation: 'Prestige 70 erfüllt Mindestanforderung' },
],
negativeFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 72, contribution: 14.4, explanation: '900m² liegt über Maximum 800m² etwas zu gross' },
],
tradeoffs: [
{ criterion: 'Fläche', concern: '900m² leicht über Maximum, möglicherweise Untereinheit verhandelbar', severity: 'LOW' },
],
explainabilitySummary: 'Starker Match in Basel. Prestige, Budget und Lage stimmen. Fläche minimal über Wunschgrösse, aber verhandelbar.',
confidenceLevel: 0.90,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T08:00:00Z',
updatedAt: '2025-05-11T08:00:00Z',
},
{
id: 'match-016',
propertyId: 'prop-007',
needId: 'need-003',
matchScore: 52,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 72, softFactorScore: 60, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 52 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 90, contribution: 18, explanation: '720m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 36/m² unter Maximum CHF 40/m²' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Zürich statt Basel andere Stadt, anderer Kanton' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Zürich ist nicht im Präferenzgebiet Basel/Allschwil', severity: 'HIGH' },
],
explainabilitySummary: 'Fläche und Preis stimmen, aber Zürich entspricht nicht dem Standortbedarf Basel. Nur wenn Flexibilität vorhanden.',
confidenceLevel: 0.86,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Standortanforderung nicht erfüllt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T08:05:00Z',
updatedAt: '2025-05-11T08:05:00Z',
},
{
id: 'match-017',
propertyId: 'prop-018',
needId: 'need-003',
matchScore: 52,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 62, softFactorScore: 54, confidenceModifier: 0.68, dataQualityModifier: 0.57, totalScore: 52 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 31/m² deutlich unter Maximum' },
{ criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '780m² nahe am Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Bern liegt 90 km von Basel kritisches Ausschlusskriterium' },
{ criterion: 'Datenqualität', weight: 0.10, score: 42, contribution: 4.2, explanation: 'Externe Quelle, Renovierungsstand unklar' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Bern liegt 90 km von Basel keine Nähe zur Pharma-Industrie-Achse', severity: 'HIGH' },
],
explainabilitySummary: 'Bern liegt 90 km von Basel entfernt. Lage ist kritisches Ausschlusskriterium trotz passender Fläche und Budget.',
confidenceLevel: 0.54,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort ausserhalb Präferenzregion', 'Externe Quelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T08:10:00Z',
updatedAt: '2025-05-11T08:10:00Z',
},
{
id: 'match-018',
propertyId: 'prop-005',
needId: 'need-003',
matchScore: 38,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.REJECTED,
scoreBreakdown: { hardMatchScore: 61, softFactorScore: 45, confidenceModifier: 0.55, dataQualityModifier: 0.38, totalScore: 38 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '600m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Zürich statt Basel 80km Entfernung' },
{ criterion: 'Budget', weight: 0.20, score: 70, contribution: 14, explanation: 'CHF 42/m² liegt 5% über Budget-Maximum' },
{ criterion: 'Konfidenz', weight: 0.15, score: 25, contribution: 3.75, explanation: 'Future-Signal, kein bestätigtes Objekt' },
],
tradeoffs: [
{ criterion: 'Standort & Verfügbarkeit', concern: 'Falscher Standort + Future-Signal macht diesen Match nicht empfehlenswert', severity: 'HIGH' },
],
explainabilitySummary: 'Zu viele kritische Mängel: falscher Standort, Budget leicht über Maximum, und probabilistisches Signal. Abgelehnt.',
confidenceLevel: 0.36,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Falscher Standort', 'Future-Signal', 'Budget knapp'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T08:15:00Z',
updatedAt: '2025-05-11T08:15:00Z',
},
{
id: 'match-019',
propertyId: 'prop-015',
needId: 'need-003',
matchScore: 42,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 56, softFactorScore: 44, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 42 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 38/m² unter Maximum CHF 40/m²' },
{ criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '650m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Luzern liegt ausserhalb Region Basel' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Luzern ist nicht im Präferenzgebiet, 100km von Basel', severity: 'HIGH' },
],
explainabilitySummary: 'Budget und Fläche passen, jedoch ist Luzern nicht mit dem Bedarf Raum Basel vereinbar.',
confidenceLevel: 0.56,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort ausserhalb Präferenz'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T08:20:00Z',
updatedAt: '2025-05-11T08:20:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-004 · Retailer Zürich AG · RETAIL Zürich · 200500m² · max CHF 100/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-020',
propertyId: 'prop-010',
needId: 'need-004',
matchScore: 91,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 94, softFactorScore: 88, confidenceModifier: 0.99, dataQualityModifier: 0.96, totalScore: 91 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 98, contribution: 34.3, explanation: 'Zürich Löwenplatz exakte Innenstadtlage, Topstandort' },
{ criterion: 'Fläche', weight: 0.15, score: 90, contribution: 13.5, explanation: '285m² im Zielkorridor' },
{ criterion: 'Prestige', weight: 0.15, score: 95, contribution: 14.25, explanation: 'Prestige 95 Topstandort erfüllt Anforderung' },
],
negativeFactors: [
{ criterion: 'Budget', weight: 0.15, score: 80, contribution: 12, explanation: 'CHF 88/m² unter Maximum CHF 100/m², leicht over avg' },
],
tradeoffs: [],
explainabilitySummary: 'Exzellenter Match. Zürich Löwenplatz ist ein Erstklasstandort mit höchster Passantenfrequenz. Alle Kriterien erfüllt.',
confidenceLevel: 0.96,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T09:00:00Z',
updatedAt: '2025-05-11T09:00:00Z',
},
{
id: 'match-021',
propertyId: 'prop-017',
needId: 'need-004',
matchScore: 91,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 94, softFactorScore: 90, confidenceModifier: 0.81, dataQualityModifier: 0.74, totalScore: 91 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 94, contribution: 32.9, explanation: 'Zürich Löwenstrasse Innenstadtlage' },
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 95/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 61, contribution: 6.1, explanation: 'Mietpreis aus externer Quelle, nicht bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Mietpreis und Vertragsdauer nicht bestätigt', severity: 'MEDIUM', mitigation: 'Verifizierung beim Vermieter empfohlen' },
],
explainabilitySummary: 'Sehr gute Lage in Zürich Innenstadt. Datenverifikation ausstehend, aber Standort und Preis stimmen.',
confidenceLevel: 0.72,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Mietpreis nicht final bestätigt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T09:05:00Z',
updatedAt: '2025-05-11T09:05:00Z',
},
{
id: 'match-022',
propertyId: 'prop-025',
needId: 'need-004',
matchScore: 62,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 85, softFactorScore: 69, confidenceModifier: 0.50, dataQualityModifier: 0.33, totalScore: 62 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 90, contribution: 31.5, explanation: 'Zürich Niederdorf Innenstadtlage, gute Passantenfrequenz' },
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 92/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 30, contribution: 4.5, explanation: '55% Signalwahrscheinlichkeit unbestätigt' },
{ criterion: 'Datenqualität', weight: 0.10, score: 20, contribution: 2, explanation: 'Future-Signal, kritische Felder fehlen' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Probabilistisches Signal Auszug noch nicht bestätigt', severity: 'HIGH' },
],
explainabilitySummary: 'Gute Lage im Niederdorf, aber Future-Signal mit mittlerer Konfidenz. Empfehlung: Beobachten und bei Bestätigung priorisieren.',
confidenceLevel: 0.42,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Auszug unbestätigt', 'Future-Signal'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T09:10:00Z',
updatedAt: '2025-05-11T09:10:00Z',
},
{
id: 'match-023',
propertyId: 'prop-003',
needId: 'need-004',
matchScore: 84,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 89, softFactorScore: 82, confidenceModifier: 0.77, dataQualityModifier: 0.69, totalScore: 84 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 95/m² unter Maximum CHF 100/m²' },
{ criterion: 'Prestige', weight: 0.15, score: 92, contribution: 13.8, explanation: 'Berner Bahnhofstrasse Top-Prestige' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.35, score: 35, contribution: 12.25, explanation: 'Bern statt Zürich Innenstadt andere Stadt, anderer Kanton' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Bern ist nicht Zürich Laufkundschaft aus anderem Einzugsgebiet', severity: 'HIGH' },
],
explainabilitySummary: 'Gutes Retail-Objekt in Bern, aber der Bedarf ist explizit Zürich Innenstadt. Standort ist ausschlaggebend für Ablehnung.',
confidenceLevel: 0.60,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort nicht im Zielgebiet'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T09:15:00Z',
updatedAt: '2025-05-11T09:15:00Z',
},
{
id: 'match-024',
propertyId: 'prop-021',
needId: 'need-004',
matchScore: 72,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 81, softFactorScore: 70, confidenceModifier: 0.72, dataQualityModifier: 0.62, totalScore: 72 },
positiveFactors: [
{ criterion: 'Prestige', weight: 0.15, score: 94, contribution: 14.1, explanation: 'Rue du Rhône Genf sehr hoher Prestige-Score' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.35, score: 35, contribution: 12.25, explanation: 'Genf ist nicht Zürich 280km Entfernung' },
{ criterion: 'Budget', weight: 0.15, score: 68, contribution: 10.2, explanation: 'CHF 112/m² liegt 12% über Maximum CHF 100/m²' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Genf ist eine komplett andere Stadt als Zürich', severity: 'HIGH' },
{ criterion: 'Budget', concern: 'Mietpreis 12% über Maximum', severity: 'MEDIUM' },
],
explainabilitySummary: 'Abgelehnt. Genf und Zürich sind nicht kompatibel weder geografisch noch bezüglich des angestrebten Kundenkreises. Budget ebenfalls überschritten.',
confidenceLevel: 0.52,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Falscher Standort', 'Budget überschritten'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T09:20:00Z',
updatedAt: '2025-05-11T09:20:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-005 · TechStart GmbH · OFFICE Zug/Zürich · 300700m² · max CHF 48/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-025',
propertyId: 'prop-012',
needId: 'need-005',
matchScore: 91,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 94, softFactorScore: 88, confidenceModifier: 0.97, dataQualityModifier: 0.93, totalScore: 91 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 100, contribution: 25, explanation: 'Zug Zentrum exakt bevorzugte Lage' },
{ criterion: 'Fläche', weight: 0.20, score: 92, contribution: 18.4, explanation: '550m² im Zielkorridor (300700m²)' },
{ criterion: 'Budget', weight: 0.20, score: 90, contribution: 18, explanation: 'CHF 42/m² klar unter Maximum CHF 48/m²' },
],
negativeFactors: [],
tradeoffs: [],
explainabilitySummary: 'Exzellenter Match. Zug Zentrum trifft exakt den Standortwunsch. Budget, Fläche und Ausbaugrad erfüllen alle Anforderungen.',
confidenceLevel: 0.92,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T10:00:00Z',
updatedAt: '2025-05-11T10:00:00Z',
},
{
id: 'match-026',
propertyId: 'prop-007',
needId: 'need-005',
matchScore: 83,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 86, softFactorScore: 80, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 83 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 88, contribution: 22, explanation: 'Zürich Oerlikon in bevorzugter Stadt Zürich' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 36/m² deutlich unter Maximum' },
],
negativeFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 72, contribution: 14.4, explanation: '720m² überschreitet Maximum von 700m² leicht' },
],
tradeoffs: [
{ criterion: 'Fläche', concern: 'Leicht über Flächenmaximum ggf. Untereinheit verhandelbar', severity: 'LOW' },
],
explainabilitySummary: 'Sehr guter Match in Zürich Oerlikon. Lage und Budget stimmen, Fläche minimal über Maximum.',
confidenceLevel: 0.89,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T10:05:00Z',
updatedAt: '2025-05-11T10:05:00Z',
},
{
id: 'match-027',
propertyId: 'prop-020',
needId: 'need-005',
matchScore: 74,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 72, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 74 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 100, contribution: 25, explanation: 'Zug exakte Präferenzstadt' },
{ criterion: 'Budget', weight: 0.20, score: 90, contribution: 18, explanation: 'CHF 44/m² unter Maximum CHF 48/m²' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 60, contribution: 6, explanation: 'Externe Quelle, Vertragsdauer fehlt' },
{ criterion: 'Fläche', weight: 0.20, score: 68, contribution: 13.6, explanation: '820m² deutlich über Maximum 700m²' },
],
tradeoffs: [
{ criterion: 'Fläche', concern: 'Fläche 17% über Maximum Untereinheit prüfen', severity: 'MEDIUM' },
],
explainabilitySummary: 'Guter Standort Zug, Budget akzeptabel. Fläche überschreitet Maximum aber Datenqualität eingeschränkt.',
confidenceLevel: 0.68,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Fläche zu gross', 'Externe Quelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T10:10:00Z',
updatedAt: '2025-05-11T10:10:00Z',
},
{
id: 'match-028',
propertyId: 'prop-001',
needId: 'need-005',
matchScore: 78,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 81, softFactorScore: 75, confidenceModifier: 0.97, dataQualityModifier: 0.92, totalScore: 78 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 88, contribution: 22, explanation: 'Zürich-West bevorzugte Stadt Zürich' },
{ criterion: 'Budget', weight: 0.20, score: 90, contribution: 18, explanation: 'CHF 38/m² unter Maximum CHF 48/m²' },
],
negativeFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 62, contribution: 12.4, explanation: '850m² überschreitet Maximum 700m² deutlich' },
],
tradeoffs: [
{ criterion: 'Fläche', concern: '850m² sind 21% über Maximum Untereinheit oder Kompromiss nötig', severity: 'MEDIUM', mitigation: '650m²-Untereinheit im selben Gebäude verfügbar' },
],
explainabilitySummary: 'Zürich-West passt gut. Fläche zu gross, aber Untereinheit verfügbar. Budget und Ausbaugrad sehr gut.',
confidenceLevel: 0.88,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Fläche über Maximum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T10:15:00Z',
updatedAt: '2025-05-11T10:15:00Z',
},
{
id: 'match-029',
propertyId: 'prop-026',
needId: 'need-005',
matchScore: 64,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 87, softFactorScore: 71, confidenceModifier: 0.52, dataQualityModifier: 0.34, totalScore: 64 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 100, contribution: 25, explanation: 'Zug exakter Standortwunsch' },
{ criterion: 'Budget', weight: 0.20, score: 90, contribution: 18, explanation: 'CHF 43/m² unter Maximum CHF 48/m²' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 30, contribution: 4.5, explanation: '52% Signalwahrscheinlichkeit Future-Signal' },
{ criterion: 'Datenqualität', weight: 0.10, score: 22, contribution: 2.2, explanation: 'Kritische Felder fehlen' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Expansion-Signal Fläche noch nicht auf dem Markt', severity: 'HIGH' },
],
explainabilitySummary: 'Perfekter Standort Zug, Budget stimmt. Als Future-Signal mit 52% Konfidenz Watchlist-Kandidat.',
confidenceLevel: 0.44,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Future-Signal', 'Daten unvollständig'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T10:20:00Z',
updatedAt: '2025-05-11T10:20:00Z',
},
{
id: 'match-030',
propertyId: 'prop-022',
needId: 'need-005',
matchScore: 73,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 82, softFactorScore: 71, confidenceModifier: 0.71, dataQualityModifier: 0.62, totalScore: 73 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 100, contribution: 20, explanation: 'CHF 28/m² deutlich unter Maximum' },
{ criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '700m² exakt an der Obergrenze' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'St. Gallen ist nicht Zug oder Zürich andere Kantone' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'St. Gallen liegt 80km von Zug entfernt nicht im Präferenzgebiet', severity: 'HIGH' },
],
explainabilitySummary: 'Budget hervorragend, aber Standort St. Gallen passt nicht zu Zug/Zürich. Nur als äusserste Alternative.',
confidenceLevel: 0.55,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort ausserhalb Präferenz'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T10:25:00Z',
updatedAt: '2025-05-11T10:25:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-006 · Lager & Spedition AG · LOGISTICS Winterthur · 12003000m² · max CHF 16/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-031',
propertyId: 'prop-009',
needId: 'need-006',
matchScore: 93,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 96, softFactorScore: 90, confidenceModifier: 0.98, dataQualityModifier: 0.95, totalScore: 93 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 100, contribution: 25, explanation: 'Winterthur Töss exakte Präferenzlage' },
{ criterion: 'Fläche', weight: 0.30, score: 92, contribution: 27.6, explanation: '1800m² im Zielkorridor (12003000m²)' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 13/m² unter Maximum CHF 16/m²' },
],
negativeFactors: [],
tradeoffs: [],
explainabilitySummary: 'Ausgezeichneter Match. Winterthur Töss trifft exakt den Standortwunsch. Alle Logistik-Kriterien erfüllt, hervorragende Datenqualität.',
confidenceLevel: 0.96,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T11:00:00Z',
updatedAt: '2025-05-11T11:00:00Z',
},
{
id: 'match-032',
propertyId: 'prop-002',
needId: 'need-006',
matchScore: 56,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 76, softFactorScore: 62, confidenceModifier: 0.99, dataQualityModifier: 0.96, totalScore: 56 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.30, score: 90, contribution: 27, explanation: '2400m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 14/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Basel liegt ausserhalb Winterthur-Region, andere Stadt' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Basel ist nicht im Präferenzgebiet Winterthur', severity: 'HIGH' },
],
explainabilitySummary: 'Sehr gute Logistikfläche in Basel, aber falscher Standort. Nur wenn Winterthur nicht verfügbar.',
confidenceLevel: 0.82,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Standort ausserhalb Region'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T11:05:00Z',
updatedAt: '2025-05-11T11:05:00Z',
},
{
id: 'match-033',
propertyId: 'prop-014',
needId: 'need-006',
matchScore: 52,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 72, softFactorScore: 58, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 52 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 92, contribution: 18.4, explanation: 'CHF 15/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Pratteln BL ist nicht Winterthur andere Stadt, anderer Kanton' },
{ criterion: 'Fläche', weight: 0.30, score: 68, contribution: 20.4, explanation: '3100m² überschreitet Maximum 3000m² leicht' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Pratteln liegt im Raum Basel, nicht im Raum Winterthur', severity: 'HIGH' },
],
explainabilitySummary: 'Falscher Standort für Winterthur-Bedarf. Nur als letzter Ausweg wenn Präferenz verhandelbar.',
confidenceLevel: 0.85,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Standort nicht kompatibel'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T11:10:00Z',
updatedAt: '2025-05-11T11:10:00Z',
},
{
id: 'match-034',
propertyId: 'prop-016',
needId: 'need-006',
matchScore: 88,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 92, softFactorScore: 87, confidenceModifier: 0.79, dataQualityModifier: 0.73, totalScore: 88 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.30, score: 88, contribution: 26.4, explanation: '2200m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.20, score: 85, contribution: 17, explanation: 'CHF 16/m² exakt im Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Muttenz liegt im Raum Basel, nicht Winterthur' },
{ criterion: 'Datenqualität', weight: 0.10, score: 58, contribution: 5.8, explanation: 'Hallenhöhe nicht verifiziert' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Muttenz BL ist nicht die Präferenz Winterthur', severity: 'HIGH' },
],
explainabilitySummary: 'Fläche und Budget stimmen, aber Muttenz ist 70km von Winterthur entfernt. Nicht kompatibel.',
confidenceLevel: 0.58,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort nicht kompatibel', 'Hallenhöhe unklar'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T11:15:00Z',
updatedAt: '2025-05-11T11:15:00Z',
},
{
id: 'match-035',
propertyId: 'prop-029',
needId: 'need-006',
matchScore: 43,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 66, softFactorScore: 53, confidenceModifier: 0.46, dataQualityModifier: 0.31, totalScore: 43 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 13/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Frenkendorf BL nicht im Präferenzgebiet Winterthur' },
{ criterion: 'Konfidenz', weight: 0.15, score: 28, contribution: 4.2, explanation: 'Future-Signal 50% Wahrscheinlichkeit' },
{ criterion: 'Fläche', weight: 0.30, score: 65, contribution: 19.5, explanation: '3500m² über Maximum 3000m²' },
],
tradeoffs: [
{ criterion: 'Kombination', concern: 'Falscher Standort + Future-Signal + zu grosse Fläche', severity: 'HIGH' },
],
explainabilitySummary: 'Drei kritische Faktoren: falscher Standort, zu grosse Fläche und Future-Signal. Keine Empfehlung.',
confidenceLevel: 0.36,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Standort', 'Zu grosse Fläche', 'Future-Signal'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T11:20:00Z',
updatedAt: '2025-05-11T11:20:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-007 · Creative Studios AG · MIXED Zürich/Bern · 8001500m² · max CHF 55/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-036',
propertyId: 'prop-013',
needId: 'need-007',
matchScore: 89,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 92, softFactorScore: 86, confidenceModifier: 0.96, dataQualityModifier: 0.92, totalScore: 89 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 95, contribution: 19, explanation: 'Zürich Altstetten bevorzugte Lage Zürich' },
{ criterion: 'Nutzungsart', weight: 0.20, score: 100, contribution: 20, explanation: 'MIXED exakt passend für Creative Studios' },
{ criterion: 'Fläche', weight: 0.20, score: 90, contribution: 18, explanation: '1300m² im Zielkorridor (8001500m²)' },
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 45/m² klar unter Maximum CHF 55/m²' },
],
negativeFactors: [],
tradeoffs: [],
explainabilitySummary: 'Hervorragender Match. Gemischte Fläche in Zürich Altstetten erfüllt alle Anforderungen für Kreativagentur.',
confidenceLevel: 0.90,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T12:00:00Z',
updatedAt: '2025-05-11T12:00:00Z',
},
{
id: 'match-037',
propertyId: 'prop-004',
needId: 'need-007',
matchScore: 76,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 90, softFactorScore: 74, confidenceModifier: 0.68, dataQualityModifier: 0.55, totalScore: 76 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 92, contribution: 18.4, explanation: 'Zürich Kreis 4 gute Kreativlage in Zürich' },
{ criterion: 'Nutzungsart', weight: 0.20, score: 100, contribution: 20, explanation: 'MIXED-Objekt passt exakt' },
{ criterion: 'Budget', weight: 0.15, score: 88, contribution: 13.2, explanation: 'CHF 52/m² unter Maximum CHF 55/m²' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 55, contribution: 5.5, explanation: 'Externe Quelle Daten unvollständig' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Vertragsdauer und Nebenkosten nicht bekannt', severity: 'MEDIUM' },
],
explainabilitySummary: 'Guter Match in Zürich. MIXED-Objekt passt, Budget stimmt. Datenverifikation nötig.',
confidenceLevel: 0.64,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Externe Quelle', 'Fehlende Felder'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T12:05:00Z',
updatedAt: '2025-05-11T12:05:00Z',
},
{
id: 'match-038',
propertyId: 'prop-007',
needId: 'need-007',
matchScore: 62,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 76, softFactorScore: 65, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 62 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 90, contribution: 18, explanation: 'Zürich Oerlikon bevorzugte Lage' },
{ criterion: 'Budget', weight: 0.15, score: 100, contribution: 15, explanation: 'CHF 36/m² deutlich unter Maximum' },
],
negativeFactors: [
{ criterion: 'Nutzungsart', weight: 0.20, score: 60, contribution: 12, explanation: 'OFFICE-Fläche, Bedarf ist MIXED Teileignung' },
{ criterion: 'Fläche', weight: 0.20, score: 60, contribution: 12, explanation: '720m² unter Minimum von 800m²' },
],
tradeoffs: [
{ criterion: 'Nutzungsart', concern: 'Bürofläche erlaubt ggf. keine gemischte Nutzung', severity: 'MEDIUM', mitigation: 'Nutzungsbewilligung prüfen' },
],
explainabilitySummary: 'Guter Standort und Budget, aber OFFICE-Fläche ist nicht ideal für MIXED-Bedarf und Fläche unter Minimum.',
confidenceLevel: 0.80,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Nutzungsart nicht optimal', 'Fläche unter Minimum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T12:10:00Z',
updatedAt: '2025-05-11T12:10:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-008 · Berner Produzenten GmbH · PRODUCTION Bern · 20004000m² · max CHF 14/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-039',
propertyId: 'prop-011',
needId: 'need-008',
matchScore: 92,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 95, softFactorScore: 89, confidenceModifier: 0.98, dataQualityModifier: 0.95, totalScore: 92 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 100, contribution: 20, explanation: 'Bern Brünnen exakte Präferenzlage' },
{ criterion: 'Fläche', weight: 0.30, score: 95, contribution: 28.5, explanation: '2800m² optimal im Zielkorridor (20004000m²)' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 12/m² unter Maximum CHF 14/m²' },
],
negativeFactors: [],
tradeoffs: [],
explainabilitySummary: 'Ausgezeichneter Match. Produktionshalle Bern Brünnen erfüllt alle Anforderungen. Verfügbar sofort, vollständige Daten.',
confidenceLevel: 0.94,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: [],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T13:00:00Z',
updatedAt: '2025-05-11T13:00:00Z',
},
{
id: 'match-040',
propertyId: 'prop-027',
needId: 'need-008',
matchScore: 65,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 72, confidenceModifier: 0.48, dataQualityModifier: 0.32, totalScore: 65 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.20, score: 82, contribution: 16.4, explanation: 'Münchenbuchsee Kanton Bern, nahe Präferenzlage' },
{ criterion: 'Fläche', weight: 0.30, score: 88, contribution: 26.4, explanation: '2200m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 12/m² unter Maximum' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 28, contribution: 4.2, explanation: 'Future-Signal 52% Wahrscheinlichkeit' },
{ criterion: 'Datenqualität', weight: 0.10, score: 20, contribution: 2, explanation: 'Kritische Felder fehlen' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Auszug noch unbestätigt Verfügbarkeit August 2026 unsicher', severity: 'HIGH', mitigation: 'Monitoring empfohlen, in 3 Monaten neu evaluieren' },
],
explainabilitySummary: 'Guter Standort im Kanton Bern, Fläche und Budget passen. Aber als Future-Signal mit mittlerer Konfidenz auf Watchlist.',
confidenceLevel: 0.40,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Future-Signal', 'Auszug unbestätigt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T13:05:00Z',
updatedAt: '2025-05-11T13:05:00Z',
},
{
id: 'match-041',
propertyId: 'prop-006',
needId: 'need-008',
matchScore: 44,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 67, softFactorScore: 51, confidenceModifier: 0.48, dataQualityModifier: 0.30, totalScore: 44 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.30, score: 85, contribution: 25.5, explanation: '3200m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.20, score: 60, contribution: 12, explanation: 'Reinach BL anderer Kanton, nicht Bern' },
{ criterion: 'Konfidenz', weight: 0.15, score: 25, contribution: 3.75, explanation: 'Future-Signal 48% Wahrscheinlichkeit' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Reinach BL liegt im Kanton BL, nicht im Kanton BE', severity: 'MEDIUM' },
{ criterion: 'Verfügbarkeit', concern: 'Future-Signal kein bestätigtes Objekt', severity: 'HIGH' },
],
explainabilitySummary: 'Fläche passt, aber Standort (Kanton BL statt BE) und Future-Signal sind Risikofaktoren. Schwacher Match.',
confidenceLevel: 0.36,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Anderer Kanton', 'Future-Signal'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T13:10:00Z',
updatedAt: '2025-05-11T13:10:00Z',
},
{
id: 'match-042',
propertyId: 'prop-019',
needId: 'need-008',
matchScore: 85,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 90, softFactorScore: 83, confidenceModifier: 0.77, dataQualityModifier: 0.71, totalScore: 85 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 13/m² unter Maximum CHF 14/m²' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.20, score: 35, contribution: 7, explanation: 'Basel ist nicht Bern andere Stadt, anderer Kanton' },
{ criterion: 'Fläche', weight: 0.30, score: 62, contribution: 18.6, explanation: '1900m² leicht unter Minimum 2000m²' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Basel BS liegt 100km von Bern entfernt', severity: 'HIGH' },
],
explainabilitySummary: 'Falscher Standort und Fläche leicht unter Minimum. Budget stimmt, reicht aber nicht aus. Schwacher Match.',
confidenceLevel: 0.54,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Falscher Standort', 'Fläche unter Minimum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T13:15:00Z',
updatedAt: '2025-05-11T13:15:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-009 · Geneva Commerce SA · RETAIL Genf · 150400m² · max CHF 120/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-043',
propertyId: 'prop-021',
needId: 'need-009',
matchScore: 83,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.SHORTLISTED,
scoreBreakdown: { hardMatchScore: 97, softFactorScore: 81, confidenceModifier: 0.70, dataQualityModifier: 0.59, totalScore: 83 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 100, contribution: 35, explanation: 'Genf Rue du Rhône exakter Standortwunsch' },
{ criterion: 'Budget', weight: 0.15, score: 92, contribution: 13.8, explanation: 'CHF 112/m² unter Maximum CHF 120/m²' },
{ criterion: 'Prestige', weight: 0.15, score: 94, contribution: 14.1, explanation: 'Prestige 94 erfüllt hohe Anforderung 88' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 59, contribution: 5.9, explanation: 'Externe Quelle Konditionen nicht bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Mietpreis und Vertragsdauer aus externer Quelle', severity: 'MEDIUM', mitigation: 'Direktkontakt mit Anbieter empfohlen' },
],
explainabilitySummary: 'Bester verfügbarer Match für Genf. Standort, Prestige und Budget stimmen. Datenverifikation ausstehend.',
confidenceLevel: 0.66,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Konditionen nicht bestätigt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T14:00:00Z',
updatedAt: '2025-05-11T14:00:00Z',
},
{
id: 'match-044',
propertyId: 'prop-010',
needId: 'need-009',
matchScore: 45,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 59, softFactorScore: 46, confidenceModifier: 0.99, dataQualityModifier: 0.96, totalScore: 45 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.15, score: 90, contribution: 13.5, explanation: '285m² im Zielkorridor' },
{ criterion: 'Budget', weight: 0.15, score: 100, contribution: 15, explanation: 'CHF 88/m² deutlich unter Maximum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.35, score: 35, contribution: 12.25, explanation: 'Zürich ist nicht Genf andere Stadt, 280km' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Zürich und Genf haben komplett verschiedene Kundenpotenziale', severity: 'HIGH' },
],
explainabilitySummary: 'Sehr gute Qualität in Zürich, aber falscher Standort für einen Genfer Retailer. Nicht geeignet.',
confidenceLevel: 0.86,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Falscher Standort'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T14:05:00Z',
updatedAt: '2025-05-11T14:05:00Z',
},
{
id: 'match-045',
propertyId: 'prop-017',
needId: 'need-009',
matchScore: 76,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 85, softFactorScore: 74, confidenceModifier: 0.73, dataQualityModifier: 0.64, totalScore: 76 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.15, score: 100, contribution: 15, explanation: 'CHF 95/m² unter Maximum CHF 120/m²' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.35, score: 35, contribution: 12.25, explanation: 'Zürich statt Genf komplett andere Stadt' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Zürich ist geografisch und kulturell nicht der gesuchte Genfer Markt', severity: 'HIGH' },
],
explainabilitySummary: 'Budget und Qualität ok, aber Zürich ist kein Ersatz für Genf. Standort nicht erfüllt.',
confidenceLevel: 0.62,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Falscher Standort'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T14:10:00Z',
updatedAt: '2025-05-11T14:10:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-010 · St.Galler Büros AG · OFFICE St.Gallen · 400800m² · max CHF 35/m²
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-046',
propertyId: 'prop-022',
needId: 'need-010',
matchScore: 92,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.APPROVED,
scoreBreakdown: { hardMatchScore: 95, softFactorScore: 91, confidenceModifier: 0.82, dataQualityModifier: 0.74, totalScore: 92 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.28, score: 100, contribution: 28, explanation: 'St. Gallen Centrum exakter Standortwunsch' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 28/m² deutlich unter Maximum CHF 35/m²' },
{ criterion: 'Fläche', weight: 0.22, score: 90, contribution: 19.8, explanation: '700m² im Zielkorridor (400800m²)' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 58, contribution: 5.8, explanation: 'Externe Quelle Ausbauqualität nicht bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Ausbauqualität aus externer Quelle nicht verifiziert', severity: 'MEDIUM', mitigation: 'Vor-Ort-Besichtigung empfohlen' },
],
explainabilitySummary: 'Guter Match in St. Gallen Centrum. Alle Hauptkriterien erfüllt. Datenverifikation ausstehend.',
confidenceLevel: 0.72,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Externe Quelle', 'Ausbauqualität unklar'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T15:00:00Z',
updatedAt: '2025-05-11T15:00:00Z',
},
{
id: 'match-047',
propertyId: 'prop-030',
needId: 'need-010',
matchScore: 58,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 81, softFactorScore: 65, confidenceModifier: 0.55, dataQualityModifier: 0.36, totalScore: 58 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.28, score: 100, contribution: 28, explanation: 'St. Gallen Riethüsli Präferenzstadt' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 27/m² deutlich unter Maximum' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 30, contribution: 4.5, explanation: 'Future-Signal 55% Wahrscheinlichkeit' },
{ criterion: 'Datenqualität', weight: 0.10, score: 22, contribution: 2.2, explanation: 'Kritische Felder fehlen' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Future-Signal kein bestätigter Auszug', severity: 'HIGH', mitigation: 'Auf Watchlist setzen' },
],
explainabilitySummary: 'Bester Standort St. Gallen, Budget sehr gut. Als Future-Signal mit mittlerer Konfidenz Watchlist-Kandidat.',
confidenceLevel: 0.44,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Future-Signal', 'Daten unvollständig'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T15:05:00Z',
updatedAt: '2025-05-11T15:05:00Z',
},
{
id: 'match-048',
propertyId: 'prop-007',
needId: 'need-010',
matchScore: 53,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 68, softFactorScore: 56, confidenceModifier: 0.98, dataQualityModifier: 0.94, totalScore: 53 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.22, score: 90, contribution: 19.8, explanation: '720m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.28, score: 35, contribution: 9.8, explanation: 'Zürich Oerlikon ist nicht St. Gallen andere Stadt, anderer Kanton' },
{ criterion: 'Budget', weight: 0.20, score: 72, contribution: 14.4, explanation: 'CHF 36/m² liegt 3% über Maximum CHF 35/m²' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Zürich ist nicht im Präferenzgebiet Ostschweiz', severity: 'HIGH' },
],
explainabilitySummary: 'Falscher Standort und Budget leicht über Maximum. Zürich ist keine Alternative für St. Gallen.',
confidenceLevel: 0.86,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Standort ausserhalb Ostschweiz', 'Budget knapp über Maximum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T15:10:00Z',
updatedAt: '2025-05-11T15:10:00Z',
},
{
id: 'match-049',
propertyId: 'prop-015',
needId: 'need-010',
matchScore: 46,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 60, softFactorScore: 48, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 46 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.22, score: 88, contribution: 19.36, explanation: '650m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.28, score: 35, contribution: 9.8, explanation: 'Luzern statt St. Gallen andere Stadt, anderer Kanton' },
{ criterion: 'Budget', weight: 0.20, score: 74, contribution: 14.8, explanation: 'CHF 38/m² liegt 8% über Maximum CHF 35/m²' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Luzern ist nicht Ostschweiz / St. Gallen Region', severity: 'HIGH' },
{ criterion: 'Budget', concern: 'CHF 3/m² über Maximum', severity: 'MEDIUM' },
],
explainabilitySummary: 'Fläche ok, aber Luzern entspricht nicht der St. Gallen-Region und Budget leicht überschritten.',
confidenceLevel: 0.58,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort nicht kompatibel', 'Budget leicht über Maximum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T15:15:00Z',
updatedAt: '2025-05-11T15:15:00Z',
},
{
id: 'match-050',
propertyId: 'prop-018',
needId: 'need-010',
matchScore: 38,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 52, softFactorScore: 40, confidenceModifier: 0.68, dataQualityModifier: 0.57, totalScore: 38 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 100, contribution: 20, explanation: 'CHF 31/m² deutlich unter Maximum CHF 35/m²' },
{ criterion: 'Fläche', weight: 0.22, score: 85, contribution: 18.7, explanation: '780m² nahe Zielobergrenze' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.28, score: 35, contribution: 9.8, explanation: 'Bern ist nicht St. Gallen weit ausserhalb Präferenzgebiet' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Bern liegt 180km von St. Gallen entfernt', severity: 'HIGH' },
],
explainabilitySummary: 'Budget sehr gut, aber Bern entspricht nicht dem Bedarf Ostschweiz. Kein sinnvoller Match.',
confidenceLevel: 0.54,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Falscher Standort'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T15:20:00Z',
updatedAt: '2025-05-11T15:20:00Z',
},
{
id: 'match-051',
propertyId: 'prop-008',
needId: 'need-010',
matchScore: 42,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 56, softFactorScore: 44, confidenceModifier: 0.97, dataQualityModifier: 0.93, totalScore: 42 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 32/m² unter Maximum CHF 35/m²' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.28, score: 35, contribution: 9.8, explanation: 'Basel ist nicht St. Gallen anderer Kanton' },
{ criterion: 'Fläche', weight: 0.22, score: 65, contribution: 14.3, explanation: '900m² überschreitet Maximum 800m² deutlich' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Basel liegt in Nordwestschweiz, nicht in Ostschweiz', severity: 'HIGH' },
],
explainabilitySummary: 'Gutes Portfolio-Objekt in Basel, aber falscher Standort und Fläche zu gross. Nicht geeignet.',
confidenceLevel: 0.84,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Falscher Standort', 'Fläche zu gross'],
organizationId: 'org-wincasa',
createdAt: '2025-05-11T15:25:00Z',
updatedAt: '2025-05-11T15:25:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// Cross-need additional matches
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-052',
propertyId: 'prop-020',
needId: 'need-003',
matchScore: 41,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 55, softFactorScore: 43, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 41 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 85, contribution: 17, explanation: '820m² nahe am Zielkorridor (500800m²)' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 35, contribution: 8.75, explanation: 'Zug ist nicht Basel anderer Kanton' },
{ criterion: 'Budget', weight: 0.20, score: 72, contribution: 14.4, explanation: 'CHF 44/m² liegt 10% über Maximum CHF 40/m²' },
],
tradeoffs: [
{ criterion: 'Kombination', concern: 'Falscher Standort und Budget überschritten', severity: 'HIGH' },
],
explainabilitySummary: 'Falscher Standort (Zug statt Basel) und Budget überschritten. Kein Match empfehlenswert.',
confidenceLevel: 0.58,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Standort nicht kompatibel', 'Budget über Maximum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-12T08:00:00Z',
updatedAt: '2025-05-12T08:00:00Z',
},
{
id: 'match-053',
propertyId: 'prop-023',
needId: 'need-005',
matchScore: 65,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 72, confidenceModifier: 0.54, dataQualityModifier: 0.36, totalScore: 65 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 88, contribution: 22, explanation: 'Zürich-Nord bevorzugte Stadt Zürich' },
{ criterion: 'Budget', weight: 0.20, score: 95, contribution: 19, explanation: 'CHF 38/m² unter Maximum CHF 48/m²' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 30, contribution: 4.5, explanation: 'Future-Signal 54% Wahrscheinlichkeit' },
{ criterion: 'Fläche', weight: 0.20, score: 70, contribution: 14, explanation: '850m² leicht über Maximum 700m²' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Future-Signal kein bestätigtes Objekt', severity: 'HIGH' },
],
explainabilitySummary: 'Gute Zürich-Lage und Budget passend. Als Future-Signal mit mittlerer Konfidenz und leicht zu grosser Fläche beobachten.',
confidenceLevel: 0.46,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Future-Signal', 'Fläche leicht über Maximum'],
organizationId: 'org-wincasa',
createdAt: '2025-05-12T08:05:00Z',
updatedAt: '2025-05-12T08:05:00Z',
},
{
id: 'match-054',
propertyId: 'prop-028',
needId: 'need-010',
matchScore: 37,
matchStrength: MatchStrength.WEAK,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 60, softFactorScore: 50, confidenceModifier: 0.53, dataQualityModifier: 0.35, totalScore: 37 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.22, score: 88, contribution: 19.36, explanation: '520m² im Zielkorridor' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.28, score: 35, contribution: 9.8, explanation: 'Genf ist nicht St. Gallen 600km Entfernung' },
{ criterion: 'Budget', weight: 0.20, score: 72, contribution: 14.4, explanation: 'CHF 36/m² über Maximum CHF 35/m² knapp' },
{ criterion: 'Konfidenz', weight: 0.15, score: 28, contribution: 4.2, explanation: 'Future-Signal' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Genf ist nicht kompatibel mit St. Gallen Bedarf', severity: 'HIGH' },
],
explainabilitySummary: 'Falscher Standort, Budget knapp über Maximum und Future-Signal. Keine Empfehlung.',
confidenceLevel: 0.38,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Falscher Standort', 'Future-Signal'],
organizationId: 'org-wincasa',
createdAt: '2025-05-12T08:10:00Z',
updatedAt: '2025-05-12T08:10:00Z',
},
{
id: 'match-055',
propertyId: 'prop-026',
needId: 'need-001',
matchScore: 56,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 79, softFactorScore: 63, confidenceModifier: 0.52, dataQualityModifier: 0.34, totalScore: 56 },
positiveFactors: [
{ criterion: 'Budget', weight: 0.15, score: 92, contribution: 13.8, explanation: 'CHF 43/m² unter Maximum CHF 45/m²' },
{ criterion: 'Fläche', weight: 0.20, score: 85, contribution: 17, explanation: '580m² im Zielkorridor (6001000m²), knapp unter Minimum' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.20, score: 60, contribution: 12, explanation: 'Zug liegt nicht in Zürich, aber gleiche Wirtschaftsregion' },
{ criterion: 'Konfidenz', weight: 0.15, score: 30, contribution: 4.5, explanation: 'Future-Signal 52% Wahrscheinlichkeit' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Zug ist nicht Zürich Pendeldistanz 30 Min.', severity: 'MEDIUM' },
{ criterion: 'Verfügbarkeit', concern: 'Future-Signal erst ab April 2026 möglicherweise verfügbar', severity: 'HIGH' },
],
explainabilitySummary: 'Budget und Fläche passen. Zug ist eine Alternativlage zur bevorzugten Lage Zürich. Future-Signal mit mittlerer Konfidenz.',
confidenceLevel: 0.42,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Standort ausserhalb Präferenz', 'Future-Signal'],
organizationId: 'org-wincasa',
createdAt: '2025-05-12T08:15:00Z',
updatedAt: '2025-05-12T08:15:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-001 · Innovatech AG · OFFICE Zürich-West — new external/maison matches
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-050',
propertyId: 'prop-031',
needId: 'need-001',
matchScore: 91,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 95, softFactorScore: 88, confidenceModifier: 0.72, dataQualityModifier: 0.64, totalScore: 91 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 100, contribution: 25, explanation: 'Zürich-West trifft bevorzugte Lage exakt' },
{ criterion: 'Fläche', weight: 0.20, score: 100, contribution: 20, explanation: '780m² im Zielkorridor (6001000m²)' },
{ criterion: 'Budget', weight: 0.15, score: 100, contribution: 15, explanation: 'CHF 35/m² liegt klar unter Maximum (CHF 45/m²)' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 55, contribution: 5.5, explanation: 'Externe Quelle Konditionen nicht endgültig bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Direktinserat aus Drittquelle Verfügbarkeit noch verifizieren', severity: 'LOW', mitigation: 'Direkte Anfrage beim Anbieter empfohlen' },
],
explainabilitySummary: 'Optimaler Match: Zürich-West, 780m², CHF 35/m² alle drei Hauptkriterien vollständig erfüllt. Einziger Vorbehalt ist die externe Datenquelle.',
confidenceLevel: 0.72,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Daten aus Drittquelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-15T08:00:00Z',
updatedAt: '2025-05-15T08:00:00Z',
},
{
id: 'match-051',
propertyId: 'prop-032',
needId: 'need-001',
matchScore: 84,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 82, confidenceModifier: 0.71, dataQualityModifier: 0.62, totalScore: 84 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 100, contribution: 20, explanation: '720m² im Zielkorridor (6001000m²)' },
{ criterion: 'Budget', weight: 0.15, score: 92, contribution: 13.8, explanation: 'CHF 40/m² unter Maximum (CHF 45/m²)' },
{ criterion: 'Standort', weight: 0.25, score: 88, contribution: 22, explanation: 'Kreis 5 direkt angrenzend an Zürich-West' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 52, contribution: 5.2, explanation: 'Externe Quelle Ausbaustandard nicht bestätigt' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Kreis 5 ist nicht Zürich-West, aber angrenzend und ähnliches Profil', severity: 'LOW' },
{ criterion: 'Datenqualität', concern: 'Ausbaustandard aus externer Quelle Besichtigung empfohlen', severity: 'MEDIUM' },
],
explainabilitySummary: 'Starker Match: Fläche und Budget erfüllt, Kreis 5 angrenzend an bevorzugte Lage. Maison Work-Plattform mit bewährten Objektqualitäten.',
confidenceLevel: 0.71,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Daten aus externer Quelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-15T08:05:00Z',
updatedAt: '2025-05-15T08:05:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-002 · Schweizer Logistik GmbH · LOGISTICS Basel — new silver external
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-056',
propertyId: 'prop-036',
needId: 'need-002',
matchScore: 86,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 92, softFactorScore: 84, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 86 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 98, contribution: 24.5, explanation: 'Basel Kleinhüningen exakt im Zielgebiet' },
{ criterion: 'Fläche', weight: 0.20, score: 100, contribution: 20, explanation: '2600m² im Zielkorridor (15004000m²)' },
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 15/m² unter Maximum (CHF 18/m²)' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 50, contribution: 5, explanation: 'Hallenhöhe und Konditionen nicht final bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Hallenhöhe aus Drittquelle kritisch für Logistiknutzung', severity: 'MEDIUM', mitigation: 'Hallenhöhe vor Vertragsabschluss verifizieren' },
],
explainabilitySummary: 'Starker Match: Basel Kleinhüningen exakt, 2600m², CHF 15/m². Hallenhöhe sollte vor Vertragsabschluss bestätigt werden.',
confidenceLevel: 0.70,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Hallenhöhe nicht bestätigt', 'Daten aus Drittquelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-15T08:10:00Z',
updatedAt: '2025-05-15T08:10:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// need-011 · Stadtladen Bern GmbH · RETAIL Bern Innenstadt — all new matches
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-052',
propertyId: 'prop-003',
needId: 'need-011',
matchScore: 91,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 96, softFactorScore: 90, confidenceModifier: 0.71, dataQualityModifier: 0.62, totalScore: 91 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 100, contribution: 35, explanation: 'Bern Innenstadt exakt bevorzugte Lage' },
{ criterion: 'Fläche', weight: 0.15, score: 100, contribution: 15, explanation: '320m² im Zielkorridor (200400m²)' },
{ criterion: 'Budget', weight: 0.15, score: 100, contribution: 15, explanation: 'CHF 95/m² deutlich unter Maximum (CHF 150/m²)' },
],
negativeFactors: [
{ criterion: 'Datenqualität', weight: 0.10, score: 55, contribution: 5.5, explanation: 'Externe Quelle Schaufensterfront nicht explizit bestätigt' },
],
tradeoffs: [
{ criterion: 'Datenqualität', concern: 'Must-have "Schaufensterfront" aus externer Quelle Besichtigung nötig', severity: 'LOW', mitigation: 'Vor-Ort-Besichtigung zur Bestätigung empfohlen' },
],
explainabilitySummary: 'Optimaler Match: Bern Innenstadt exakt, 320m², CHF 95/m² 37% unter Budget. Alle Hauptkriterien erfüllt.',
confidenceLevel: 0.71,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Schaufensterfront nicht bestätigt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-18T08:00:00Z',
updatedAt: '2025-05-18T08:00:00Z',
},
{
id: 'match-053',
propertyId: 'prop-033',
needId: 'need-011',
matchScore: 83,
matchStrength: MatchStrength.STRONG,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 82, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 83 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 100, contribution: 35, explanation: 'Marktgasse exakt in bevorzugter Innenstadtlage' },
{ criterion: 'Fläche', weight: 0.15, score: 100, contribution: 15, explanation: '260m² im Zielkorridor (200400m²)' },
{ criterion: 'Prestige', weight: 0.15, score: 88, contribution: 13.2, explanation: 'Hochfrequentierte Fussgängerzone Laufkundschaft garantiert' },
],
negativeFactors: [
{ criterion: 'Budget', weight: 0.15, score: 80, contribution: 12, explanation: 'CHF 120/m² nahe am Maximum (CHF 150/m²)' },
{ criterion: 'Datenqualität', weight: 0.10, score: 52, contribution: 5.2, explanation: 'Mietpreis nicht final bestätigt' },
],
tradeoffs: [
{ criterion: 'Budget', concern: 'CHF 120/m² lässt wenig Spielraum zum Maximum', severity: 'LOW' },
{ criterion: 'Datenqualität', concern: 'Mietpreis aus externer Quelle Verhandlung möglich', severity: 'MEDIUM', mitigation: 'Direktanfrage empfohlen' },
],
explainabilitySummary: 'Starker Match: Marktgasse/Innenstadt, 260m², CHF 120/m² im Budget. Maison Work-Plattform mit verifizierten Retailflächen.',
confidenceLevel: 0.70,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Mietpreis nicht final bestätigt'],
organizationId: 'org-wincasa',
createdAt: '2025-05-18T08:05:00Z',
updatedAt: '2025-05-18T08:05:00Z',
},
{
id: 'match-054',
propertyId: 'prop-034',
needId: 'need-011',
matchScore: 74,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 82, softFactorScore: 74, confidenceModifier: 0.68, dataQualityModifier: 0.56, totalScore: 74 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.15, score: 100, contribution: 15, explanation: '340m² im Zielkorridor (200400m²)' },
{ criterion: 'Budget', weight: 0.15, score: 94, contribution: 14.1, explanation: 'CHF 110/m² unter Maximum (CHF 150/m²)' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.35, score: 75, contribution: 26.25, explanation: 'Lorraine ist Bern, aber nicht Innenstadt weniger Laufkundschaft' },
{ criterion: 'Timing', weight: 0.10, score: 80, contribution: 8, explanation: 'Verfügbar ab 01.01.2026 leicht nach Wunschzeitraum' },
{ criterion: 'Datenqualität', weight: 0.10, score: 48, contribution: 4.8, explanation: 'Schaufensterfront nicht bestätigt kritisches Must-have' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Lorraine ist kein Fussgängerzonenviertel geringere Laufkundschaft als Innenstadt', severity: 'MEDIUM' },
{ criterion: 'Timing', concern: 'Ab Januar 2026 4 Monate nach gewünschtem Einzug', severity: 'LOW' },
],
explainabilitySummary: 'Moderater Match: Bern Lorraine, 340m², Budget ok. Abzug wegen Abweichung von Innenstadt-Lage und fehlender Schaufensterfront-Bestätigung.',
confidenceLevel: 0.68,
riskLevel: RiskLevel.MEDIUM,
uncertaintyIndicators: ['Schaufensterfront nicht bestätigt', 'Daten aus Drittquelle'],
organizationId: 'org-wincasa',
createdAt: '2025-05-18T08:10:00Z',
updatedAt: '2025-05-18T08:10:00Z',
},
{
id: 'match-055',
propertyId: 'prop-035',
needId: 'need-011',
matchScore: 66,
matchStrength: MatchStrength.MODERATE,
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 88, softFactorScore: 72, confidenceModifier: 0.55, dataQualityModifier: 0.36, totalScore: 66 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.35, score: 100, contribution: 35, explanation: 'Bern Altstadt Gerechtigkeitsgasse Premiumlage' },
{ criterion: 'Fläche', weight: 0.15, score: 100, contribution: 15, explanation: '290m² im Zielkorridor (200400m²)' },
],
negativeFactors: [
{ criterion: 'Konfidenz', weight: 0.15, score: 38, contribution: 5.7, explanation: 'Future-Signal mit 62% Wahrscheinlichkeit kein bestätigtes Objekt' },
{ criterion: 'Datenqualität', weight: 0.10, score: 25, contribution: 2.5, explanation: 'Mietpreis nur geschätzt, kein offizielles Inserat' },
],
tradeoffs: [
{ criterion: 'Verfügbarkeit', concern: 'Probabilistisches Signal kein bestätigtes Inserat', severity: 'HIGH', mitigation: 'Früher Erstkontakt mit Eigentümer kann Vorteil sichern' },
{ criterion: 'Timing', concern: 'Frühestens April 2026 verfügbar', severity: 'MEDIUM' },
],
explainabilitySummary: 'Premiumlage Gerechtigkeitsgasse, aber nur probabilistisches Signal. Nur weiterverfolgen, wenn Frühkontakt mit Eigentümer möglich.',
confidenceLevel: 0.55,
riskLevel: RiskLevel.HIGH,
uncertaintyIndicators: ['Probabilistisches Signal', 'Mietpreis geschätzt', 'Kein bestätigtes Inserat'],
organizationId: 'org-wincasa',
createdAt: '2025-05-18T08:15:00Z',
updatedAt: '2025-05-18T08:15:00Z',
},
// ───────────────────────────────────────────────────────────────────────────
// Schattenmarkt-Freigabe — verified contract signals from Verwaltung
// ───────────────────────────────────────────────────────────────────────────
{
id: 'match-060',
propertyId: 'prop-001',
needId: 'need-001',
matchScore: 78,
matchStrength: MatchStrength.MODERATE,
resultType: 'FUTURE_AVAILABILITY',
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 90, softFactorScore: 82, confidenceModifier: 0.92, dataQualityModifier: 0.92, totalScore: 78 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 100, contribution: 25, explanation: 'Zürich-West trifft bevorzugte Lage exakt' },
{ criterion: 'Fläche', weight: 0.20, score: 100, contribution: 20, explanation: '850m² im Zielkorridor (6001000m²)' },
{ criterion: 'Budget', weight: 0.15, score: 92, contribution: 13.8, explanation: 'CHF 38/m² liegt unter Maximum (CHF 45/m²)' },
{ criterion: 'Konfidenz', weight: 0.10, score: 100, contribution: 10, explanation: 'Vertragsende aus ERP bestätigt — keine Schätzung' },
],
negativeFactors: [
{ criterion: 'Verfügbarkeit', weight: 0.10, score: 55, contribution: 5.5, explanation: 'Objekt erst ab Oktober 2026 verfügbar — 5 Monate Vorlaufzeit' },
],
tradeoffs: [
{ criterion: 'Timing', concern: 'Einzug frühestens Oktober 2026 möglich', severity: 'LOW', mitigation: 'Frühzeitige Reservierungsanfrage sichert Priorität' },
],
explainabilitySummary: 'Idealer Match: Zürich-West exakt, 850m², im Budget. Vertragsende verifiziert — Verwaltung hat Objekt für Schattenmarkt freigegeben.',
confidenceLevel: 0.92,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Verfügbar ab Oktober 2026'],
organizationId: 'org-wincasa',
createdAt: '2026-05-20T08:00:00Z',
updatedAt: '2026-05-20T08:00:00Z',
},
{
id: 'match-061',
propertyId: 'prop-007',
needId: 'need-001',
matchScore: 71,
matchStrength: MatchStrength.MODERATE,
resultType: 'FUTURE_AVAILABILITY',
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 82, softFactorScore: 74, confidenceModifier: 0.92, dataQualityModifier: 0.94, totalScore: 71 },
positiveFactors: [
{ criterion: 'Fläche', weight: 0.20, score: 100, contribution: 20, explanation: '720m² im Zielkorridor (6001000m²)' },
{ criterion: 'Budget', weight: 0.15, score: 95, contribution: 14.25, explanation: 'CHF 36/m² unter Maximum (CHF 45/m²)' },
{ criterion: 'Konfidenz', weight: 0.10, score: 100, contribution: 10, explanation: 'Vertragsende und Breakout-Option aus ERP bestätigt' },
],
negativeFactors: [
{ criterion: 'Standort', weight: 0.25, score: 80, contribution: 20, explanation: 'Zürich Oerlikon — nicht Zürich-West, aber gute ÖV-Anbindung' },
{ criterion: 'Verfügbarkeit', weight: 0.10, score: 55, contribution: 5.5, explanation: 'Breakout-Option September 2026, Vertragsende November 2026' },
],
tradeoffs: [
{ criterion: 'Standort', concern: 'Oerlikon ist Zürich, aber nicht Zürich-West — andere Quartierscharakter', severity: 'MEDIUM' },
{ criterion: 'Timing', concern: 'Früheste Verfügbarkeit über Breakout-Option September 2026', severity: 'LOW', mitigation: 'Breakout-Option aktiv — frühzeitige Anfrage möglich' },
],
explainabilitySummary: 'Guter Match: Zürich Oerlikon, 720m², im Budget. Vertragsende verifiziert, Breakout-Option ab September 2026. Lage nicht Zürich-West.',
confidenceLevel: 0.92,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Lage Oerlikon statt Zürich-West', 'Verfügbar ab September 2026'],
organizationId: 'org-wincasa',
createdAt: '2026-05-20T08:05:00Z',
updatedAt: '2026-05-20T08:05:00Z',
},
{
id: 'match-062',
propertyId: 'prop-002',
needId: 'need-002',
matchScore: 84,
matchStrength: MatchStrength.STRONG,
resultType: 'FUTURE_AVAILABILITY',
status: MatchStatus.PENDING_REVIEW,
scoreBreakdown: { hardMatchScore: 94, softFactorScore: 86, confidenceModifier: 0.92, dataQualityModifier: 0.96, totalScore: 84 },
positiveFactors: [
{ criterion: 'Standort', weight: 0.25, score: 98, contribution: 24.5, explanation: 'Basel Kleinhüningen — exakt im Zielgebiet' },
{ criterion: 'Fläche', weight: 0.20, score: 100, contribution: 20, explanation: '2400m² im Zielkorridor (15004000m²)' },
{ criterion: 'Budget', weight: 0.15, score: 100, contribution: 15, explanation: 'CHF 14/m² weit unter Maximum (CHF 18/m²)' },
{ criterion: 'Konfidenz', weight: 0.10, score: 100, contribution: 10, explanation: 'Vertragsende aus ERP bestätigt — keine Schätzung' },
],
negativeFactors: [
{ criterion: 'Verfügbarkeit', weight: 0.10, score: 60, contribution: 6, explanation: 'Objekt erst ab September 2026 verfügbar' },
],
tradeoffs: [
{ criterion: 'Timing', concern: 'Verfügbar ab September 2026 — 4 Monate Vorlaufzeit', severity: 'LOW', mitigation: 'Frühe Reservierungsanfrage sichert Priorität vor Vertragsende' },
],
explainabilitySummary: 'Starker Match: Basel Kleinhüningen exakt, 2400m², CHF 14/m². Vertragsende September 2026 aus ERP bestätigt — höchste Verlässlichkeit.',
confidenceLevel: 0.92,
riskLevel: RiskLevel.LOW,
uncertaintyIndicators: ['Verfügbar ab September 2026'],
organizationId: 'org-wincasa',
createdAt: '2026-05-20T08:10:00Z',
updatedAt: '2026-05-20T08:10:00Z',
},
]