/** * Property On — Exposé-Dossier von Livia. * * Der Datensatz bildet die fachlichen Bereiche der Referenzvorlage ab * (Runde 4, §8.5.2). Bewusst als flaches Feld-Wörterbuch statt als tief * geschachtelte Struktur: die Bereiche sind reine Gliederung des Formulars, * kein Domänenmodell. Eine Schachtelung würde jedes Feld doppelt benennen — * einmal im Typ, einmal in der Feldliste — und beide könnten auseinanderlaufen. * * Was aus «Meine Objekte» belegbar ist, füllt Livia; alles andere bleibt leer * und wird als fehlend markiert. Es werden keine plausiblen Werte erfunden. */ import type { ExposeTonality } from '../services/ai/IAIService' /** Kategorien für die Medien-Kuration. */ export const ExposeImageCategory = { EXTERIOR: 'EXTERIOR', INTERIOR: 'INTERIOR', FLOORPLAN: 'FLOORPLAN', SURROUNDINGS: 'SURROUNDINGS', OTHER: 'OTHER', } as const export type ExposeImageCategory = typeof ExposeImageCategory[keyof typeof ExposeImageCategory] export interface ExposeImage { id: string url: string fileName: string category: ExposeImageCategory caption: string /** Im Exposé sichtbar. */ visible: boolean isCover: boolean /** true = aus «Meine Objekte» importiert, false = zusätzlich hochgeladen. */ imported: boolean } export const ExposeDocumentType = { FLOORPLAN: 'FLOORPLAN', LEASE_CONTRACT: 'LEASE_CONTRACT', ENERGY_CERTIFICATE: 'ENERGY_CERTIFICATE', SITE_PLAN: 'SITE_PLAN', OTHER: 'OTHER', } as const export type ExposeDocumentType = typeof ExposeDocumentType[keyof typeof ExposeDocumentType] export interface ExposeDocument { id: string type: ExposeDocumentType title: string fileName: string /** Als Anhang im Exposé sichtbar. */ visibleAsAttachment: boolean } /** Herkunft der Firmenfarben im Exposé. */ export const ExposeBranding = { FROM_PROFILE: 'FROM_PROFILE', MANUAL: 'MANUAL', } as const export type ExposeBranding = typeof ExposeBranding[keyof typeof ExposeBranding] /** * Sämtliche Formularwerte. Schlüssel siehe `lib/exposeFields.ts` — dort stehen * Beschriftung, Feldtyp, Bereich und Pflichtangabe an genau einer Stelle. */ export type ExposeValues = Record export interface ExposeDraft { id: string leadId: string /** Objekt aus «Meine Objekte», aus dem die Angaben stammen. */ propertyId: string values: ExposeValues tonality: ExposeTonality images: ExposeImage[] documents: ExposeDocument[] branding: ExposeBranding brandColor?: string /** Ansprechperson fürs Exposé — aus dem Maklerprofil oder manuell. */ contactPerson: string updatedAt: string /** Zeitpunkt der letzten Erstellung; leer, solange nur gespeichert wurde. */ generatedAt?: string }