Skip to content

Convenções de Nomenclatura e Idioma

Regras obrigatórias sobre idioma e casing em cada camada do sistema.


1. Regra Geral

O projeto é bilíngue por camada: banco de dados e domínio de negócio em português, infraestrutura React/TypeScript em inglês. Labels e textos de UI são sempre em português (pt-BR).


2. Banco de Dados (PostgreSQL)

ElementoIdiomaCasingExemplo
TabelasPortuguêssnake_caseescola_olimpiadas, resultados_aluno
ColunasPortuguêssnake_casecriado_em, nome_completo, nota_corte
EnumsPortuguêssnake_casestatus_escola, permissao_area
Valores de enumPortuguêssnake_case'ativa', 'agenda', 'pendente'
Funções SQLPortuguêssnake_casefn_validar_escola_usuario_papel(), fn_validate_expire_at()
ÍndicesPortuguêssnake_case com prefixo idx_idx_alunos_escola_id

Exceções históricas (não renomear): id, status, email, ip, token, hash — termos universais mantidos em inglês.


3. Edge Functions (Deno Backend)

ElementoIdiomaCasingExemplo
Nome do diretório/funçãoPortuguêskebab-casegestao-alunos, admin-escolas
Prefixos por domínioadmin-*, especialista-*, escola-*, gestao-*, coordenador-*, diretor-*, portal-*
Actions (campo action)Português/Inglêssnake_caselist, create, update, delete, list_public, list_by_olimpiada
Variáveis internasPortuguêscamelCaseescolaId, faseAtual, nivelId
Helpers compartilhadosInglêskebab-casecors-helpers.ts, auth-helpers.ts, logging-helper.ts

Nomenclatura de actions: verbos CRUD em inglês (list, create, update, delete), qualificadores em português (list_by_olimpiada, delete_fase_results).


4. Frontend (React/TypeScript)

ElementoIdiomaCasingExemplo
Componentes ReactInglês/MistoPascalCaseDashboard, MuralLiberacoes, LiberacaoCard
HooksInglês com termos PTcamelCase com useuseGestaoAlunos, useMuralEscola, useAdminEscolas
Arquivos de componentePortuguêskebab-casemural-liberacoes.tsx, agenda-tarefas-card.tsx
Tipos/InterfacesPascalCase mistoPascalCaseEscolaOlimpiada, LiberacaoStats, AuthenticatedUser
ConstantesInglêsUPPER_SNAKE_CASEQUERY_KEYS, CACHE_CONFIG, ROLE_TO_PROFILE
Labels/textos de UIPortuguês'Agenda', 'Inserir Resultados', 'Publicado'

5. Logs de Auditoria

ElementoFormatoExemplo
Campo acao<modulo>.<operacao> lowercase PTescola.create, usuario.update, banner.soft_delete
Campo entidadeSingular PTescola, usuario, olimpiada
Campo tipoInglêscreate, update, soft_delete

6. Diretórios e Arquivos

LocalConvençãoExemplo
src/components/<dominio>/Prefixo do domínio em kebab-case PTagenda-tarefas-card.tsx, mural-nova-noticia.tsx
src/hooks/use + domínio em PascalCaseuseGestaoResultados.ts, useMuralConfig.ts
src/lib/kebab-case descritivoedge-function.ts, olimpiada-helpers.ts
supabase/functions/kebab-case PT por domíniogestao-resultados/, admin-logs/
docs/UPPER_SNAKE_CASE.mdNAMING_CONVENTIONS.md, CODING_STANDARDS.md

7. Checklist de Validação

Ao criar novo código, verificar:

markdown
□ Tabela/coluna em português snake_case?
□ Edge Function com prefixo de domínio correto?
□ Componente com nome descritivo e prefixo do domínio?
□ Hook com `use` + domínio?
□ Labels de UI em português?
□ Log `acao` no formato `modulo.operacao`?
□ Tipo TypeScript em PascalCase?