import { MatchStrength, MatchStatus, RiskLevel } from '../domain/enums'
import type { Match } from '../domain/match'

export const mockMatches: Match[] = [

  // ───────────────────────────────────────────────────────────────────────────
  // need-001 · Innovatech AG · OFFICE Zürich · 600–1000m² · 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 (600–1000m²)' },
      { 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: 64,
    matchStrength: MatchStrength.MODERATE,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 78, softFactorScore: 62, confidenceModifier: 0.68, dataQualityModifier: 0.55, totalScore: 64 },
    positiveFactors: [
      { criterion: 'Fläche', weight: 0.20, score: 88, contribution: 17.6, explanation: '1150m² liegt im erweiterten Korridor' },
      { criterion: 'Standort', weight: 0.20, score: 80, contribution: 16, explanation: 'Zürich Kreis 4 nahe bevorzugten Lagen' },
    ],
    negativeFactors: [
      { criterion: 'Datenqualität', weight: 0.10, score: 40, contribution: 4, explanation: 'Mehrere kritische Felder fehlen – Verlässlichkeit eingeschränkt' },
      { criterion: 'Mietpreis', weight: 0.15, score: 55, contribution: 8.25, explanation: 'CHF 52/m² deutlich über Budget' },
    ],
    tradeoffs: [
      { criterion: 'Datenqualität', concern: 'Externe Quelle – Mietpreis und Verfügbarkeit nicht bestätigt', severity: 'HIGH', mitigation: 'Direkte Anfrage beim Anbieter empfohlen' },
      { criterion: 'Budget', concern: 'Mietpreis 30% über Budget-Maximum', severity: 'HIGH' },
    ],
    explainabilitySummary: 'Moderater Match – Fläche und Lage passen, aber Mietpreis und Datenqualität sind kritische Vorbehalte.',
    confidenceLevel: 0.58,
    riskLevel: RiskLevel.MEDIUM,
    uncertaintyIndicators: ['Daten aus Drittquelle unvollständig', 'Mietpreis nicht verifiziert'],
    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 (600–1000m²)' },
      { 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: 51,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 65, softFactorScore: 53, confidenceModifier: 0.70, dataQualityModifier: 0.60, totalScore: 51 },
    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 liegt ausserhalb bevorzugter Lage Zürich' },
    ],
    tradeoffs: [
      { criterion: 'Standort', concern: 'Luzern ist nicht in Zürich – komplett andere Stadt und Kanton', severity: 'HIGH' },
    ],
    explainabilitySummary: 'Fläche und Budget passen, aber die Lage in Luzern ist nicht mit dem Bedarf Zürich kompatibel. Nur als letzte Option geeignet.',
    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 · 1500–4000m² · 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 (1500–4000m²)' },
      { 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 (1500–4000m²)' },
      { 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: 76,
    matchStrength: MatchStrength.MODERATE,
    status: MatchStatus.APPROVED,
    scoreBreakdown: { hardMatchScore: 90, softFactorScore: 74, confidenceModifier: 0.69, dataQualityModifier: 0.58, totalScore: 76 },
    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 · 500–800m² · 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: 44,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 58, softFactorScore: 46, confidenceModifier: 0.68, dataQualityModifier: 0.57, totalScore: 44 },
    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 ausserhalb Präferenz Basel' },
      { criterion: 'Datenqualität', weight: 0.10, score: 42, contribution: 4.2, explanation: 'Externe Quelle, Renovierungsstand unklar' },
    ],
    tradeoffs: [
      { criterion: 'Standort', concern: 'Bern ist nicht Basel – keine Nähe zur Pharma-Industrie-Achse', severity: 'HIGH' },
    ],
    explainabilitySummary: 'Schwacher Match aufgrund Standort-Mismatch. Bern ist nicht im Präferenzgebiet Basel. Budget und Fläche ok, aber Lage kritisch.',
    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 · 200–500m² · 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: 79,
    matchStrength: MatchStrength.MODERATE,
    status: MatchStatus.SHORTLISTED,
    scoreBreakdown: { hardMatchScore: 93, softFactorScore: 77, confidenceModifier: 0.71, dataQualityModifier: 0.61, totalScore: 79 },
    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: 44,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 58, softFactorScore: 46, confidenceModifier: 0.71, dataQualityModifier: 0.62, totalScore: 44 },
    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: 33,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.REJECTED,
    scoreBreakdown: { hardMatchScore: 47, softFactorScore: 35, confidenceModifier: 0.70, dataQualityModifier: 0.59, totalScore: 33 },
    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 · 300–700m² · 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 (300–700m²)' },
      { 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: 43,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 57, softFactorScore: 45, confidenceModifier: 0.69, dataQualityModifier: 0.58, totalScore: 43 },
    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 · 1200–3000m² · 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 (1200–3000m²)' },
      { 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: 50,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 64, softFactorScore: 50, confidenceModifier: 0.69, dataQualityModifier: 0.58, totalScore: 50 },
    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 · 800–1500m² · 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 (800–1500m²)' },
      { 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 · 2000–4000m² · 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 (2000–4000m²)' },
      { 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: 47,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 61, softFactorScore: 47, confidenceModifier: 0.68, dataQualityModifier: 0.56, totalScore: 47 },
    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 · 150–400m² · 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: 38,
    matchStrength: MatchStrength.WEAK,
    status: MatchStatus.PENDING_REVIEW,
    scoreBreakdown: { hardMatchScore: 52, softFactorScore: 40, confidenceModifier: 0.71, dataQualityModifier: 0.61, totalScore: 38 },
    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 · 400–800m² · max CHF 35/m²
  // ───────────────────────────────────────────────────────────────────────────

  {
    id: 'match-046',
    propertyId: 'prop-022',
    needId: 'need-010',
    matchScore: 79,
    matchStrength: MatchStrength.MODERATE,
    status: MatchStatus.APPROVED,
    scoreBreakdown: { hardMatchScore: 93, softFactorScore: 77, confidenceModifier: 0.69, dataQualityModifier: 0.58, totalScore: 79 },
    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 (400–800m²)' },
    ],
    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 (500–800m²)' },
    ],
    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 (600–1000m²), 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',
  },
]
