Database¶
O ERP usa Django ORM sobre PostgreSQL. A maioria dos agregados herda apps.core.models.BaseModel, com UUID, timestamps e is_active; usuários, perfis e políticas têm ciclo próprio. O catálogo foi conferido nos models.py do repositório coreflow-erp.
Diagrama entidade-relacionamento¶
PedidoVenda e PedidoCompra são documentos independentes, com itens próprios. TituloFinanceiro aceita cliente ou fornecedor conforme o tipo; origem/origem_id preservam referência textual para documentos de outros módulos.
Dicionário de dados¶
| Modelo / tabela | Campos persistidos (tipo; nulo; default) | FK, índices e restrições |
|---|---|---|
User / users |
id: uuid; name: varchar(255); email: varchar; avatar: image (sim); campos de autenticação |
PK UUID; e-mail UNIQUE e identificador de login |
Role / roles |
id: uuid; name: varchar(120); code: slug UNIQUE; description: text=""; timestamps; M2M users |
tabela intermediária Django para usuários/perfis |
PermissionPolicy / permission_policies |
id: uuid; role: uuid; module: varchar(80); seis flags booleanas default false |
role → Role; UNIQUE (role, module) |
Company / companies |
id: uuid; legal_name; trade_name/state_registration/municipal_registration/email/phone; document; is_headquarters=true; timestamps; is_active=true |
documento e nomes validados no model |
CompanyAddress / company_addresses |
id: uuid; company: uuid; zipcode/street/number/complement/district/city/state |
company → Company CASCADE |
Cliente / clientes |
id: uuid; tipo=PF; nome; email/telefone/documento; base comum |
usado por vendas e financeiro |
ContatoCliente / contatos_cliente |
id: uuid; cliente; nome, e-mail, telefone e cargo |
FK para cliente |
Fornecedor / fornecedores |
id: uuid; razão/nome; documento; e-mail; telefone; contatos |
origem de compras e títulos |
UnidadeMedida / unidades_medida |
id: uuid; codigo: varchar(10); nome: varchar(60); casas_decimais: smallint |
codigo UNIQUE |
CategoriaProduto / categorias_produto |
id: uuid; nome: varchar(120); categoria_pai: uuid (sim) |
auto-FK para categoria pai, SET_NULL |
Produto / produtos |
id: uuid; sku: varchar(40) UNIQUE; nome: varchar(255); descricao: text=""; categoria: uuid (sim); unidade: uuid; codigo_barras (sim); preco_custo/preco_venda: numeric(12,2); controla_estoque=true; estoque_minimo: numeric(12,3)=0 |
categoria SET_NULL; unidade PROTECT; índices por SKU/código/nome |
SaldoEstoque / saldos_estoque |
id: uuid; produto; empresa; quantidades e saldos |
FKs produto/empresa; combinação produto/empresa única |
MovimentoEstoque / movimentos_estoque |
id: uuid; produto/empresa; tipo; quantidade; custo; documento; data |
histórico de entradas/saídas |
PedidoVenda / pedidos_venda |
id: uuid; numero: varchar(20) UNIQUE; cliente; empresa; status=rascunho; emissão/vencimento; valor_total/valor_desconto/valor_liquido: numeric(14,2)=0; vendedor (sim); observações |
cliente/empresa PROTECT; vendedor SET_NULL |
ItemPedidoVenda / itens_pedido_venda |
id: uuid; pedido; produto; quantidade/preco_unitario/desconto/total: numeric |
pedido CASCADE; produto PROTECT |
PedidoCompra / pedidos_compra |
id: uuid; numero; fornecedor; empresa; status=rascunho; emissão/previsão; valor_total=0; comprador (sim); observações |
fornecedor/empresa PROTECT; comprador SET_NULL |
ItemPedidoCompra / itens_pedido_compra |
id: uuid; pedido; produto; quantidade/custo_unitario/total: numeric |
pedido CASCADE; produto PROTECT |
CentroCusto / centros_custo |
id: uuid; codigo; nome; descricao: text=""; base comum |
classificação financeira |
PlanoContas / planos_contas |
id: uuid; codigo; nome; natureza; base comum |
classificação contábil |
TituloFinanceiro / titulos_financeiros |
id: uuid; tipo; cliente/fornecedor (nulos); descrição/documento; emissão/vencimento; valor/valor_pago: numeric (valor_pago=0); status=aberto; centro/plano (nulos); observações; origem/origem_id |
cliente/fornecedor/classificadores SET_NULL |
Pagamento / pagamentos_financeiros |
id: uuid; titulo: uuid; data (data atual); valor: numeric; forma; observações |
titulo → TituloFinanceiro CASCADE |
LogAuditoria / logs_auditoria |
id: uuid; usuário (sim); módulo/ação; entidade/id; descrição; dados_antes/dados_depois: jsonb (sim); IP (sim); user-agent; base comum |
usuário SET_NULL; índices por módulo/ação/data |
Regras de nulo e defaults¶
Campos textuais opcionais são normalmente NOT NULL com default vazio quando o model declara blank=True, default="". null=True é usado para relações e valores realmente ausentes. Os nomes de tabela refletem o db_table dos models quando explicitado; esta página documenta o schema implementado, não funcionalidades futuras.