11 — Admin e Especialista: ângulos escaláveis fora do Coordenador
Pergunta: o foco do 05 foi o Coordenador. Admin (multi-escola) e Especialista (cross-escola por olimpíada) escalam diferente — onde estão os hotpaths?
Admin (escopo: TODAS as escolas)
Componentes em src/components/admin-*/ e edge functions admin-*. O multiplicador aqui é número de escolas (centenas previstas), não alunos por escola.
| Feature | Função | Risco |
|---|---|---|
| Dashboard | admin-dashboard | Agregação cross-escola — se for drenagem em JS, escala com Σ(alunos) |
| Financeiro | admin-financeiro | Lista escola_faturas + escola_assinaturas; precisa paginar |
| Logs | admin-logs | logs_transacoes cresce mais rápido que qualquer outra tabela — ver 13 |
| Comunicação | admin-comunicacao | Templates + envios — verificar se preview/teste percorre lista grande |
| Cron Monitor | admin-cron-monitor | OK (já 30s staleTime) |
| Health Check | admin-healthcheck | OK |
| Feature Flags | admin-feature-flags | Lista pequena; OK |
Hipóteses Admin
- Dashboard usa
count()agregado por escola em JS em vez de SQLGROUP BY— validar. admin-logsprovavelmente tem o mesmo problema que Resultados: drena para filtrar em JS.
Especialista (escopo: olimpíada cross-escola)
Componentes em src/components/especialista*/ e edge functions especialista-*.
| Feature | Risco |
|---|---|
| Cronograma de inscrições | inscricoes_olimpiada cross-escola — somatório de todas as escolas inscritas |
| Detalhes da Olimpíada | Stats por escola — risco igual ao Coordenador, multiplicado |
| Templates de mensagens | Editor — OK |
| Headers/Novidades | Pequeno — OK |
| Premiação por nível | Lista de premiados cross-escola — pode estourar |
Hipóteses Especialista
- "Lista de inscritos" da olimpíada (cross-escola) é o equivalente Especialista do problema Resultados — provavelmente sofre os mesmos sintomas que motivaram esta auditoria.
- Premiação batch (modal) já tem o caso do
touched ∪ existentesresolvido (mem://ui/no-synthetic-defaults-in-batch-modals); mas o carregamento dos dados base segue o mesmo hotpath de drenagem.
Padrão recomendado (proposta)
Mesma régua do 99:
- Paginação servidor + cursor por
created_atou(escola_id, id). - Agregados via SQL (
GROUP BY escola_id,COUNT FILTER). - Para Admin: cache mais agressivo (
staleTime: 5min) é OK — admin não precisa de tempo real.
Próximas etapas
- Sweep do
admin-logs(mesmo padrão de 02). - Sweep do
especialista-cronogramacross-escola. - Catalogar em
05_COORDENADOR_FEATURES_SWEEP.mduma seção espelho para Admin/Especialista.