2.7 KiB
2.7 KiB
| type | name | description | scope | trigger | updatedAt |
|---|---|---|---|---|---|
| rule | uso-estrito-enums-tabelas | Uso estrito de constantes canônicas de Tabelas e Enums exportados por *-comuns (proibição de magic strings) | global | always_on | 2026-10-14 |
Regra: Uso Estrito de Enums e Constantes de Tabelas (Eliminação de Strings Literais)
Contexto
A utilização de strings mágicas (magic strings) e literais soltos para representar tabelas de banco de dados ou valores de enums é uma fonte crônica de bugs silenciosos em runtime. Quando um valor de enum ou nome de tabela é refatorado, o TypeScript não detecta comparações literais soltas (u.papel === "administrador", db("tickets")), quebrando regras de negócio e consultas.
Regra Fundamental
É terminantemente proibido utilizar strings literais para referenciar tabelas do banco de dados ou valores que pertençam a enums canônicos.
Todo desenvolvedor e agente de IA deve obrigatoriamente:
- Consultar
memorias-ia/modulo.ymlpara identificar o módulo e importar as definições a partir do pacote compartilhado<modulo>-comuns; - Utilizar a constante canônica
Tabelas(outabelas) para toda e qualquer referência a tabelas no banco de dados (Knex, migrations, queries); - Utilizar os objetos de Enum canônicos correspondentes para toda comparação, atribuição e checagem condicional de estado, papel, tipo ou severidade.
1. Referência a Tabelas de Banco de Dados
❌ Proibido
db("tickets")
db("usuarios as u")
db("tarefas_manutencao")
✅ Correto
// Importar do pacote <modulo>-comuns do projeto atual
import { Tabelas } from "<modulo>-comuns";
db(Tabelas.tickets)
db(`${Tabelas.usuarios} as u`)
db(Tabelas.tarefas_manutencao)
2. Comparações e Atribuições de Enums
❌ Proibido
if (ticket.status === "resolvido") { ... }
if (usuario.papel === "administrador") { ... }
if (tarefa.tipo_manutencao === "corretiva_bug") { ... }
if (msg.tipo_mensagem === "nota_interna_equipe") { ... }
✅ Correto
// Importar os enums canônicos do pacote <modulo>-comuns
import {
StatusTicket,
TipoUsuarioInterno,
TipoManutencaoSoftware,
TipoMensagem,
} from "<modulo>-comuns";
if (ticket.status === StatusTicket.resolvido) { ... }
if (usuario.papel === TipoUsuarioInterno.administrador) { ... }
if (tarefa.tipo_manutencao === TipoManutencaoSoftware.corretiva_bug) { ... }
if (msg.tipo_mensagem === TipoMensagem.nota_interna_equipe) { ... }
Impacto
- Refatorações seguras assistidas pelo compilador TypeScript (
tsc --noEmit); - Zero regressões causadas por erros tipográficos em nomes de tabelas ou enums;
- Código fortemente tipado em todas as camadas (
*-comuns,*-back,*-fronte*-migracao).