feat(ui): display door opening method and credential details in open longest ranking entries #24
Labels
No labels
blocked
bug
enhancement
high-priority
low-priority
needs-info
needs-triage
ready-for-agent
ready-for-human
referenced
research
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
gabogg/hikcentral#24
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📌 Problem Statement
In the Tactical Operations Deck (
DUAL_OPS_DECK), the "Doors Opened the Longest" ranking panel (#tactical-open-longest-panel) currently renders a single line per open door displaying:#1,#2, ...)[ P-code ]) and Door nameDURACIÓN: MM:SS)[ OPEN ]/[ ALARM ])While this allows operators to see which doors are open and for how long, it provides zero visibility into HOW the door was opened. When investigating prolonged open states or security breaches, operators must navigate away to forensic logs to identify whether the door was opened by a legitimate cardholder, a manual exit button, or forced entry.
🎯 Proposed Solution
Modify each individual door entry in the "Doors Opened the Longest" ranking list to include a dedicated second line below the primary door telemetry, explicitly stating HOW it was opened.
Second Line Display Requirements:
Below the main door information line, render a secondary contextual strip indicating:
[BOTÓN / BOTÓN DE SALIDA]or[BUTTON / REX].PERSONA: Juan Pérez // TARJETA: 1049283orCREDENCIAL: María Rodríguez [HUELLA].// MANTENIMIENTO).[APERTURA FORZADA / SENSOR DIRECTO]or[DESCONOCIDO].🏗️ Technical Architecture & Seams
Backend (
app/services/door_service.py&app/schemas/models.py):DoorService.get_door_overview()already attachesactive_cycle,personName,personRole,cardNo, andsummaryLabelto each door inopen_doors/open_longest.open_trigger:BUTTON|CREDENTIAL|MANUAL|FORCED|UNKNOWN) is resolved and serialized deterministically in the WebSocket snapshot and HTTP/api/doors/statusresponse.Frontend (
app/static/js/src/ui/command_deck_adapter.js):CommandDeckAdapter.renderOpenLongest(snapshot)to render the two-tier row structure:text-[10px] text-slate-400 bg-slate-900/60 px-2 py-0.5 mt-1) displaying the opening method, actor name, and credential info..open-dur-val) without destroying DOM nodes during live second-by-second updates.✅ Acceptance Criteria
[BOTÓN / REX].[APERTURA FORZADA / SENSOR DIRECTO]).gabogg referenced this issue2026-09-21 14:31:06 +00:00