Plano — Drop coluna olimpiadas.tipo_inscricao
Status: agendado Criado: 2026-05-07 Etapa C (remoção de espelhos): 2026-05-08 Etapa D (DROP COLUMN): 2026-05-09Owner: backend/olimpíadas
Contexto
A coluna escalar olimpiadas.tipo_inscricao foi substituída pelo array tipos_inscricao TEXT[] para suportar combinações ("Por Escola + Individual" etc.). O backfill já populou 39/39 olimpíadas e o contrato do coordenador (Etapa A) foi corrigido em 2026-05-07. Resta remover os espelhos legados e dropar a coluna.
Pré-requisitos / Gates
- [x] Backfill
tipos_inscricaopopulado (39/39). - [x] Etapa A — backend coord retorna
tiposInscricao(coordenador-olimpiadas/index.tslinhas 139, 193, 325, 637). - [x] Etapa B — UI multi-select dropdown em
tab-informacoes.tsx. - [ ] Janela 48h em produção sem incidente "Tipo de Inscrição" (até 2026-05-09).
Mapa dos espelhos legados (10 pontos + types auto-gerados)
Backend — escrita (espelho mandatório de remover ANTES do drop)
| # | Arquivo | Linha | O que faz |
|---|---|---|---|
| 1 | supabase/functions/_shared/olimpiada-helpers.ts | 515 | updateData.tipo_inscricao = enums[0] (ao criar) |
| 2 | supabase/functions/_shared/olimpiada-helpers.ts | 519 | updateData.tipo_inscricao = tipoInscDb (ao atualizar) |
Backend — leitura
| # | Arquivo | Linha | O que faz |
|---|---|---|---|
| 3 | supabase/functions/_shared/olimpiada-helpers.ts | 1344 | tipoInscricao: TIPO_INSCRICAO_MAP[olimpiada.tipo_inscricao] (especialista GET) |
| 4 | supabase/functions/_shared/olimpiada-helpers.ts | 1347 | Fallback [TIPO_INSCRICAO_MAP[olimpiada.tipo_inscricao]] |
| 5 | supabase/functions/coordenador-olimpiadas/index.ts | 139 | .select("... tipo_inscricao ...") |
| 6 | supabase/functions/coordenador-olimpiadas/index.ts | 193, 325, 637 | 3 retornos tipoInscricao (espelho) |
| 7 | supabase/functions/especialista-olimpiadas/index.ts | 140 | Leitura tipoInscricao no list |
Frontend — fallbacks
| # | Arquivo | Linhas | O que faz |
|---|---|---|---|
| 8 | src/components/olimpiadas.tsx | 604–606, 793, 1505 | Fallbacks tipoInscricao || 'Individual' |
| 9 | src/hooks/useOlimpiadasCoordenador.ts | 24, 77, 269, 272, 291, 294 | Campo no tipo + fallback |
| 10 | src/hooks/useOlimpiadasData.ts + src/components/olimpiada-detalhes/{helpers.ts:20,160; types.ts:22; index.tsx:108,184,405; tab-informacoes.tsx} | — | Estado/diff/payload com campo single |
Tipos auto-gerados (regenera após drop)
src/integrations/supabase/types.ts:2845, 2870, 2895— colunatipo_inscricao.
Etapa C — Remover espelhos (2026-05-08)
- Backend escrita: remover linhas 515 e 519 de
olimpiada-helpers.ts. Validar que payload sempre traztiposInscricao(Zod). - Backend leitura: remover todas as 5 referências (
olimpiada-helpers.ts:1344,1347,coordenador-olimpiadasx4,especialista-olimpiadas:140).tipoInscricao(single) deixa de ser retornado. - Frontend: remover campo
tipoInscricaodetypes.ts,helpers.ts,index.tsx,tab-informacoes.tsx,useOlimpiadasData.ts,useOlimpiadasCoordenador.ts. Remover fallbacks|| 'Individual'emolimpiadas.tsx(mantertiposInscricao.join(' + ')). - Validação: rodar testes Deno (
olimpiada-helpers.test.ts, navigation-guard, fases-niveis), build frontend, smoke E2E coord+especialista.
Etapa D — Drop da coluna (2026-05-09)
sql
-- Migration: 2026-05-09 drop_olimpiadas_tipo_inscricao
ALTER TABLE public.olimpiadas DROP COLUMN tipo_inscricao;Pós-drop:
- Aguardar regeneração automática de
src/integrations/supabase/types.ts. - Confirmar logs de
coordenador-olimpiadaseespecialista-olimpiadassem erros.
Rollback
Caso a Etapa C cause regressão antes do drop:
- Reverter PR da Etapa C (espelhos voltam, coluna ainda existe → contrato single restaurado).
Caso o drop cause regressão (improvável após Etapa C estável):
- Recriar coluna via migration + backfill
UPDATE olimpiadas SET tipo_inscricao = tipos_inscricao[1].
Referências
docs/architecture/DATABASE_SCHEMA.md(linha 282 marcada DEPRECATED).docs/development/TS_SANEAMENTO_BACKLOG.md(item 6).- mem://architecture/olympics-phases-by-level-standard.