# 🚀 PROMPT PADRÃO PARA CRIAR NOVOS CRUDs

## 🎯 PADRÕES AUTOMÁTICOS DO SISTEMA

**⚠️ CRÍTICO:** Todos os CRUDs usam SEMPRE:

| Campo | Tipo | Padrão | Comportamento |
|-------|------|--------|--------------|
| **id** | serial4 | Auto-increment | Primary key obrigatória |
| **status** | int4 | 0 (Ativo) | 0=Ativo, 2=Excluído (soft delete) |
| **empresa** | int4 | Obrigatório | Filtrar sempre na query |

**Validações Automáticas:**
- `visualizar` → Listar registros
- `criar` → Inserir novo registro
- `editar` → Alterar registro existente
- `deletar` → Soft delete com UPDATE status=2

**Delete NUNCA deleta fisicamente:**
```sql
UPDATE public.dim_novo_modulo SET status=2 WHERE id=$id
```

---

## ⚡ Instruções Rápidas

1. **Preparar o DDL** da sua tabela
2. **Copiar o prompt abaixo**
3. **Substituir os valores:**
   - `dm_novo_modulo` → seu nome (ex: `dm_cliente`, `dm_veiculo`)
   - `Novo Módulo` → seu rótulo (ex: `Cliente`, `Veículo`)
   - **DDL** → sua CREATE TABLE
   - **Campos** → seus campos específicos
4. **Colar no Copilot**
5. **Revisar e aprovar as mudanças**

---

## 📋 PROMPT COMPLETO (Copie e adapte)

```
Crie uma tela de cadastro seguindo EXATAMENTE o padrão de dm_motorista e dm_grupopessoa.

**PADRÕES AUTOMÁTICOS APLICAR:**
- id: serial4 (auto-increment, primary key)
- status: int4 (0=ativo padrão, 2=excluído via soft delete)
- empresa: int4 (sempre filtrar WHERE empresa=$codempresa)
- delete.php: UPDATE status=2 (nunca DELETE físico)

**NOME DO MÓDULO:** dm_novo_modulo
**RÓTULO DA PÁGINA:** "Novo Módulo"

**DDL DA TABELA:**
CREATE TABLE public.dim_novo_modulo (
	id serial4 NOT NULL,
	empresa int4 NOT NULL,
	descricao varchar NOT NULL,
	status int4 DEFAULT 0 NOT NULL,
	CONSTRAINT dim_novo_modulo_pk PRIMARY KEY (id)
);

**ARQUIVOS A CRIAR:**

1. **select.php** - Query e filtros
   - Verificar permissão em $_SESSION['rotina']
   - Query com WHERE empresa = $codempresa AND status != 2
   - Aplicar filtros: id, descricao, status
   - ORDER BY descricao ASC
   - Resultado em $re_postgree_dim_novo_modulo

2. **index.php** - Listagem com permissões
   - require ('../include/validacaopermissao.php')
   - $rot = 'dm_novo_modulo'
   - validarPermissaoOuRedirecionar($rot, 'visualizar')
   - Buscar permissões 1x: $permissoes = obterTodasPermissoes($rot)
   - Loop SEM queries (usar $perm_editar e $perm_deletar)
   - Botões Alterar e Excluir condicionais
   - Mostrar APENAS registros com status != 2

3. **cad.php** - Formulário criar/editar
   - Validar strpos($rotina,'dm_novo_modulo')
   - validarPermissaoOuRedirecionar($rot, 'visualizar') após include
   - GET com $action == 1 para editar, 0 para novo
   - Form class="form-horizontal form-bordered"
   - Campo status como SELECT (0=Ativo, 2=Excluído)
   - Include('../include/cad.php')

4. **insert.php** - Salvar/Atualizar
   - require ('../include/validacaopermissao.php')
   - $rot = 'dm_novo_modulo'
   - Se $action == 1: validarPermissaoOuRedirecionar($rot, 'editar')
   - Else: validarPermissaoOuRedirecionar($rot, 'criar')
   - Ao inserir: DEFAULT status=0 (ou setar explicitamente)
   - Alert de sucesso: "Cadastro realizado com sucesso"
   - Redirect para index.php

5. **delete.php** - Soft Delete (NUNCA DELETE FÍSICO)
   - require ('../include/validacaopermissao.php')
   - validarPermissaoOuRedirecionar($rot, 'deletar')
   - **SEMPRE usar:** UPDATE public.dim_novo_modulo SET status=2 WHERE id=$id
   - NUNCA usar DELETE FROM
   - Alert: "Registro excluído com sucesso"
   - Redirect para index

6. **filtro.php** - Filtros avançados
   - Padrão dm_motorista exatamente
   - Include ('../include/filtros_db.php')
   - Include ('select.php')
   - Breadcrumbs: Cadastro > Novo Módulo > Filtro
   - Form form-horizontal form-bordered
   - SelectTwo para status

**PADRÕES OBRIGATÓRIOS:**
- Todos arquivos: require ('../include/autenticacao.php')
- cad.php, insert.php, delete.php: require ('../include/validacaopermissao.php')
- Definir $rot = 'dm_novo_modulo' em cad.php, insert.php, delete.php
- Usar validarPermissaoOuRedirecionar() para bloqueios
- Index otimizado: permissões fora do loop
- Insert com alert JavaScript de sucesso
- Filtro com padrão de dm_motorista (card-header, breadcrumbs)
- Variáveis de sessão: $codempresa, $usuario, $rotina, $idgrupo
```

---

## 🔄 Exemplo de Adapção (dm_cliente)

### Seu DDL:
```sql
CREATE TABLE public.dim_cliente (
	id serial4 NOT NULL,
	empresa int4 NOT NULL,
	nome varchar NOT NULL,
	cnpj varchar,
	email varchar,
	telefone varchar,
	status int4 DEFAULT 0 NOT NULL,
	CONSTRAINT dim_cliente_pk PRIMARY KEY (id)
);
```

### Seu Prompt Adaptado:
```
Crie uma tela de cadastro seguindo EXATAMENTE o padrão de dm_motorista e dm_grupopessoa.

**NOME DO MÓDULO:** dm_cliente
**RÓTULO DA PÁGINA:** "Cliente"

**DDL DA TABELA:**
CREATE TABLE public.dim_cliente (
	id serial4 NOT NULL,
	empresa int4 NOT NULL,
	nome varchar NOT NULL,
	cnpj varchar,
	email varchar,
	telefone varchar,
	status int4 DEFAULT 0 NOT NULL,
	CONSTRAINT dim_cliente_pk PRIMARY KEY (id)
);

**CAMPOS DO FORMULÁRIO:**
- Nome (text, obrigatório)
- CNPJ (text, opcional)
- Email (text, opcional)
- Telefone (text, opcional)
- Status (select: Ativo/Inativo)

[resto do prompt padrão...]
```

---

## ✅ Checklist Pós-Criação

- [ ] Pasta criada: `/dm_novo_modulo/`
- [ ] Arquivos gerados:
  - [ ] select.php
  - [ ] index.php
  - [ ] cad.php
  - [ ] insert.php
  - [ ] delete.php
  - [ ] filtro.php
- [ ] Teste funcional:
  - [ ] index.php → lista vazia ✓
  - [ ] cad.php → novo registro ✓
  - [ ] insert → salva com sucesso ✓
  - [ ] cad.php?id=1 → edita ✓
  - [ ] delete.php?id=1 → deleta ✓
- [ ] Permissões configuradas em `/sis004a_grupopermissao/`
- [ ] Documentação atualizada

---

## 📞 Suporte

Se encontrar erros:
1. Verificar `/include/teste_validacaopermissao.php`
2. Revisar padrão em `/dm_motorista/`
3. Consultar guia completo em `/GUIA_CRIAR_NOVO_CRUD.md`

---

**Versão:** 1.0  
**Última atualização:** 27/01/2026  
**Status:** Pronto para Produção ✅
