# 📋 CHEATSHEET - Padrões em 1 Folha

**Imprima e cole na parede! ✅**

---

## 🗄️ BANCO DE DADOS

```sql
CREATE TABLE public.dim_novo (
	id serial4 PRIMARY KEY,
	empresa int4 NOT NULL,
	descricao varchar,
	tipoconta int4,      -- 1=Ativo, 2=Sintético, 3=Analítico, 4=Detalhe, 5=Fechado
	natureza int4,       -- 0=Débito, 1=Crédito
	status int4 DEFAULT 0 NOT NULL
);
```

---

## 📝 VALORES PADRÃO

### Status
| Valor | Significado |
|-------|------------|
| **0** | Ativo (padrão) |
| **2** | Excluído (soft delete) |

### Campos com Múltiplos Valores (INT)
| Campo | Valor | Descrição |
|-------|-------|-----------|
| tipoconta | 1-5 | Ativo, Sintético, Analítico, Detalhe, Fechado |
| natureza | 0 | Débito |
| natureza | 1 | Crédito |

**⚠️ Regra:** Armazene INT no banco, exiba descrição via CASE WHEN no SQL

---

## 📂 ESTRUTURA DE PASTAS

```
dm_novo/
├── select.php    ← Query + filtros
├── index.php     ← Listagem
├── cad.php      ← Formulário
├── insert.php   ← Salvar/atualizar
├── delete.php   ← Soft delete (UPDATE status=2)
└── filtro.php   ← Filtros avançados
```

---

## ✏️ ARQUIVO POR ARQUIVO

### select.php
```php
require ('../include/autenticacao.php');
if(strpos($rotina, 'dm_novo') === false) exit;

$query = "SELECT * FROM dim_novo 
          WHERE empresa=$codempresa AND status != 2";
$re = pg_query($bdcon, $query);
```

---

### index.php
```php
require ('../include/validacaopermissao.php');
$rot = 'dm_novo';
validarPermissaoOuRedirecionar($rot, 'visualizar');

$permissoes = obterTodasPermissoes($rot);  // 1x antes loop
$perm_editar = $permissoes['editar'];
$perm_deletar = $permissoes['deletar'];

foreach($re as $row) {
	if($perm_editar) echo "<a href='cad.php?id=".$row['id']."'>Editar</a>";
	if($perm_deletar) echo "<a href='delete.php?id=".$row['id']."'>Deletar</a>";
}
```

---

### cad.php
```php
require ('../include/validacaopermissao.php');
$rot = 'dm_novo';
validarPermissaoOuRedirecionar($rot, 'visualizar');
include ('../include/inicio.php');
```

---

### insert.php
```php
require ('../include/validacaopermissao.php');
$rot = 'dm_novo';
$empresa = $_SESSION['Codempresa'];

if($action == 1) {
	validarPermissaoOuRedirecionar($rot, 'editar');
	$sql = "UPDATE dim_novo SET descricao='$desc' WHERE id=$id AND empresa=$empresa";
} else {
	validarPermissaoOuRedirecionar($rot, 'criar');
	$sql = "INSERT INTO dim_novo (empresa, descricao, status) VALUES ($empresa, '$desc', 0)";
}

pg_query($bdcon, $sql);
echo "<script>alert('Sucesso'); location='index';</script>";
```

---

### delete.php ⚠️ CRÍTICO
```php
require ('../include/validacaopermissao.php');
$rot = 'dm_novo';
$empresa = $_SESSION['Codempresa'];

validarPermissaoOuRedirecionar($rot, 'deletar');

// ✅ SEMPRE UPDATE status=2
$sql = "UPDATE dim_novo SET status=2 WHERE id=$id AND empresa=$empresa";

pg_query($bdcon, $sql);
echo "<script>alert('Excluído'); location='index';</script>";
```

---

## 🔐 4 PERMISSÕES OBRIGATÓRIAS

```php
validarPermissaoOuRedirecionar($rot, 'visualizar');  // select, cad, index
validarPermissaoOuRedirecionar($rot, 'criar');       // insert (else)
validarPermissaoOuRedirecionar($rot, 'editar');      // insert (if $action==1)
validarPermissaoOuRedirecionar($rot, 'deletar');     // delete
```

---

## ✅ CHECKLIST RÁPIDO

```
[ ] DDL: id (serial), status (DEFAULT 0), empresa
[ ] select.php: WHERE empresa=$codempresa AND status != 2
[ ] insert.php: valida 'criar' e 'editar'
[ ] delete.php: UPDATE status=2 (NUNCA DELETE)
[ ] index.php: obterTodasPermissoes() 1x antes loop
[ ] cad.php: validar 'visualizar'
```

---

## 🚫 NÃO FAZER / ❌ ERROS COMUNS

```php
// ❌ ERRADO
DELETE FROM dim_novo WHERE id=$id;

// ✅ CORRETO
UPDATE dim_novo SET status=2 WHERE id=$id;

// ❌ ERRADO
SELECT * FROM dim_novo WHERE empresa=$codempresa;

// ✅ CORRETO
SELECT * FROM dim_novo WHERE empresa=$codempresa AND status != 2;

// ❌ ERRADO
$sql = "INSERT INTO dim_novo (descricao) VALUES ('$desc')";

// ✅ CORRETO
$sql = "INSERT INTO dim_novo (empresa, descricao, status) VALUES ($empresa, '$desc', 0)";
```

---

## 🔧 RESTAURAR REGISTRO

```sql
-- Ver deletados
SELECT * FROM dim_novo WHERE empresa=1 AND status=2;

-- Restaurar
UPDATE dim_novo SET status=0 WHERE id=123;

-- Listar todos
SELECT * FROM dim_novo WHERE empresa=1;
```

---

## 📞 REFERÊNCIA

| Problema | Arquivo |
|----------|---------|
| Como pedir novo CRUD? | COMO_PEDIR_NOVO_CRUD.md |
| Prompt completo? | PROMPT_PADRAO_NOVO_CRUD.md |
| Entender padrões? | PADROES_SISTEMA.md |
| Código pronto? | SNIPPETS_CODIGO_PADRAO.md |
| Soft delete? | FAQ_STATUS_SOFTDELETE.md |
| Checklist? | GUIA_CRIAR_NOVO_CRUD.md |
| Índice tudo? | INDICE_PADROES.md |

---

**LEMBRE-SE:** Soft delete SEMPRE! `UPDATE status=2`, NUNCA `DELETE FROM`

---

*Imprima, cole na parede, compartilhe com o time! 📌*
