`LIVIA_PROFIL_UND_PROMPT.md` hält Livia als Exposé Master fest, wie sie vor Runde 8 war: Personalblatt, Aufgabenkatalog, Kanäle und Systeme, das Exposé-Dossier mit elf Bereichen und neun Pflichtfeldern, die `missingFacts`-Regel der Textmaschine — dazu ein System-Prompt, mit dem sich diese Fassung ausserhalb des Repositories rekonstruieren lässt. `archive/livia/` ergänzt die Beschreibung um die Wiederherstellung: die 23 Dateien der Exposé-Funktion als wörtliche Kopie im Original-Pfadlayout sowie ein Manifest jeder Stelle, an der Livia in geteilten Dateien verdrahtet war. Beides ist mit Runde 8 nicht überholt, sondern der Referenzstand: die Exposé-Funktion wurde nicht entfernt, sondern nachgeordnet. Das Manifest beschreibt allerdings den Rückbau eines vollständigen Entfernens und damit ein Szenario, das so nicht eingetreten ist. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
49 lines
1.9 KiB
Plaintext
49 lines
1.9 KiB
Plaintext
// ══ src/services/agentWorkloadService.ts — Importe (Z. 3-4) ══
|
|
import { ExposeLeadStatus } from '../domain/exposeLead'
|
|
import type { ExposeLead } from '../domain/exposeLead'
|
|
|
|
// ══ URGENT_FROM (Z. 33-40) ══
|
|
const URGENT_FROM = {
|
|
reminders: 5,
|
|
visits: 4,
|
|
expose: 5,
|
|
dataGaps: 10,
|
|
} as const
|
|
|
|
/** Zeitfenster der Auswertung. */
|
|
|
|
// ══ Eingabefeld (Z. 48-55) ══
|
|
export interface AgentWorkloadInput {
|
|
reminders: Reminder[]
|
|
visits: VisitAssignment[]
|
|
exposeLeads: ExposeLead[]
|
|
leads: UnifiedLead[]
|
|
properties: Property[]
|
|
}
|
|
|
|
|
|
// ══ Livias Auslastungsbahn (Z. 117-129) ══
|
|
// ── Livia: weitergeleitete Leads ────────────────────────────────────────────
|
|
const openExpose = input.exposeLeads.filter(l => l.status === ExposeLeadStatus.ACTIVE).length
|
|
const livia: AgentWorkload = {
|
|
agentId: 'livia',
|
|
count: openExpose,
|
|
label: `${openExpose} ${plural(openExpose, 'Exposé offen', 'Exposés offen')}`,
|
|
tone: tone(openExpose, URGENT_FROM.expose),
|
|
voice: openExpose === 0
|
|
? 'Kein Exposé offen. Leite mir einen Lead weiter, dann lege ich los.'
|
|
: `${openExpose} ${plural(openExpose, 'Lead wartet', 'Leads warten')} auf ein Exposé von mir.`,
|
|
}
|
|
|
|
// ── Nora: Marktchancen ──────────────────────────────────────────────────────
|
|
|
|
// ══ src/hooks/useAgentWorkload.ts — alle Livia-Stellen ══
|
|
import { useExposeLeads } from './useExposeLeads'
|
|
const { data: exposeLeads = [], isLoading: exposeLoading } = useExposeLeads()
|
|
const data = useMemo(
|
|
() => computeAgentWorkload({ reminders, visits, exposeLeads, leads, properties }),
|
|
[reminders, visits, exposeLeads, leads, properties],
|
|
remindersLoading || visitsLoading || exposeLoading ||
|
|
leadsLoading || propertiesLoading,
|
|
}
|