Files
property-match/src/mock-data/needs.ts
T
Benjamin Sutter efc406ace9 feat: role-aware UX, market intelligence, score fix & layout scroll
- Role-based workspace access: Property Manager gets Supply+Demand,
  Operations restricted to Super Admin + Reviewer only
- Root redirect routes each persona to their first workspace
- Match Center: replaced 3-panel with auto-sorted flat list + drawer
- AI Search: unified form with dual-action (Jetzt suchen / Als Suchprofil speichern)
- CompareTray hidden on non-Demand routes; Vergleichen removed from Supply
- LocationIntelligencePanel: city KPIs, rent trends, soft factors, comparables
- NegotiationInsightsPanel: price positioning, active demand, selling arguments
- scoreCalculator: cap hardMatchScore and softFactorScore to max 100
- Layout: add display:flex to overflow:hidden wrappers so inner scroll works
  (MatchCenter drawer, MarketIntelligence, SourceMonitoring, SignalPipeline)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 00:58:10 +02:00

388 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { AssetType } from '../domain/enums'
import type { Need } from '../domain/need'
export const mockNeeds: Need[] = [
// --- need-001: Innovatech AG — OFFICE Zürich ---
{
id: 'need-001',
companyName: 'Innovatech AG',
contactName: 'Sandra Meier',
assetType: AssetType.OFFICE,
requiredArea: { min: 600, max: 1000 },
preferredLocations: ['Zürich', 'Zürich-West', 'Zürich Kreis 5'],
excludedLocations: [],
budgetRange: { maxPerSqm: 45, maxMonthlyTotal: 40000, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-08-01',
latestMoveIn: '2026-01-01',
contractDurationMonths: 60,
flexibleTiming: true,
},
mustCriteriaText: ['ÖV-Anbindung < 5 Min', 'Mindestfläche 600m²', 'Ausbaugrad modern'],
softFactors: {
minPrestige: 70,
minAccessibility: 80,
requireParking: false,
maxPublicTransportMinutes: 6,
},
weightingProfile: {
area: 0.20,
location: 0.20,
budget: 0.15,
timing: 0.15,
prestige: 0.10,
accessibility: 0.10,
expansionPotential: 0.05,
flexibility: 0.05,
},
confidenceInCriteria: 0.88,
extractedFromText: 'Wir suchen moderne Büroflächen in Zürich-West, ca. 700900m², Budget max CHF 42/m², Bezug Herbst 2025.',
organizationId: 'org-wincasa',
createdAt: '2025-04-15T10:00:00Z',
updatedAt: '2025-05-01T09:00:00Z',
},
// --- need-002: Schweizer Logistik GmbH — LOGISTICS Basel ---
{
id: 'need-002',
companyName: 'Schweizer Logistik GmbH',
contactName: 'Thomas Brun',
assetType: AssetType.LOGISTICS,
requiredArea: { min: 1500, max: 4000 },
preferredLocations: ['Basel', 'Muttenz', 'Pratteln', 'Reinach BL'],
budgetRange: { maxPerSqm: 18, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-09-01',
latestMoveIn: '2026-06-01',
contractDurationMonths: 36,
flexibleTiming: false,
},
mustCriteriaText: ['Autobahnanschluss < 5 Min', 'Rampe / Andienung', 'Hallenhöhe min 6m'],
softFactors: {
requireParking: true,
},
weightingProfile: {
area: 0.25,
location: 0.20,
budget: 0.20,
timing: 0.15,
prestige: 0.02,
accessibility: 0.10,
expansionPotential: 0.05,
flexibility: 0.03,
},
confidenceInCriteria: 0.94,
organizationId: 'org-wincasa',
createdAt: '2025-03-20T14:00:00Z',
updatedAt: '2025-04-10T11:00:00Z',
},
// --- need-003: Pharma Holding AG — OFFICE Basel ---
{
id: 'need-003',
companyName: 'Pharma Holding AG',
contactName: 'Ursula Schmid',
assetType: AssetType.OFFICE,
requiredArea: { min: 500, max: 800 },
preferredLocations: ['Basel', 'Allschwil', 'Binningen', 'Dreispitz'],
excludedLocations: [],
budgetRange: { maxPerSqm: 40, maxMonthlyTotal: 32000, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-10-01',
latestMoveIn: '2026-04-01',
contractDurationMonths: 48,
flexibleTiming: true,
},
mustCriteriaText: ['Repräsentative Lage', 'Ausbaugrad gehoben', 'Konferenzräume vorhanden'],
softFactors: {
minPrestige: 75,
minAccessibility: 75,
requireParking: true,
maxPublicTransportMinutes: 10,
},
weightingProfile: {
area: 0.20,
location: 0.25,
budget: 0.20,
timing: 0.10,
prestige: 0.12,
accessibility: 0.08,
expansionPotential: 0.03,
flexibility: 0.02,
},
confidenceInCriteria: 0.91,
extractedFromText: 'Suche repräsentative Büroflächen im Raum Basel/Allschwil, 500800m², max. CHF 38/m², Bezug Q4 2025.',
organizationId: 'org-wincasa',
createdAt: '2025-04-20T09:00:00Z',
updatedAt: '2025-05-05T14:00:00Z',
},
// --- need-004: Retailer Zürich AG — RETAIL Zürich ---
{
id: 'need-004',
companyName: 'Retailer Zürich AG',
contactName: 'Marco Colombo',
assetType: AssetType.RETAIL,
requiredArea: { min: 200, max: 500 },
preferredLocations: ['Zürich Innenstadt', 'Zürich Bahnhofstrasse', 'Zürich Niederdorf', 'Zürich City'],
excludedLocations: [],
budgetRange: { maxPerSqm: 100, maxMonthlyTotal: 50000, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-09-01',
latestMoveIn: '2026-03-01',
contractDurationMonths: 60,
flexibleTiming: false,
},
mustCriteriaText: ['Laufkundschaft', 'Schaufensterfront', 'Erdgeschoss', 'Hohe Passantenfrequenz'],
softFactors: {
minPrestige: 85,
requireParking: false,
maxPublicTransportMinutes: 5,
},
weightingProfile: {
area: 0.15,
location: 0.35,
budget: 0.15,
timing: 0.10,
prestige: 0.15,
accessibility: 0.05,
expansionPotential: 0.02,
flexibility: 0.03,
},
confidenceInCriteria: 0.96,
extractedFromText: 'Exklusive Retailfläche in Zürich Innenstadt gesucht, 250450m², Schaufenster, max. CHF 95/m².',
organizationId: 'org-wincasa',
createdAt: '2025-03-10T11:00:00Z',
updatedAt: '2025-04-22T08:00:00Z',
},
// --- need-005: TechStart GmbH — OFFICE Zug/Zürich ---
{
id: 'need-005',
companyName: 'TechStart GmbH',
contactName: 'Florian Keller',
assetType: AssetType.OFFICE,
requiredArea: { min: 300, max: 700 },
preferredLocations: ['Zug', 'Zürich', 'Baar', 'Steinhausen'],
excludedLocations: [],
budgetRange: { maxPerSqm: 48, maxMonthlyTotal: 33000, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-10-01',
latestMoveIn: '2026-06-01',
contractDurationMonths: 36,
flexibleTiming: true,
},
mustCriteriaText: ['Moderner Ausbau', 'Schnelles Internet', 'Fahrradabstellplätze'],
softFactors: {
minPrestige: 65,
minAccessibility: 75,
requireParking: false,
maxPublicTransportMinutes: 10,
},
weightingProfile: {
area: 0.20,
location: 0.25,
budget: 0.20,
timing: 0.15,
prestige: 0.05,
accessibility: 0.10,
expansionPotential: 0.03,
flexibility: 0.02,
},
confidenceInCriteria: 0.85,
extractedFromText: 'Junges Tech-Unternehmen sucht Büro in Zug oder Zürich, 350600m², moderner Ausbau, max. CHF 45/m².',
organizationId: 'org-wincasa',
createdAt: '2025-04-28T13:00:00Z',
updatedAt: '2025-05-08T10:00:00Z',
},
// --- need-006: Lager & Spedition AG — LOGISTICS Winterthur ---
{
id: 'need-006',
companyName: 'Lager & Spedition AG',
contactName: 'Beat Zimmermann',
assetType: AssetType.LOGISTICS,
requiredArea: { min: 1200, max: 3000 },
preferredLocations: ['Winterthur', 'Wülflingen', 'Oberwinterthur', 'Töss'],
budgetRange: { maxPerSqm: 16, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-11-01',
latestMoveIn: '2026-05-01',
contractDurationMonths: 60,
flexibleTiming: false,
},
mustCriteriaText: ['Autobahn A1 < 10 Min', 'Ebenerdig', 'Lkw-Zufahrt', 'Sprinkleranlage'],
softFactors: {
requireParking: true,
},
weightingProfile: {
area: 0.30,
location: 0.25,
budget: 0.20,
timing: 0.10,
prestige: 0.01,
accessibility: 0.10,
expansionPotential: 0.02,
flexibility: 0.02,
},
confidenceInCriteria: 0.92,
organizationId: 'org-wincasa',
createdAt: '2025-05-02T08:30:00Z',
updatedAt: '2025-05-09T16:00:00Z',
},
// --- need-007: Creative Studios AG — MIXED Zürich/Bern ---
{
id: 'need-007',
companyName: 'Creative Studios AG',
contactName: 'Nora Hauser',
assetType: AssetType.MIXED,
requiredArea: { min: 800, max: 1500 },
preferredLocations: ['Zürich', 'Zürich-West', 'Zürich Altstetten', 'Bern'],
excludedLocations: [],
budgetRange: { maxPerSqm: 55, maxMonthlyTotal: 75000, currency: 'CHF' },
timing: {
earliestMoveIn: '2026-01-01',
latestMoveIn: '2026-07-01',
contractDurationMonths: 48,
flexibleTiming: true,
},
mustCriteriaText: ['Gemischte Nutzung möglich', 'Hohe Decken', 'Kreative Atmosphäre'],
softFactors: {
minPrestige: 55,
minAccessibility: 70,
requireParking: false,
maxPublicTransportMinutes: 12,
},
weightingProfile: {
area: 0.20,
location: 0.20,
budget: 0.15,
timing: 0.15,
prestige: 0.10,
accessibility: 0.10,
expansionPotential: 0.05,
flexibility: 0.05,
},
confidenceInCriteria: 0.82,
extractedFromText: 'Kreativagentur sucht Gewerbe-/Bürofläche in Zürich oder Bern, 9001400m², gemischte Nutzung, Budget max. CHF 50/m².',
organizationId: 'org-wincasa',
createdAt: '2025-04-05T10:00:00Z',
updatedAt: '2025-05-03T11:00:00Z',
},
// --- need-008: Berner Produzenten GmbH — PRODUCTION Bern ---
{
id: 'need-008',
companyName: 'Berner Produzenten GmbH',
contactName: 'Hans Lüthi',
assetType: AssetType.PRODUCTION,
requiredArea: { min: 2000, max: 4000 },
preferredLocations: ['Bern', 'Brünnen', 'Münchenbuchsee', 'Bern West'],
budgetRange: { maxPerSqm: 14, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-12-01',
latestMoveIn: '2026-09-01',
contractDurationMonths: 120,
flexibleTiming: false,
},
mustCriteriaText: ['Kranbahn möglich', 'Hallenhöhe min 8m', 'Drehstrom 400V', 'Lkw-Andienung'],
softFactors: {
requireParking: true,
},
weightingProfile: {
area: 0.30,
location: 0.20,
budget: 0.20,
timing: 0.10,
prestige: 0.01,
accessibility: 0.10,
expansionPotential: 0.07,
flexibility: 0.02,
},
confidenceInCriteria: 0.95,
organizationId: 'org-wincasa',
createdAt: '2025-03-15T09:00:00Z',
updatedAt: '2025-04-20T12:00:00Z',
},
// --- need-009: Geneva Commerce SA — RETAIL Genf ---
{
id: 'need-009',
companyName: 'Geneva Commerce SA',
contactName: 'Pierre Dupont',
assetType: AssetType.RETAIL,
requiredArea: { min: 150, max: 400 },
preferredLocations: ['Genf', 'Genf Rive', 'Genf Centre'],
excludedLocations: [],
budgetRange: { maxPerSqm: 120, maxMonthlyTotal: 48000, currency: 'CHF' },
timing: {
earliestMoveIn: '2026-01-01',
latestMoveIn: '2026-06-01',
contractDurationMonths: 60,
flexibleTiming: false,
},
mustCriteriaText: ['Centre-ville Genève', 'Vitrine', 'Rez-de-chaussée', 'Passage piétonnier'],
softFactors: {
minPrestige: 88,
requireParking: false,
maxPublicTransportMinutes: 5,
},
weightingProfile: {
area: 0.15,
location: 0.35,
budget: 0.15,
timing: 0.10,
prestige: 0.15,
accessibility: 0.05,
expansionPotential: 0.02,
flexibility: 0.03,
},
confidenceInCriteria: 0.93,
extractedFromText: 'Recherche surface commerciale en centre-ville de Genève, 200350m², vitrine obligatoire, budget max CHF 115/m².',
organizationId: 'org-wincasa',
createdAt: '2025-02-28T15:00:00Z',
updatedAt: '2025-04-18T09:00:00Z',
},
// --- need-010: St.Galler Büros AG — OFFICE St.Gallen ---
{
id: 'need-010',
companyName: 'St.Galler Büros AG',
contactName: 'Brigitte Fässler',
assetType: AssetType.OFFICE,
requiredArea: { min: 400, max: 800 },
preferredLocations: ['St. Gallen', 'St. Gallen Centrum', 'Riethüsli', 'Ostschweiz'],
excludedLocations: [],
budgetRange: { maxPerSqm: 35, maxMonthlyTotal: 28000, currency: 'CHF' },
timing: {
earliestMoveIn: '2025-11-01',
latestMoveIn: '2026-04-01',
contractDurationMonths: 48,
flexibleTiming: true,
},
mustCriteriaText: ['Stadtzentrumsnähe', 'ÖV < 8 Min', 'Helligkeit und Ausbauqualität'],
softFactors: {
minPrestige: 60,
minAccessibility: 70,
requireParking: true,
maxPublicTransportMinutes: 8,
},
weightingProfile: {
area: 0.22,
location: 0.28,
budget: 0.20,
timing: 0.12,
prestige: 0.08,
accessibility: 0.06,
expansionPotential: 0.02,
flexibility: 0.02,
},
confidenceInCriteria: 0.87,
extractedFromText: 'Büroflächen in St. Gallen oder Umgebung gesucht, 450750m², max. CHF 32/m², Bezug Anfang 2026.',
organizationId: 'org-wincasa',
createdAt: '2025-04-10T08:00:00Z',
updatedAt: '2025-05-06T13:00:00Z',
},
]