435f2aa2f1
Der nachgebaute Meetingraum entfällt. Eine gezeichnete Kulisse bleibt neben fotografierten Porträts erkennbar gezeichnet — und ein Raum allein macht niemanden menschlich. Menschlich wirkt im echten Büro dasselbe wie hier: dass jemand da ist, etwas zu sagen hat und nachweisbar gearbeitet hat. Die Startseite zeigt deshalb sechs Personenkarten vor einer abgedunkelten Büroaufnahme. Jede Karte trägt, was ein Personalblatt trägt: - Porträt mit Dienstpunkt — ist da oder pausiert - Name, Funktion, Abteilung, Personalnummer - Autonomiestufe: «Autonom», «Freigabe erforderlich», «Nur Vorschlag». Sie sagt, wie viel Verantwortung jemand trägt, und trennt Personal von Automatisierung. - Ein Satz in der ersten Person zur aktuellen Lage, statt einer Kennzahl: «Bei 12 Fristen ist der Termin durch. Fürs Eskalieren brauche ich deine Freigabe.» - Die zuletzt protokollierte Handlung mit Zeitangabe. Diese Zeile ist der Unterschied zwischen Behauptung und Beleg — eine Kennzahl kann jede Software anzeigen. Darüber fasst ein Anriss zusammen, wie viele Mitarbeitende heute eine Entscheidung brauchen, samt Dienststand der Belegschaft. Schichten nach CLAUDE.md §4.2: `agentPresenceService` entscheidet, was als letzte Handlung gilt und wie eine Zeitangabe in Alltagssprache lautet; `agentWorkloadService` hält Zeitfenster, Schwellen und Formulierungen. Beide nehmen den Stichzeitpunkt als Parameter — dieselbe Datenlage ergibt immer dasselbe Ergebnis und ist ohne Renderer prüfbar (22 Tests). Giorgio hat kein Personalblatt; Abteilung, Personalnummer und Stufe kommen aus der zentralen Rollendefinition. Wer kein Dossier hat, gilt als im Dienst — sonst stünde die halbe Belegschaft still, weil Stammdaten fehlen. Bild: Unsplash, freie kommerzielle Lizenz. Herkunft und Austauschhinweis in `src/assets/meeting-room/HERKUNFT.md`. Geprüft: 435 Tests, Typecheck, Build, ESLint, Token-Schwelle (889/925). Browser 1280–1920 px und Tablet: sechs Karten ohne Überlappung, Titel und «Filter & Übersicht» beim Einstieg sichtbar, alle sechs Klicks auf der richtigen Subpage, keine Konsolenfehler, keine 404. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
26 lines
1.0 KiB
TypeScript
26 lines
1.0 KiB
TypeScript
import { useMemo } from 'react'
|
|
import { useTeamAgents } from './useTeamAgents'
|
|
import { useAgentProtocol } from './useAgentProtocol'
|
|
import { useAgentWorkload } from './useAgentWorkload'
|
|
import { buildAgentPresence } from '../services/agentPresenceService'
|
|
import type { AgentPresence } from '../domain/agentPresence'
|
|
|
|
/**
|
|
* Die Belegschaft, wie sie auf der Startseite auftritt (Runde 5).
|
|
*
|
|
* Der Hook sammelt Personalblätter, Protokoll und Auslastung ein; was daraus
|
|
* wird, entscheidet `agentPresenceService` (CLAUDE.md §4.2).
|
|
*/
|
|
export function useAgentPresence(): { data: AgentPresence[]; isLoading: boolean } {
|
|
const { data: agents = [], isLoading: agentsLoading } = useTeamAgents()
|
|
const { data: protocol = [], isLoading: protocolLoading } = useAgentProtocol()
|
|
const { data: workload, isLoading: workloadLoading } = useAgentWorkload()
|
|
|
|
const data = useMemo(
|
|
() => buildAgentPresence({ agents, protocol, workload }),
|
|
[agents, protocol, workload],
|
|
)
|
|
|
|
return { data, isLoading: agentsLoading || protocolLoading || workloadLoading }
|
|
}
|