ajustes na tabela de consulta

This commit is contained in:
Luiz Silva 2026-06-01 13:13:32 -03:00
parent aea3da6585
commit 1446d6225b
78 changed files with 17921 additions and 17580 deletions

View file

@ -0,0 +1,184 @@
---
name: criar-schema-zod
scope: global
description: >
Guia operacional para criar, organizar e manter schemas de validação Zod em projetos TypeScript.
---
# Skill: Criar Schema Zod
Use esta skill ao adicionar validação de dados em qualquer ponto de entrada do sistema — API, formulário, webhook, importação, fila ou variáveis de ambiente.
---
## PASSO 1 — Identificar a Entrada Externa
Determinar qual dado externo precisa de validação:
| Tipo de entrada | Onde validar |
|---|---|
| Corpo de requisição (POST/PUT) | Handler da rota, antes de qualquer lógica |
| Query/path params | Handler da rota |
| Formulário frontend | Antes de chamar a API |
| Dados de fila (BullMQ) | No processador da fila |
| Arquivo importado (CSV/JSON) | No parser, linha a linha |
| Variáveis de ambiente | No boot da aplicação |
| Resposta de API externa | Após receber a resposta |
---
## PASSO 2 — Localizar ou Criar o Schema no Pacote Comuns
Schemas compartilhados vivem no pacote `*-comuns`:
```
projeto-comuns/src/tabelas/
├── usuarios/
│ ├── zUsuarioCriar.ts
│ ├── zUsuarioEditar.ts
│ └── index.ts
└── index.ts
```
### 2.1. Verificar se já existe
```bash
rg "z{NomeDaEntidade}" --include='*.ts' -l
```
Se já existir → reutilizar ou compor a partir dele (`.extend()`, `.pick()`, `.partial()`).
### 2.2. Criar o schema
```typescript
import { z } from "zod"
export const zUsuarioCriar = z.object({
nome: z.string().trim().min(1, "Nome é obrigatório"),
email: z.string().email("E-mail inválido"),
ativo: z.boolean().default(true),
})
```
### 2.3. Nomenclatura obrigatória
| Padrão | Uso |
|---|---|
| `z{Entidade}Criar` | Criação |
| `z{Entidade}Editar` | Edição (geralmente `.partial()`) |
| `z{Entidade}Filtro` | Filtros de listagem |
| `z{Entidade}Resposta` | Resposta de API |
| `z{Entidade}Params` | Parâmetros de rota |
| `z{Modulo}Config` | Configuração |
| `z{Modulo}Ambiente` | Variáveis de ambiente |
---
## PASSO 3 — Derivar o Tipo com `z.infer<>`
```typescript
export type tipoUsuarioCriar = z.infer<typeof zUsuarioCriar>
```
**Nunca** criar um `interface` ou `type` manual separado do schema. O tipo **sempre** deriva do schema.
---
## PASSO 4 — Implementar `safeParse` no Ponto de Entrada
### Backend (Express)
```typescript
import { zUsuarioCriar } from "projeto-comuns/tabelas/usuarios"
app.post("/usuarios", async (req, res) => {
const resultado = zUsuarioCriar.safeParse(req.body)
if (!resultado.success) {
return res.status(400).json({ erro: resultado.error.issues[0].message })
}
const usuario = await criarUsuario(resultado.data)
return res.json(usuario)
})
```
### Frontend (Vue)
```typescript
import { zUsuarioCriar } from "projeto-comuns/tabelas/usuarios"
const salvar = async () => {
const resultado = zUsuarioCriar.safeParse(formulario.value)
if (!resultado.success) {
erros.value = resultado.error.flatten().fieldErrors
return
}
await api.post("/usuarios", resultado.data)
}
```
### Variáveis de ambiente
```typescript
const zAmbiente = z.object({
DATABASE_URL: z.string().url(),
REDIS_HOST: z.string().default("localhost"),
NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
})
// Aqui o throw é desejável — a app não deve subir com env inválido
export const ambiente = () => zAmbiente.parse(process.env)
```
---
## PASSO 5 — Compor Schemas Derivados
Quando precisar de variações do mesmo schema, **compor** em vez de duplicar:
```typescript
// Schema base
const zProduto = z.object({
nome: z.string().trim().min(1),
preco: z.coerce.number().positive(),
categoria: z.string(),
})
// Edição: todos os campos opcionais
const zProdutoEditar = zProduto.partial()
// Resposta: base + campos gerados
const zProdutoResposta = zProduto.extend({
codigo: z.string().uuid(),
criadoEm: z.string().datetime(),
})
// Filtro: subset de campos opcionais
const zProdutoFiltro = zProduto.pick({ categoria: true }).partial()
```
---
## PASSO 6 — Validar Tipagem
```bash
npx tsc --noEmit
```
Zero erros = concluído.
---
## Checklist Final
- [ ] O schema está no pacote `*-comuns` (quando compartilhado entre front/back)?
- [ ] O tipo é derivado do schema com `z.infer<>`?
- [ ] A validação usa `safeParse` (exceto em boot/middleware)?
- [ ] A nomenclatura segue o padrão `z{Entidade}{Acao}`?
- [ ] Transformações (trim, coerce, default) estão no schema, não no handler?
- [ ] Schemas derivados usam composição (.partial, .extend, .pick), não duplicação?
- [ ] `tsc --noEmit` passa sem erros?
## Referências
- Rule: `.agent/rules/zod-validacao-padrao.global.md`
- Rule: `.agent/rules/typescript-sem-any.global.md`

View file

@ -1,6 +1,7 @@
---
name: diagnosticar-erros-build
scope: global
updatedAt: "2026-06-01"
description: >
Guia operacional para diagnosticar e resolver erros de build em cascata em monorepos TypeScript.
---
@ -181,5 +182,5 @@ pnpm install && pnpm build
## Referências
- Rules: `.agent/rules/typescript-sem-any.global.md`
- Workflow: `.agent/workflows/documentar-codigo.global.md`
- Skill: `.agent/skills/mapear-codigo-fonte/SKILL.md`
- Workflow: `.agent/workflows/otimizar-codigos.global.md`
- Skill: `.agent/skills/mapear-codigo-fonte.global/SKILL.md`

View file

@ -1,6 +1,7 @@
---
name: documentar-decisao-tecnica
scope: global
updatedAt: "2026-06-01"
description: >
Guia operacional para registrar decisões técnicas e arquiteturais como ADRs (Architecture Decision Records).
---
@ -157,4 +158,4 @@ Antes de considerar completo:
## Referências
- Workflow: `.agent/workflows/aprimorar-IA.global.md` (seção de classificação de artefatos)
- Workflow: `.agent/workflows/documentar-codigo.global.md`
- Workflow: `.agent/workflows/otimizar-codigos.global.md`

View file

@ -0,0 +1,131 @@
---
name: documentar-dominio-modulo
scope: global
updatedAt: "2026-06-01"
description: >
Guia para documentar o domínio científico/técnico de cada módulo SaaS,
garantindo que o agente compreenda a terminologia e as regras do domínio
ao gerar código, texto e interface.
---
# Skill: Documentar Domínio de um Módulo
Use esta skill ao iniciar um novo módulo SaaS ou ao perceber que o agente não conhece o vocabulário e as regras do domínio que o módulo aborda.
Cada módulo opera em uma disciplina diferente da ciência/gestão ambiental (licenciamento, gases de efeito estufa, resíduos, projetos, etc.). O agente precisa de uma **base factual do domínio** para gerar labels, mensagens, regras de negócio e textos comerciais corretos.
---
## PASSO 1 — Identificar o Domínio do Módulo
Determinar qual área da ciência/gestão o módulo aborda:
| Exemplo de módulo | Domínio |
|---|---|
| Licenciamento | Licenciamento ambiental (LP, LI, LO, condicionantes) |
| GEE | Gases de Efeito Estufa (inventário, emissões, fatores) |
| Resíduos | Gestão de resíduos sólidos (PGRS, MTR, classificação) |
| Outorga | Outorga de uso de recursos hídricos |
| Flora/Fauna | Monitoramento de biodiversidade |
| Projetos | Gestão de projetos ambientais e consultorias |
---
## PASSO 2 — Criar o Arquivo de Domínio
Criar em `.agent/memoria/dominio-<modulo>.md`:
```markdown
# Domínio: <Nome do Módulo>
## Área de Conhecimento
Breve descrição da disciplina (1-3 linhas).
## Glossário do Módulo
| Termo | Definição | Sigla |
|---|---|---|
| Licença Prévia | Autorização para planejamento do empreendimento | LP |
| Licença de Instalação | Autorização para início das obras | LI |
| ... | ... | ... |
## Entidades Principais
Lista das entidades de negócio do módulo com descrição e relações:
- **Empreendimento**: unidade física onde ocorre a atividade potencialmente poluidora
- **Licença**: autorização ambiental vinculada a um empreendimento
- **Condicionante**: obrigação imposta pelo órgão ambiental na licença
- ...
## Legislação Aplicável
| Norma | Descrição | Relevância |
|---|---|---|
| Lei 6.938/1981 | Política Nacional do Meio Ambiente | Base legal do licenciamento |
| Resolução CONAMA 237/1997 | Regulamenta o licenciamento ambiental | Tipos de licença, prazos |
| ... | ... | ... |
## Regras de citação legal
- Formato: "Resolução CONAMA nº 237/1997, art. 8º, inciso I"
- Toda sigla na primeira ocorrência com nome por extenso
- Legislação federal > estadual > municipal (hierarquia)
## Fluxos do Domínio
Descrever os processos-chave que o módulo implementa:
1. Solicitação de licença → Análise técnica → Emissão → Monitoramento
2. Cadastro de condicionante → Acompanhamento de prazo → Cumprimento
## Vocabulário de Interface
Termos que devem ser usados em labels, botões e mensagens:
| Contexto | ❌ Genérico | ✅ Correto para o módulo |
|---|---|---|
| Campo de nome | "Nome" | "Razão Social do Empreendedor" |
| Status | "Ativo/Inativo" | "Vigente/Vencida/Suspensa" |
| Ação principal | "Criar novo" | "Solicitar nova licença" |
| Lista vazia | "Nenhum registro" | "Nenhuma licença cadastrada" |
```
---
## PASSO 3 — Validar com o Operador
Antes de consolidar:
- [ ] Os termos do glossário estão corretos para o contexto do módulo?
- [ ] As entidades cobrem os conceitos centrais?
- [ ] A legislação listada é a principal (não exaustiva)?
- [ ] O vocabulário de interface reflete como o usuário fala no dia a dia?
---
## PASSO 4 — Conectar com as Rules
Após documentar o domínio:
1. Verificar se labels e mensagens no código usam o vocabulário definido (rule `mensagens-usuario.global.md`)
2. Verificar se schemas Zod têm mensagens de erro no idioma do domínio (rule `zod-validacao-padrao.global.md`)
3. Verificar se os arquivos `.ajuda.md` usam termos do glossário (workflow `adicionar-ajuda.global.md`)
4. Verificar se textos comerciais citam a legislação corretamente (workflow `comercial.global.md`)
---
## Checklist Final
- [ ] Arquivo `dominio-<modulo>.md` criado em `.agent/memoria/`?
- [ ] Glossário com pelo menos os 10 termos centrais do módulo?
- [ ] Entidades principais listadas com descrição?
- [ ] Legislação base documentada com formato de citação?
- [ ] Vocabulário de interface definido (labels, status, ações, empty states)?
- [ ] Operador validou a terminologia?
## Referências
- Rule: `.agent/rules/mensagens-usuario.global.md`
- Rule: `.agent/rules/regras-negocio-md.global.md`
- Workflow: `.agent/workflows/comercial.global.md`
- Workflow: `.agent/workflows/adicionar-ajuda.global.md`

View file

@ -1,5 +1,7 @@
---
name: documentar-regras-negocio.global
name: documentar-regras-negocio
scope: global
updatedAt: "2026-06-01"
description: >
Guia operacional para criar, preencher e manter arquivos {modulo}.regras-negocio.md
co-localizados com módulos TypeScript de lógica de negócio complexa.
@ -206,7 +208,5 @@ Percorrer cada regra listada no `.md` e verificar que há código correspondente
## Referências
- Rule: `.agent/rules/regras_negocio_md.global.md`
- Rule: `.agent/rules/regras-negocio-md.global.md`
- Workflow: `.agent/workflows/documentar-regras-negocio.global.md`
- Skill: `.agent/skills/consultar-banco-knex/SKILL.md` (orderBy em whereIn)
- ADR: `.agent/memoria/adr-003-crons-complexos-compilacao-execucao.md`

View file

@ -1,6 +1,7 @@
---
name: mapear-codigo-fonte
scope: global
updatedAt: "2026-06-01"
description: >
Guia operacional para mapear, navegar e compreender a estrutura de um monorepo TypeScript.
---
@ -156,4 +157,4 @@ Descrever como os dados fluem entre pacotes.
## Referências
- Rules: `.agent/rules/typescript-sem-any.global.md`
- Workflow: `.agent/workflows/documentar-codigo.global.md`
- Workflow: `.agent/workflows/otimizar-codigos.global.md`