feat: Reale Jahresbelastung, must-have fixes, fitOut data coverage
Reale Jahresbelastung (Change 6): - FitOutCostPanel zeigt Jahresmiete + amortisierte Ausbaukosten für alle fitOut-Werte - FULL/PREMIUM: Ausbau CHF 0 (bezugsfertig), SHELL/BASIC: CRB/BKP-Richtwerte amortisiert über 5 J. - Match-Card-Chip zeigt geschätzte Investition (orange wenn >100k) - FitOutInvestment-Typ + calcFitOutInvestment() in fitOutUtils.ts - BackendAIService + MockAIService mit generateFitOutAdvice (IAIService-Interface) Must-have Kriterien (Nicht prüfbar Fix): - ÖV-Anbindung: Minutengrenze aus Freitext extrahiert, gegen publicTransportMinutes geprüft - Mindestfläche: m²-Wert aus Freitext extrahiert, gegen areaSqm geprüft - Ausbaugrad: neues Keyword-Rule für FULL/PREMIUM fitOut-Datenpflege: - fitOut-Werte zu 32 fehlenden Properties ergänzt (Logistik=SHELL, Standard=BASIC, Modern=FULL) - MAB-Werte (200/150/250 CHF/m²) zu 3 BASIC-Objekten hinzugefügt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -83,6 +83,9 @@ export default function NewListing() {
|
||||
fitOut={form.fitOut} onFitOutChange={form.setFitOut}
|
||||
parking={form.parking} onParkingChange={form.setParking}
|
||||
ceilingHeight={form.ceilingHeight} onCeilingHeightChange={form.setCeilingHeight}
|
||||
mieterausbaubeitrag={form.mieterausbaubeitrag} onMieterausbaubeitragChange={form.setMieterausbaubeitrag}
|
||||
isFlexible={form.isFlexible} onIsFlexibleChange={form.setIsFlexible}
|
||||
minLettableSqm={form.minLettableSqm} onMinLettableSqmChange={form.setMinLettableSqm}
|
||||
/>
|
||||
|
||||
<ImageUrlSection
|
||||
|
||||
@@ -19,11 +19,15 @@ export function buildCreatePropertyInput(fields: {
|
||||
ceilingHeight: string
|
||||
images: string[]
|
||||
floorPlanUrl: string
|
||||
mieterausbaubeitrag?: string
|
||||
isFlexible?: boolean
|
||||
minLettableSqm?: string
|
||||
}): CreatePropertyInput {
|
||||
const {
|
||||
assetType, street, houseNumber, postalCode, city,
|
||||
areaSqm, rentPerSqm, availableFrom, description,
|
||||
softLevels, floor, fitOut, parking, ceilingHeight, images, floorPlanUrl,
|
||||
mieterausbaubeitrag, isFlexible, minLettableSqm,
|
||||
} = fields
|
||||
|
||||
const sf = {
|
||||
@@ -41,6 +45,7 @@ export function buildCreatePropertyInput(fields: {
|
||||
const hf = {
|
||||
floor: floor ? parseInt(floor) : undefined,
|
||||
fitOut: (fitOut || undefined) as 'SHELL' | 'BASIC' | 'FULL' | 'PREMIUM' | undefined,
|
||||
mieterausbaubeitragPerSqm: mieterausbaubeitrag ? parseInt(mieterausbaubeitrag) : undefined,
|
||||
parking: parking ? parseInt(parking) : undefined,
|
||||
ceilingHeightM: ceilingHeight ? parseFloat(ceilingHeight) : undefined,
|
||||
}
|
||||
@@ -76,5 +81,15 @@ export function buildCreatePropertyInput(fields: {
|
||||
warnings: [],
|
||||
},
|
||||
status: 'ACTIVE',
|
||||
units: isFlexible ? [{
|
||||
id: `unit-listing-${Date.now()}`,
|
||||
propertyId: '',
|
||||
floorLevel: hf.floor ?? 0,
|
||||
areaSqm,
|
||||
available: true,
|
||||
rentPricePerSqm: rentPerSqm,
|
||||
isFlexible: true,
|
||||
minLettableSqm: minLettableSqm ? parseInt(minLettableSqm) : undefined,
|
||||
}] : undefined,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user