/* global React, ChIcon, NavIcon, CHANNELS, StateBadge, ESCALATED_CASE */ const { useState: useStateE } = React; const REASONS = [ { id: "equipo-retirado", label: "Equipo retirado, robado o no se encuentra" }, { id: "serie-no-aparece", label: "Serie no aparece / no comprado en Canella / comprado al contado" }, { id: "cliente-no-serie", label: "Cliente no puede dar la serie" }, { id: "serie-otro-dato", label: "Da IP / # chasis ADF / cartucho de tóner en vez de serie" }, { id: "buscar-otro", label: "Pide búsqueda por NIT / nombre / # cliente" }, { id: "contrato-no-grabado", label: "Contrato (arrendamiento o mantenimiento) no grabado/actualizado" }, { id: "amerita-visita", label: "Falla amerita visita de técnico" }, ]; const ROUTES = [ { id: "channel", icon: "user", label: "Continuar en el mismo canal", sub: "Responder al cliente vía llamada activa", note: "preserva contexto · cliente espera en línea" }, { id: "conectividad", icon: "routes", label: "Reasignar a CONECTIVIDAD", sub: "Equipos en arrendamiento · red / IP / firmware" }, { id: "taller", icon: "wrench", label: "Reasignar a TALLER", sub: "Consulta técnica HW/SW · diagnóstico profundo" }, { id: "visita", icon: "truck", label: "Agendar visita de técnico", sub: "Dispatcher despacha unidad a campo" }, ]; const EscalationScreen = ({ goToQueue, goToCase }) => { const c = ESCALATED_CASE; const channelMeta = CHANNELS.find(x => x.id === c.channel); const [reason, setReason] = useStateE(c.reason); const [route, setRoute] = useStateE("channel"); const [draft, setDraft] = useStateE("Don Roberto, soy Sofía Marroquín del equipo de Canella. Le ayudo a partir de aquí. Veo que mi colega SOF.IA validó la serie sin encontrarla. ¿Me podría confirmar el NIT de su empresa para buscar por ahí?"); return (
← Bandeja / Escalamientos / #{c.id}

Escalamiento #{c.id} · {c.customer}

SOF.IA transfirió el caso · esperando acción del Dispatcher
{/* Escalation banner */}
SOF.IA escaló este caso · cliente sigue en línea

Motivo principal: {REASONS.find(r => r.id === c.reason).label}. El cliente está esperando en la llamada · te paso el control con todo el contexto recolectado.

● en vivo canal: {channelMeta.label} capturado por SOF.IA en {c.duration} escalado a las {c.escalatedAt}
{/* LEFT — voice transcript + composer */}
{c.customer} {c.customerSub} · {channelMeta.label} en curso
EN VIVO
{Array.from({length:48}).map((_,i) => ( ))}
02:14 / —
{c.transcript.map((line, i) => (
{line.speaker}
{line.time}
{line.text}
))}
SOF.IA → OP
11:08:42
Transferencia silenciosa al operador. Cliente en hold con música. Tienes ~30 seg antes de que pregunte.
Responder por {channelMeta.label} · misma llamada