feat(startseite): Giorgio entfernt, Belegschaft auf die fünf Agenten

Auf ausdrücklichen Wunsch: Giorgio entfällt vollständig. Das weicht bewusst
von §6 des Auftrags ab, der ihn als Personalverwalter und Vorgesetzten
vorsah — festgehalten, damit die Abweichung später nachvollziehbar bleibt.

Entfernt: Rollendefinition `AGENT_SUPERVISOR`, sein gezeichnetes Porträt, sein
Eintrag in der Auslastung und in der Belegschaftsansicht sowie die Erwähnung
in der Produkttour. Die Personalverwaltung bleibt unverändert über den
Menüpunkt «Meine Agenten» erreichbar — sie brauchte nie eine eigene Person am
Bildschirm.

Mit Giorgio entfällt auch die einzige Kennzahl, die aus den Freigabevorgängen
kam; `computeAgentWorkload` braucht `agentWorkItems` deshalb nicht mehr.

Ordner und Komponenten heissen jetzt nach ihrem Inhalt: `components/staff/`,
`AgentStaffOverview`, `StaffBackdrop`. «Meetingraum» war seit dem Umbau auf
Personenkarten irreführend, und ein falscher Name kostet den Nächsten mehr
Zeit als die Umbenennung.

Fünf statt sechs Karten heisst Flexlayout statt Dreierraster: drei oben, zwei
mittig darunter, gleich breit und ohne Lücke. Die Karten geben ihre Höhe nicht
mehr selbst vor — mit `height: 100%` beanspruchte jede die volle Fläche und
die zweite Zeile fiel aus dem sichtbaren Bereich.

Geprüft: 433 Tests, Typecheck, Build, ESLint, Token-Schwelle (889/925).
Browser 1280–1920 px und Tablet: fünf Karten vollständig sichtbar, keine
Überlappung, Titel und «Filter & Übersicht» beim Einstieg sichtbar, alle fünf
Klicks auf der richtigen Subpage, «Meine Agenten» weiterhin erreichbar, keine
Konsolenfehler, keine 404.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-08-06 15:03:18 +02:00
parent 435f2aa2f1
commit 093a958dcf
19 changed files with 56 additions and 184 deletions
+4 -6
View File
@@ -4,12 +4,11 @@ import { useVisitAssignments } from './useVisitAssignments'
import { useExposeLeads } from './useExposeLeads'
import { useUnifiedLeads } from './useUnifiedLeads'
import { useProperties } from './useProperties'
import { useAgentWorkItems } from './useAgentWorkItems'
import { computeAgentWorkload } from '../services/agentWorkloadService'
import type { AgentWorkload } from '../domain/agentWorkload'
/**
* Aktuelle Auslastung aller sechs digitalen Mitarbeitenden (Runde 5).
* Aktuelle Auslastung der fünf digitalen Mitarbeitenden (Runde 5).
*
* Der Hook sammelt nur die Bestände ein; was daraus wird, entscheidet
* `agentWorkloadService` — Schwellen, Zeitfenster und Formulierungen sind
@@ -22,17 +21,16 @@ export function useAgentWorkload(): { data: Record<string, AgentWorkload>; isLoa
const { data: exposeLeads = [], isLoading: exposeLoading } = useExposeLeads()
const { data: leads, isLoading: leadsLoading } = useUnifiedLeads()
const { data: properties = [], isLoading: propertiesLoading } = useProperties()
const { data: workItems = [], isLoading: workItemsLoading } = useAgentWorkItems()
const data = useMemo(
() => computeAgentWorkload({ reminders, visits, exposeLeads, leads, properties, workItems }),
[reminders, visits, exposeLeads, leads, properties, workItems],
() => computeAgentWorkload({ reminders, visits, exposeLeads, leads, properties }),
[reminders, visits, exposeLeads, leads, properties],
)
return {
data,
isLoading:
remindersLoading || visitsLoading || exposeLoading ||
leadsLoading || propertiesLoading || workItemsLoading,
leadsLoading || propertiesLoading,
}
}