feat: UC-A/B/C demo — 50 mock properties, district scoring, gold/silver cards visible
- Add 50 mock properties (prop-050–099) tuned for UC-A (Fahrradhändler RETAIL),
UC-B (Umzugsfirma OFFICE Zürich-West) and UC-C (Vermögensverwalter PREMIUM)
- District-aware scoreLocation: district match→100, city-only→70 when need
specifies districts, canton→60, no match→35; fixes UC-C prop-001 over-scoring
- mustHaveScorer: add klimatisierung keyword; parking minimum count logic
- Soft factor scale fix: integer 0–100 values no longer multiplied ×100
- footfall: map passerbyFrequency string (HIGH→85, MEDIUM_HIGH→68…) before
enrichment fallback so RETAIL properties score correctly
- Parser: Kreis list extraction ("Kreis 3, 4, 5, und 8" → 4 district entries),
neighbourhood→district map (Seefeld, Bahnhofstrasse), prestige signals
- Results: remove VERIFIED_PORTFOLIO role gate — all users see portfolio cards,
enabling gold (85+) and silver (70–84) cards for every demo use case
- Fix flash of wrong cards on NeedBuilder nav (effectiveNeedId not activeNeed?.id)
- needs.ts: UC-A preferredLocations now includes Kreis 3/4/5/8 entries
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -368,4 +368,108 @@ export const mockNeeds: Need[] = [
|
||||
createdAt: '2025-04-10T08:00:00Z',
|
||||
updatedAt: '2025-05-06T13:00:00Z',
|
||||
},
|
||||
|
||||
// --- need-uc-a: Renato's Fahrradhändler — Use Case A ---
|
||||
{
|
||||
id: 'need-uc-a',
|
||||
companyName: 'Velo City GmbH',
|
||||
contactName: 'Renato Marchetti',
|
||||
assetType: AssetType.RETAIL,
|
||||
requiredArea: { min: 120, max: 160 },
|
||||
preferredLocations: ['Zürich Kreis 3', 'Zürich Kreis 4', 'Zürich Kreis 5', 'Zürich Kreis 8', 'Wädenswil', 'Thalwil', 'Uster'],
|
||||
budgetRange: { maxPerSqm: 620, currency: 'CHF' },
|
||||
timing: {
|
||||
earliestMoveIn: '2026-10-01',
|
||||
latestMoveIn: '2027-03-31',
|
||||
contractDurationMonths: 60,
|
||||
flexibleTiming: true,
|
||||
},
|
||||
mustCriteriaText: ['Schaufenster', 'Erdgeschoss', 'Werkstatt möglich'],
|
||||
requireGroundFloor: true,
|
||||
requiredFitOut: 'FULL',
|
||||
notes: 'Wunsch: 3.5-Zi-Wohnung im Haus oder in der Nähe, max. CHF 2\'200/Mt. inkl. NK',
|
||||
softFactors: {
|
||||
requireHighVisibility: true,
|
||||
},
|
||||
weightingProfile: {
|
||||
area: 0.13, location: 0.20, budget: 0.14, timing: 0.12,
|
||||
prestige: 0.04, accessibility: 0.07, expansionPotential: 0.02, flexibility: 0.04,
|
||||
visibility: 0.12, footfall: 0.12, talentAccess: 0.01, esg: 0.01, taxEnvironment: 0.00,
|
||||
},
|
||||
confidenceInCriteria: 0.90,
|
||||
extractedFromText: 'Fahrradhändler sucht Verkaufslokal 120–150m² EG mit Schaufenster und Werkstatt in Zürich Kreis 3/4/5/8 oder Wädenswil/Thalwil/Uster, bezugsfertig Q4/2026 oder Q1/2027.',
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2025-05-20T10:00:00Z',
|
||||
updatedAt: '2025-05-22T10:00:00Z',
|
||||
},
|
||||
|
||||
// --- need-uc-b: Renato's Umzugsfirma — Use Case B ---
|
||||
{
|
||||
id: 'need-uc-b',
|
||||
companyName: 'Alp Transit Umzüge GmbH',
|
||||
contactName: 'Renato Marchetti',
|
||||
assetType: AssetType.OFFICE,
|
||||
requiredArea: { min: 140, max: 200 },
|
||||
preferredLocations: ['Zürich', 'Zürich-West', 'Zürich Kreis 5', 'Zürich Kreis 4'],
|
||||
budgetRange: { maxPerSqm: 300, currency: 'CHF' },
|
||||
timing: {
|
||||
earliestMoveIn: '2025-10-01',
|
||||
latestMoveIn: '2026-06-01',
|
||||
contractDurationMonths: 84,
|
||||
flexibleTiming: false,
|
||||
},
|
||||
mustCriteriaText: ['3-5 Parkplätze', 'Verpflegungsmöglichkeit', 'Startup-Umfeld', 'Erweiterungsoption vorhanden', 'Repräsentativer Charakter'],
|
||||
requiredParkingMin: 3,
|
||||
requiredFitOut: 'BASIC',
|
||||
minContractDurationMonths: 84,
|
||||
softFactors: {
|
||||
requireParking: true,
|
||||
},
|
||||
weightingProfile: {
|
||||
area: 0.14, location: 0.17, budget: 0.22, timing: 0.11,
|
||||
prestige: 0.04, accessibility: 0.08, expansionPotential: 0.07, flexibility: 0.07,
|
||||
visibility: 0.02, footfall: 0.01, talentAccess: 0.07, esg: 0.02, taxEnvironment: 0.01,
|
||||
},
|
||||
confidenceInCriteria: 0.88,
|
||||
extractedFromText: 'Büro 140–200m², Zürich-West, max. CHF 300/m²/a, einfacher Ausbau, 3-5 Parkplätze, 7 Jahre Mietvertrag, Startup-Umfeld, Erweiterungsoption.',
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2025-05-22T10:00:00Z',
|
||||
updatedAt: '2025-05-22T10:00:00Z',
|
||||
},
|
||||
|
||||
// --- need-uc-c: Renato's Vermögensverwalter — Use Case C ---
|
||||
{
|
||||
id: 'need-uc-c',
|
||||
companyName: 'Wealth Advisory Partners AG',
|
||||
contactName: 'Renato Marchetti',
|
||||
assetType: AssetType.OFFICE,
|
||||
requiredArea: { min: 450, max: 560 },
|
||||
preferredLocations: ['Zürich', 'Zürich Kreis 1', 'Zürich Seefeld', 'Zürich Innenstadt'],
|
||||
budgetRange: { maxPerSqm: 900, currency: 'CHF' },
|
||||
timing: {
|
||||
earliestMoveIn: '2026-01-01',
|
||||
latestMoveIn: '2027-06-01',
|
||||
contractDurationMonths: 120,
|
||||
flexibleTiming: false,
|
||||
},
|
||||
mustCriteriaText: ['Klimaanlage', 'Tageslicht', 'Prestige-Adresse', 'Repräsentativer Eingang', '2×5-Jahre-Mietoption'],
|
||||
notes: 'Mietvertrag min. 10 Jahre + 2×5 Jahre echte Optionen gefordert',
|
||||
requireAirConditioning: true,
|
||||
requiredFitOut: 'PREMIUM',
|
||||
minContractDurationMonths: 120,
|
||||
softFactors: {
|
||||
minPrestige: 85,
|
||||
minAccessibility: 80,
|
||||
},
|
||||
weightingProfile: {
|
||||
area: 0.10, location: 0.25, budget: 0.09, timing: 0.08,
|
||||
prestige: 0.20, accessibility: 0.10, expansionPotential: 0.02, flexibility: 0.02,
|
||||
visibility: 0.04, footfall: 0.01, talentAccess: 0.06, esg: 0.03, taxEnvironment: 0.05,
|
||||
},
|
||||
confidenceInCriteria: 0.95,
|
||||
extractedFromText: 'Vermögensverwalter sucht repräsentative Bürofläche 500m² in Zürich Kreis 1 oder Seefeld/Bellevue, Klimaanlage, PREMIUM-Ausbau, 10-Jahres-Mietvertrag.',
|
||||
organizationId: 'org-wincasa',
|
||||
createdAt: '2025-05-20T10:00:00Z',
|
||||
updatedAt: '2025-05-22T10:00:00Z',
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user