Skip to content

Auditoria: Code Splitting e Reestruturação

Status: 🟡 Parcialmente Resolvida — Fase A ✅ concluída (2026-04-09), Fases B-E pendentes
Data: 2026-04-08
Tipo: Auditoria de manutenibilidade e performance de contexto AI


Metodologia

Varredura completa de src/components/, src/hooks/, src/lib/, supabase/functions/ e supabase/functions/_shared/. Critérios:

  1. Linhas > 400 em arquivo único (candidato a split)
  2. Funções/helpers duplicados entre arquivos
  3. Código morto (exportado mas nunca importado)
  4. Hook > 500 linhas (candidato a split)
  5. Edge Function com > 10 actions (candidato a extrair handlers)

TIER 1 — Monólitos Críticos (>1000 linhas, impacto alto)

#ArquivoLinhasEstruturaRecomendação
1alunos-escola.tsx34867 componentes internos (TabAlunos, TabTurmas, TabResponsaveis, AlunoForm, ResponsavelForm, TabImportacao, BarraLimiteAlunos) + orquestradorSplit urgente → diretório src/components/alunos-escola/ com 7 arquivos
2olimpiada-detalhes-especialista.tsx27861 componente com 5 TabsContent (informacoes, fases, cronograma, inscricao, links) — cada tab 300-600 linhasSplit → diretório com 5 tab-components + orquestrador + helpers
3importacao-alunos/index.tsx23031 componente monolítico (diretório existe mas index absorveu tudo)Split → extrair steps do wizard em componentes separados
4admin-escola-detalhes.tsx17561 componente com 5 TabsContent (dados, endereco, usuarios, planos, faturas)Split → diretório com 5 tabs + orquestrador
5olimpiadas.tsx16436 componentes internos (ordenarSeries, SeriesTooltip, NiveisTooltip, FaseLinhaLeitura, FasesDetalhesBlock, FasesNiveisCard, Olimpiadas)Split → diretório olimpiadas/ com helpers + subcomponentes
6admin-assinaturas.tsx13571 componente com tabsSplit → diretório
7turmas.tsx13091 componenteSplit → integrar ao diretório turmas/ existente
8usuarios-escola.tsx12251 componente com inline modalSplit → diretório
9admin-escolas.tsx12112 componentes (EscolaCardItem + AdminEscolas) + hook inline useDebounceValueSplit + extrair useDebounceValue para src/hooks/
10admin-incidentes.tsx113010 componentes internosSplit → diretório com subcomponentes
11login-unified.tsx11221 componente monolíticoSplit → steps (identificação, OTP, seleção de perfil)
12admin-cron-monitor.tsx10841 componente + helper inlineSplit → diretório
13configuracoes-sistema-especialista.tsx10231 componenteSplit → seções de configuração

TIER 2 — Arquivos Grandes (600-1000 linhas)

ArquivoLinhasRecomendação
admin-faturas.tsx987Split → diretório (lista + modal edição + filtros)
banners-especialista.tsx983Split → lista + formulário + preview
gerador-cartoes.tsx922Split → config + preview + geração
dashboard-trial.tsx907Split → seções (calendário, eventos, stats)
tutoriais-especialista.tsx880Split → lista + editor
admin-usuarios.tsx866Split → lista + modal CRUD
videos-clean.tsx857Split → lista + player + upload
controle-aplicacoes.tsx828Split → lista + detalhes
pagamentos-escola.tsx791Split → faturas + histórico
leitor-cartoes.tsx777Split → scanner + resultados
gerenciar-videos-curso.tsx771Split → lista + editor
admin-feature-flags.tsx709Split → lista + detalhes + canary
header-novidades-especialista.tsx664Split → lista + editor
resultados-lista.tsx747Split → tabela + filtros + ações

TIER 3 — Hooks Grandes

HookLinhasRecomendação
useMuralPortal.ts752Split urgente — 33 hooks/effects. Separar em useMuralPortalAuth, useMuralPortalData, useMuralPortalNavigation
useOlimpiadasData.ts552Extrair tipos/constantes para olimpiadas-types.ts
useGestaoResultados.ts480Manter (coeso, RQ)
useOlimpiadasCoordenador.ts454Manter (coeso, RQ)

TIER 4 — Edge Functions Grandes

Edge FunctionLinhasActionsRecomendação
admin-assinaturas164612Extrair handlers para _shared/assinaturas-handlers.ts
mural-escola149916Split urgente — Extrair para _shared/mural-handlers.ts
gestao-usuarios-escola134112Pode extrair mais handlers
faturamento-cron12491Monolítico por natureza (cron), manter
admin-cron-monitor10209Extrair handlers
maintenance-cron1017Cron, manter
diretor-dashboard10085Extrair para _shared/diretor-queries.ts

TIER 5 — Código Morto ✅ Resolvido (2026-04-09)

ArquivoLinhasStatus
controle-aplicacoes-novo.tsx606✅ Deletado
student-view.tsx56✅ Deletado
src/Index.tsx7✅ Deletado
login.tsx486✅ Deletado

Total removido: 1155 linhas


TIER 6 — Duplicação de Código

6.1 formatarDataHora — duplicada em 2 arquivos

src/components/admin-cron-monitor.tsx:158  (definida inline)
src/components/admin-incidentes.tsx:110    (definida inline)

Ação: Extrair para src/lib/date-helpers.ts e importar em ambos.

6.2 toLocaleDateString('pt-BR') inline — 30+ ocorrências

Espalhado em 18 arquivos. Já existe formatarDataPtBR em role-helpers.ts mas não é usada consistentemente.

Ação: Criar src/lib/date-helpers.ts com formatarDataPtBR, formatarDataHoraPtBR, formatarDataCurta e migrar gradualmente.

6.3 useDebounceValue — definida inline

src/components/admin-escolas.tsx:38

Ação: Extrair para src/hooks/useDebounceValue.ts (hook reutilizável).


Priorização Recomendada

Fase A — Quick wins ✅ Concluída (2026-04-09)

  1. Deletar controle-aplicacoes-novo.tsx (606 linhas)
  2. Deletar student-view.tsx (56 linhas)
  3. Deletar src/Index.tsx (7 linhas)
  4. Deletar login.tsx (486 linhas) ✅ — confirmado que login-unified.tsx é o substituto completo

Fase B — Extração de helpers compartilhados

  1. Criar src/lib/date-helpers.ts (eliminar 2 formatarDataHora duplicadas + centralizar toLocaleDateString)
  2. Extrair useDebounceValue para src/hooks/useDebounceValue.ts

Fase C — Splits de alto impacto (os 5 maiores)

  1. alunos-escola.tsx (3486 → ~7 arquivos) — maior monólito
  2. olimpiada-detalhes-especialista.tsx (2786 → ~7 arquivos) — 5 tabs distintas
  3. importacao-alunos/index.tsx (2303 → ~5 arquivos) — wizard steps
  4. admin-escola-detalhes.tsx (1756 → ~6 arquivos) — 5 tabs
  5. useMuralPortal.ts (752 → ~3 hooks) — hook mais complexo

Fase D — Splits secundários

6-13. Restante do TIER 1 por ordem de linhas decrescente

Fase E — Edge Functions

  1. mural-escola (16 actions → handlers extraídos)
  2. admin-assinaturas (12 actions → handlers)

Estimativa de Impacto

MétricaAntesApós Fase A-C
Arquivos >1000 linhas (components)130
Maior arquivo3486~400
Código morto removido~1155 linhas
Helpers duplicados eliminados30
Hooks >500 linhas20