Auditoria Completa: Seção Resultados — Split + Migração React Query
Data: 2026-03-18 Última atualização: 2026-03-28 Status: ✅ Concluído — todas as 4 fases executadas
Inventário de Arquivos (Atualizado)
| Arquivo | Linhas | Papel | Estado React Query |
|---|---|---|---|
resultados/index.tsx | — | Barrel re-export | OK |
resultados-lista.tsx | ~500 | Lista geral de resultados | OK — 100% RQ |
resultados-detalhes.tsx | ~400 | Detalhes de uma olimpíada (orquestrador) | OK — 100% RQ |
detalhes-header.tsx | ~120 | Header + stats cards | OK — props |
detalhes-fases-toolbar.tsx | ~100 | Fases + ações | OK — props |
detalhes-filtros.tsx | ~100 | Filtros + paginação | OK — props |
detalhes-tabela.tsx | ~100 | Tabela + delete | OK — props |
nota-corte-modal.tsx | ~90 | Modal de nota de corte | OK — props |
premiacao-faixas-modal.tsx | ~120 | Modal de faixas | OK — props |
premiacao-manual-modal.tsx | ~593 | Modal premiação manual | OK — props |
selecao-metodo-modal.tsx | ~76 | Modal seleção de método | OK — props |
inserir-dialog.tsx | ~270 | Wizard inserção (orquestrador) | OK — RQ via hooks |
inserir-utils.ts | ~65 | Tipos + helpers puros | OK — sem React |
inserir-step-selecao.tsx | ~120 | Step 1: seleção olimpíada/fase/nível | OK — props |
inserir-step-upload.tsx | ~230 | Step 2: upload + manual | OK — props |
inserir-step-preview.tsx | ~150 | Step 3: confirmação | OK — props |
inserir-step-processando.tsx | ~120 | Step 4: progresso | OK — props |
helpers.ts | ~50 | Badges/formatters | OK — sem React |
useGestaoResultados.ts | ~429 | Hook de dados de resultados | OK — 100% RQ |
useOlimpiadasCoordenador.ts | ~452 | Hook olimpíadas (coordenador) | OK — 100% RQ |
useGestaoAlunos.ts | ~381 | Hook de alunos | OK — 100% RQ |
useImportacaoResultados.ts | ~191 | Sessão importação background | Exceção válida — polling |
useImportacaoSessao.ts | ~375 | Sessão importação alunos | Exceção válida — polling |
Fases Concluídas
Fase 1: Split de componentes ✅
- Monólito
resultados-olimpiada-detalhes.tsx(1176 linhas) → 7 arquivos - Monólito
resultados.tsx(746 linhas) →resultados-lista.tsx - Movidos para
src/components/coordenador/resultados/
Fase 2: Migração useOlimpiadasCoordenador para React Query ✅
- Hooks
useQuerypara olimpíadas aderidas e detalhes - Mutations com invalidação de cache
olimpiadas.tsxatualizado
Fase 3: Migração useGestaoAlunos (parcial) ✅
useAlunosListagemcom React Query- Hook legado mantido para
alunos-escola.tsx
Fase 4: Split do inserir-dialog.tsx ✅ (2026-03-28)
- Monólito de 1143 linhas → 5 arquivos
inserir-utils.ts— tipos + helpers puros (safeParseNumber, detectColumn, COLUMN_PATTERNS)inserir-step-selecao.tsx— Step 1: seleção olimpíada/fase/nívelinserir-step-upload.tsx— Step 2: upload planilha + entrada manualinserir-step-preview.tsx— Step 3: preview + conflitosinserir-step-processando.tsx— Step 4: progresso importaçãoinserir-dialog.tsx— orquestrador ~270 linhas (estado + hooks + renderização)- Zero mudança funcional — split mecânico
Exceções — NÃO migrar para React Query
| Arquivo | Razão |
|---|---|
useImportacaoResultados.ts | Estado efêmero + polling |
useImportacaoSessao.ts | Estado efêmero + polling |