/* ============================================================ EMPRESA > FINANCEIRO > CHAMADOS Busca + filtros (status/prioridade/responsável) e SLA calculado. ============================================================ */ function PageFinChamados({ tickets, equipe, onOpenModal, onStatusChange, onAssign }){ const [busca, setBusca] = useState(''); const [fStatus, setFStatus] = useState(''); const [fPrioridade, setFPrioridade] = useState(''); const [fResponsavel, setFResponsavel] = useState(''); const filtrados = tickets.filter(t=>{ if(fStatus && t.status!==fStatus) return false; if(fPrioridade && t.priority!==fPrioridade) return false; if(fResponsavel==='none' && t.responsavelId) return false; if(fResponsavel && fResponsavel!=='none' && t.responsavelId!==fResponsavel) return false; if(busca){ const q = busca.toLowerCase(); if(!(t.cliente.toLowerCase().includes(q) || t.title.toLowerCase().includes(q) || t.id.toLowerCase().includes(q))) return false; } return true; }); const abertosNaoAtendidos = tickets.filter(t=>t.status!=='encerrado' && !t.primeiraRespostaEm); const atrasados = tickets.filter(isAtrasado); const comSlaCalculavel = tickets.filter(t=>t.primeiraRespostaEm); const slaMedioMs = comSlaCalculavel.length ? comSlaCalculavel.reduce((s,t)=>s+(new Date(t.primeiraRespostaEm)-new Date(t.criadoEm)),0) / comSlaCalculavel.length : null; return (
0?'down':'up'} tone="pink"/> 0 ? 'precisam de atenção urgente' : 'tudo dentro do prazo'} dir={atrasados.length>0?'down':'up'} tone={atrasados.length>0?'pink':undefined}/>

Buscar e Filtrar

setBusca(e.target.value)}/>

Chamados Solicitados ({filtrados.length})

{filtrados.map(t=>{ const resp = equipe.find(e=>e.id===t.responsavelId); const tempoResposta = t.primeiraRespostaEm ? (new Date(t.primeiraRespostaEm)-new Date(t.criadoEm)) : null; const atrasado = isAtrasado(t); return ( ); })} {filtrados.length===0 && }
ClienteAssuntoPrioridadeResponsávelStatusAberto em1ª resposta
{t.cliente} #{t.numero} · {t.title} {atrasado && ⏰ Atrasado} {t.priority} {fmtDataHora(t.criadoEm)} {tempoResposta!=null ? fmtDuracao(tempoResposta) : Pendente}
Nenhum chamado encontrado com esses filtros.
); }