# Cadastros: Fornecedores, Empresas, Transportadoras, Usuários, Vendedores, Técnicos

Este módulo fornece CRUDs completos (Create, Read, Update, Delete) com paginação, filtros, ordenação, busca, validação e feedback visual para as entidades de Cadastros.

## Rotas (HTML)
- `/cadastros/{entidade}`: View genérica para listagem e edição.
  - Entidades: `fornecedores`, `empresas`, `transportadoras`, `usuarios`, `vendedores`, `tecnicos`.

## API
- `GET /api/cadastros/{entidade}`: Lista registros com query params `page`, `limit`, `q`, `sort`, `dir`.
- `GET /api/cadastros/{entidade}/{id}`: Obtém registro por ID.
- `POST /api/cadastros/{entidade}`: Cria registro (campos mínimos variam por entidade; `nome` é obrigatório para todas, `email` validado se presente).
- `PUT /api/cadastros/{entidade}/{id}`: Atualiza registro com campos parciais.
- `DELETE /api/cadastros/{entidade}/{id}`: Exclui registro (conflitos de integridade retornam 409).

Todas as rotas (HTML e API) exigem permissões por entidade:
- `cadastros.{entidade}.read` para listagem e visualização.
- `cadastros.{entidade}.create` para criação.
- `cadastros.{entidade}.update` para atualização.
- `cadastros.{entidade}.delete` para exclusão.

## Permissões
Permissões por entidade são criadas via migration `modules/Cadastros/migrations/001_permissions_mysql.sql`.

## Esquema de Dados
Tabelas criadas em `modules/Cadastros/migrations/002_tables_mysql.sql`:
- `empresas`: dados básicos e contato.
- `fornecedores`: referenciam `empresas(id)` com `ON DELETE RESTRICT`.
- `transportadoras`: referenciam `empresas(id)`.
- `vendedores`: referenciam `empresas(id)`.
- `tecnicos`: referenciam `empresas(id)`.
- `usuarios`: usa tabela existente `users`.

## View Genérica
Arquivo `views/cadastros/entity.php` oferece:
- Busca, ordenação e paginação.
- Ações de Novo/Editar/Excluir com diálogo modal.
- Mensagens claras de erro e feedback.

## Testes
`tests/CadastrosEndpointsTest.php` cobre CRUD de `empresas` e `fornecedores` como referência.

## Manutenção
- Adicione novos campos nas entidades atualizando `CadastrosController::$entities`.
- Expanda validações conforme necessidade (ex.: CNPJ/CPF via `Gestoreasy\Core\Validation\Br`).
- Ajuste permissões e exibição no menu em `views/_layout.php` conforme política de acesso.