import type { MarktHinweis } from './marktHinweis' import type { CrmLead } from './crmLead' import type { FutureSignal, LeadSignalType } from './futureSignal' import type { Property } from './property' /** * Kanalherkunft eines Leads (Runde 5, §12). * * Ausdrücklich Teil des Datenmodells und nicht der Darstellung: der Kanal * entscheidet über Badge, Filter und Detailansicht. Aus der Darstellung * zurückgeraten — «hat eine Signal-ID, also KI» — bräche beim ersten neuen * Kanal, und niemand fände die Stelle. */ export const LeadChannel = { KI_SIGNAL: 'KI_SIGNAL', NETZWERK: 'NETZWERK', CRM: 'CRM', } as const export type LeadChannel = typeof LeadChannel[keyof typeof LeadChannel] /** Reihenfolge im Filterbalken — verbindlich (§13). */ export const LEAD_CHANNEL_ORDER: LeadChannel[] = [ LeadChannel.KI_SIGNAL, LeadChannel.NETZWERK, LeadChannel.CRM, ] /** Zusätzliche Filterstellung «Alle»; sie ist kein Kanal, sondern deren Abwesenheit. */ export const LEAD_CHANNEL_ALL = 'ALL' export type LeadChannelFilter = LeadChannel | typeof LEAD_CHANNEL_ALL /** * Anzeigefelder, die jeder Lead unabhängig vom Kanal besitzt. Ohne sie müsste * jede Zeile der gemeinsamen Liste den Kanal abfragen, bevor sie überhaupt * einen Titel anzeigen könnte. */ interface UnifiedLeadBase { id: string channel: LeadChannel /** Wer — Firma oder Ort, wenn keine Firma bekannt ist. */ title: string /** Worum es geht. */ subtitle: string /** Ort und eine kanaltypische Zusatzangabe. */ meta: string /** ISO-Zeitstempel; einzige gemeinsame Grundlage für die Sortierung. */ receivedAt: string /** * Chance oder Risiko (Runde 8, §2). Nur Recherche-Leads von Livia tragen den * Wert — ein Netzwerk-Hinweis oder ein CRM-Lead ist weder das eine noch das * andere, und ihn einzufärben hiesse, eine Einordnung zu behaupten, die * niemand vorgenommen hat. */ leadSignalType?: LeadSignalType } export type UnifiedLead = | (UnifiedLeadBase & { channel: typeof LeadChannel.KI_SIGNAL signal: FutureSignal matchingProperties: Property[] }) | (UnifiedLeadBase & { channel: typeof LeadChannel.NETZWERK; hinweis: MarktHinweis }) | (UnifiedLeadBase & { channel: typeof LeadChannel.CRM; crmLead: CrmLead })