From 683b99305874956f341e95d14939e30c3810c83c Mon Sep 17 00:00:00 2001 From: Luiz Silva Date: Wed, 30 Sep 2026 20:04:14 -0300 Subject: [PATCH] . --- rules/uso-estrito-enums-tabelas.md | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 rules/uso-estrito-enums-tabelas.md diff --git a/rules/uso-estrito-enums-tabelas.md b/rules/uso-estrito-enums-tabelas.md new file mode 100644 index 0000000..ecb48bd --- /dev/null +++ b/rules/uso-estrito-enums-tabelas.md @@ -0,0 +1,70 @@ +# 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: +1. Utilizar a constante canônica `Tabelas` para toda e qualquer referência a tabelas no banco de dados (Knex, migrations, queries); +2. 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 +```typescript +db("tickets") +db("usuarios as u") +db("tarefas_manutencao") +``` + +### ✅ Correto +```typescript +import { Tabelas } from "prosa-comuns"; + +db(Tabelas.tickets) +db(`${Tabelas.usuarios} as u`) +db(Tabelas.tarefas_manutencao) +``` + +--- + +## 2. Comparações e Atribuições de Enums + +### ❌ Proibido +```typescript +if (ticket.status === "resolvido") { ... } +if (usuario.papel === "administrador") { ... } +if (tarefa.tipo_manutencao === "corretiva_bug") { ... } +if (msg.tipo_mensagem === "nota_interna_equipe") { ... } +``` + +### ✅ Correto +```typescript +import { + StatusTicket, + TipoUsuarioInterno, + TipoManutencaoSoftware, + TipoMensagem, +} from "prosa-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, front e migração).