/* ============================================================ EMPRESA > DASHBOARD DE CLIENTES (dinâmico) ============================================================ */ function PageDashboardClientes({ clientes, tickets, onPersonalizar }){ const totalClientes = clientes.length; const abertos = tickets.filter(t=>t.status!=='encerrado').length; const encerrados = tickets.filter(t=>t.status==='encerrado').length; const emAtendimento = tickets.filter(t=>t.status==='em_atendimento').length; const aguardando = tickets.filter(t=>t.status==='aguardando_retorno').length; function clienteStatus(nome){ const cts = tickets.filter(t=>t.cliente===nome); const open = cts.filter(t=>t.status!=='encerrado').length; if(cts.some(t=>t.status==='em_atendimento')) return { label:'Ativo', cls:'b-laranja', open }; if(cts.some(t=>t.status==='aguardando_retorno')) return { label:'Em atendimento', cls:'b-rosa', open }; return { label:'Concluído', cls:'b-green', open }; } const comSla = tickets.filter(t=>t.primeiraRespostaEm); const slaMedioMs = comSla.length ? comSla.reduce((s,t)=>s+(new Date(t.primeiraRespostaEm)-new Date(t.criadoEm)),0)/comSla.length : null; const avaliados = tickets.filter(t=>t.avaliacao); const satisfacaoMedia = avaliados.length ? (avaliados.reduce((s,t)=>s+t.avaliacao,0)/avaliados.length) : null; const totalT = Math.max(1, tickets.length); const donutParts = [ { label:'Ativos', val:emAtendimento, color:'var(--rosa)' }, { label:'Aguardando', val:aguardando, color:'var(--laranja)' }, { label:'Encerrados', val:encerrados, color:'var(--carvao-3)' }, ]; const donutSegs = donutParts.map(p=>({ pct: Math.round(p.val/totalT*100), color:p.color })); const prioCount = { Alta:0, 'Média':0, Baixa:0 }; tickets.filter(t=>t.status!=='encerrado').forEach(t=>{ if(prioCount[t.priority]!==undefined) prioCount[t.priority]++; }); const maxPrio = Math.max(1, ...Object.values(prioCount)); return (

Clientes — Serviço Prestado & Suporte Técnico

{clientes.map(c=>{ const st=clienteStatus(c.nome); return ( );})} {clientes.length===0 && }
ClienteServiço PrestadoSuporteChamados
{c.nome}{c.servico}{st.label}{st.open} aberto(s)
Nenhum cliente cadastrado.

Status dos Chamados

{tickets.length}
{donutParts.map(p=>(
{p.label} — {p.val}
))}

Suporte — Prioridade

{Object.keys(prioCount).map(k=>( ))}

Todos os Clientes com Sistema — Personalização

{clientes.map(c=>(
{c.initial}
{c.empresa}{c.nome} · {c.servico}
))} {clientes.length===0 &&

Nenhum cliente cadastrado.

}
); }