fix: remove EXPANSION fake properties and their matches from mock data
Deleted prop-005, prop-026, prop-028, prop-030 (resultType FUTURE_AVAILABILITY but representing demand-side Expansion signals) and the 6 associated matches (match-007, match-018, match-029, match-047, match-054, match-055). These fake properties bypassed the signalDirection filter in useUnifiedResults, causing EXPANSION signals to appear in the demand search feed. Future Availability in the demand feed now contains only genuine supply-side signals. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -123,34 +123,6 @@ export const mockMatches: Match[] = [
|
||||
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',
|
||||
@@ -492,34 +464,6 @@ export const mockMatches: Match[] = [
|
||||
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',
|
||||
@@ -797,34 +741,6 @@ export const mockMatches: Match[] = [
|
||||
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',
|
||||
@@ -1304,34 +1220,6 @@ export const mockMatches: Match[] = [
|
||||
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',
|
||||
@@ -1500,63 +1388,6 @@ export const mockMatches: Match[] = [
|
||||
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',
|
||||
},
|
||||
|
||||
// ───────────────────────────────────────────────────────────────────────────
|
||||
// need-001 · Innovatech AG · OFFICE Zürich-West — new external/maison matches
|
||||
// ───────────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -876,31 +876,6 @@ export const mockProperties: Property[] = [
|
||||
// FUTURE_AVAILABILITY (10)
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
{
|
||||
id: 'prop-005',
|
||||
title: 'Bürofläche Technoparkstrasse (Signal: Expansion)',
|
||||
assetType: AssetType.OFFICE,
|
||||
resultType: ResultType.FUTURE_AVAILABILITY,
|
||||
location: { city: 'Zürich', district: 'Technopark', canton: 'ZH', country: 'CH', coordinates: { lat: 47.3923, lng: 8.5142 } },
|
||||
address: { street: 'Technoparkstrasse', houseNumber: '1', postalCode: '8005', city: 'Zürich', country: 'CH' },
|
||||
areaSqm: 600,
|
||||
rentPricePerSqm: 504,
|
||||
availabilityDate: '2026-03-01',
|
||||
availabilityStatus: AvailabilityStatus.FUTURE_SIGNAL,
|
||||
sourceType: 'AI_SIGNAL',
|
||||
confidenceScore: 0.55,
|
||||
dataQuality: {
|
||||
score: 0.38,
|
||||
missingCriticalFields: ['totalRentMonthly', 'contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel', 'parkingSpots'],
|
||||
freshness: DataFreshness.FRESH,
|
||||
warnings: ['Probabilistisches Signal – kein bestätigtes Objekt', 'Daten nicht verifiziert'],
|
||||
},
|
||||
riskLevel: RiskLevel.HIGH,
|
||||
createdAt: '2025-05-01T07:00:00Z',
|
||||
updatedAt: '2025-05-10T07:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-006',
|
||||
title: 'Produktionsfläche Reinach (Signal: möglicher Auszug)',
|
||||
@@ -1001,31 +976,6 @@ export const mockProperties: Property[] = [
|
||||
updatedAt: '2025-05-10T08:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-026',
|
||||
title: 'Bürofläche Zug Industriestrasse (Signal: Expansion)',
|
||||
assetType: AssetType.OFFICE,
|
||||
resultType: ResultType.FUTURE_AVAILABILITY,
|
||||
location: { city: 'Zug', district: 'Industrie', canton: 'ZG', country: 'CH', coordinates: { lat: 47.1672, lng: 8.5198 } },
|
||||
address: { street: 'Industriestrasse', houseNumber: '60', postalCode: '6300', city: 'Zug', country: 'CH' },
|
||||
areaSqm: 580,
|
||||
rentPricePerSqm: 516,
|
||||
availabilityDate: '2026-04-01',
|
||||
availabilityStatus: AvailabilityStatus.FUTURE_SIGNAL,
|
||||
sourceType: 'AI_SIGNAL',
|
||||
confidenceScore: 0.52,
|
||||
dataQuality: {
|
||||
score: 0.34,
|
||||
missingCriticalFields: ['totalRentMonthly', 'contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel', 'softFactors'],
|
||||
freshness: DataFreshness.FRESH,
|
||||
warnings: ['Probabilistisches Signal – kein bestätigtes Objekt', 'Lage approximiert'],
|
||||
},
|
||||
riskLevel: RiskLevel.HIGH,
|
||||
createdAt: '2025-04-22T07:00:00Z',
|
||||
updatedAt: '2025-05-10T08:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-027',
|
||||
title: 'Produktionsfläche Münchenbuchsee BE (Signal: Auszug)',
|
||||
@@ -1051,31 +1001,6 @@ export const mockProperties: Property[] = [
|
||||
updatedAt: '2025-05-09T09:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-028',
|
||||
title: 'Bürofläche Genf La Praille (Signal: Expansion)',
|
||||
assetType: AssetType.OFFICE,
|
||||
resultType: ResultType.FUTURE_AVAILABILITY,
|
||||
location: { city: 'Genf', district: 'La Praille', canton: 'GE', country: 'CH', coordinates: { lat: 46.1912, lng: 6.1285 } },
|
||||
address: { street: 'Route de la Praille', houseNumber: '30', postalCode: '1227', city: 'Genf', country: 'CH' },
|
||||
areaSqm: 520,
|
||||
rentPricePerSqm: 432,
|
||||
availabilityDate: '2027-01-01',
|
||||
availabilityStatus: AvailabilityStatus.FUTURE_SIGNAL,
|
||||
sourceType: 'AI_SIGNAL',
|
||||
confidenceScore: 0.53,
|
||||
dataQuality: {
|
||||
score: 0.35,
|
||||
missingCriticalFields: ['totalRentMonthly', 'contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel'],
|
||||
freshness: DataFreshness.FRESH,
|
||||
warnings: ['Probabilistisches Signal – Standort approximiert', 'Mietzins geschätzt'],
|
||||
},
|
||||
riskLevel: RiskLevel.HIGH,
|
||||
createdAt: '2025-03-10T09:00:00Z',
|
||||
updatedAt: '2025-05-09T10:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-029',
|
||||
title: 'Logistiklager Frenkendorf BL (Signal: Auszug)',
|
||||
@@ -1285,28 +1210,4 @@ export const mockProperties: Property[] = [
|
||||
updatedAt: '2025-05-02T10:00:00Z',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'prop-030',
|
||||
title: 'Bürofläche St.Gallen Riethüsli (Signal: Expansion)',
|
||||
assetType: AssetType.OFFICE,
|
||||
resultType: ResultType.FUTURE_AVAILABILITY,
|
||||
location: { city: 'St. Gallen', district: 'Riethüsli', canton: 'SG', country: 'CH', coordinates: { lat: 47.4182, lng: 9.3888 } },
|
||||
address: { street: 'Riethüslistrasse', houseNumber: '40', postalCode: '9000', city: 'St. Gallen', country: 'CH' },
|
||||
areaSqm: 480,
|
||||
rentPricePerSqm: 324,
|
||||
availabilityDate: '2026-05-01',
|
||||
availabilityStatus: AvailabilityStatus.FUTURE_SIGNAL,
|
||||
sourceType: 'AI_SIGNAL',
|
||||
confidenceScore: 0.55,
|
||||
dataQuality: {
|
||||
score: 0.36,
|
||||
missingCriticalFields: ['totalRentMonthly', 'contractDurationMonths'],
|
||||
missingOptionalFields: ['ancillaryCosts', 'floorLevel', 'softFactors'],
|
||||
freshness: DataFreshness.FRESH,
|
||||
warnings: ['Probabilistisches Signal – kein bestätigtes Objekt', 'Lage und Preis approximiert'],
|
||||
},
|
||||
riskLevel: RiskLevel.HIGH,
|
||||
createdAt: '2025-04-26T07:00:00Z',
|
||||
updatedAt: '2025-05-10T08:00:00Z',
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user