Pular para conteúdo

Database

O CoreFlow Assets persiste dados em PostgreSQL por Django ORM. O diagrama descreve os modelos de domínio. BaseModel é abstrato e seus quatro campos são herdados por Ativo, Movimentação, Rodada e Item de Inventário. O app integracao_erp não possui tabela própria.

Diagrama entidade-relacionamento

erDiagram USER ||--o{ AUDIT_LOG : actor CATEGORY ||--o{ ASSET : classifies USER o|--o{ ASSET : responsible SECTOR o|--o{ ASSET : current_location ASSET ||--o{ MOVEMENT : history SECTOR o|--o{ MOVEMENT : origin SECTOR ||--o{ MOVEMENT : destination USER o|--o{ MOVEMENT : origin_owner USER o|--o{ MOVEMENT : destination_owner USER o|--o{ MOVEMENT : recorded_by UNIT ||--o{ SECTOR : contains UNIT o|--o{ INVENTORY_ROUND : scope SECTOR o|--o{ INVENTORY_ROUND : scope USER o|--o{ INVENTORY_ROUND : responsible INVENTORY_ROUND ||--o{ INVENTORY_ITEM : contains ASSET ||--o{ INVENTORY_ITEM : counts SECTOR o|--o{ INVENTORY_ITEM : expected_location SECTOR o|--o{ INVENTORY_ITEM : found_location USER o|--o{ INVENTORY_ITEM : recorded_by

Convenções físicas

  • Tabelas do Django: accounts_user, core_log, ativos_categoriaativo, ativos_ativo, localizacao_unidade, localizacao_setor, localizacao_movimentacaoativo, inventario_rodadainventario, inventario_iteminventario.
  • PKs dos modelos que herdam BaseModel são PostgreSQL uuid, gerados por UUID v4. Modelos restantes usam BigAutoField (bigint).
  • Django DateTimeField é armazenado como timestamp com fuso (USE_TZ=True). DateField é date; DecimalField(12,2) é numeric(12,2).
  • ForeignKeys recebem índices pelo Django. Índices e restrições compostas declarados nos models são descritos abaixo.
  • NN significa null=False; N significa que a coluna aceita NULL. Campos blank=True sem null=True continuam NOT NULL, com string vazia como valor em branco.

Campos herdados

core.BaseModel — abstrato

Campo Tipo PostgreSQL Null Default Uso
id uuid NN uuid.uuid4() PK; não editável.
created_at timestamptz NN preenchido na criação auto_now_add.
updated_at timestamptz NN atualizado ao salvar auto_now.
is_active boolean NN true Ativação/soft-delete lógico.

Estes campos aparecem nas tabelas ativos_ativo, localizacao_movimentacaoativo, inventario_rodadainventario e inventario_iteminventario.

Dicionário de dados

accounts_user — extensão de AbstractUser

Campo Tipo PostgreSQL Null Default FK / índice / regra
id bigint NN sequência PK.
username varchar(150) NN — Herdado; único.
password varchar(128) NN — Herdado; hash Django.
last_login timestamptz N NULL Herdado.
is_superuser boolean NN false Herdado.
first_name varchar(150) NN string vazia Herdado.
last_name varchar(150) NN string vazia Herdado.
email varchar(254) NN string vazia Herdado.
is_staff boolean NN false Herdado.
is_active boolean NN true Herdado.
date_joined timestamptz NN horário atual Herdado.
avatar varchar(100) N NULL Caminho do arquivo, upload em avatars/.
created_at timestamptz NN preenchido na criação auto_now_add.
updated_at timestamptz NN atualizado ao salvar auto_now.

groups e user_permissions são relações M2M herdadas e usam tabelas auxiliares padrão do Django. Cada User é vinculado a grupos de autorização.

core_log

Campo Tipo PostgreSQL Null Default FK / índice / regra
id bigint NN sequência PK.
usuario_id bigint N NULL FK accounts_user, SET NULL; índice automático.
acao varchar(2) NN — 3 alteração, 4 inclusão, 5 exclusão, 6 importação, 7 exportação.
descricao text NN — Descrição da operação.
criado_em timestamptz NN preenchido na criação auto_now_add; ordenação decrescente.

ativos_categoriaativo

Campo Tipo PostgreSQL Null Default FK / índice / regra
id bigint NN sequência PK.
nome varchar(100) NN — Único.
descricao text NN string vazia Opcional no formulário.
is_active boolean NN true Ativação lógica.
created_at timestamptz NN preenchido na criação auto_now_add.
updated_at timestamptz NN atualizado ao salvar auto_now.

ativos_ativo

Campo Tipo PostgreSQL Null Default FK / índice / regra
id uuid NN UUID v4 PK herdada de BaseModel.
created_at timestamptz NN preenchido na criação Campo herdado.
updated_at timestamptz NN atualizado ao salvar Campo herdado.
is_active boolean NN true Campo herdado; ativo/inativo.
codigo_patrimonial varchar(30) NN — Único; índice adicional declarado.
categoria_id bigint NN — FK ativos_categoriaativo, PROTECT; índice automático.
descricao varchar(255) NN — Descrição patrimonial.
marca varchar(100) NN string vazia Opcional.
modelo varchar(100) NN string vazia Opcional.
numero_serie varchar(100) NN string vazia Opcional.
data_aquisicao date N NULL Opcional.
valor_aquisicao numeric(12,2) N NULL Opcional.
fornecedor_nome varchar(150) NN string vazia Opcional.
numero_nota_fiscal varchar(100) NN string vazia Documento de aquisição opcional.
foto varchar(100) N NULL Caminho do arquivo em ativos/fotos/.
status varchar(20) NN ativo ativo, em_manutencao, baixado, extraviado; índice declarado.
centro_custo_erp_id varchar(50) N NULL Identificador externo opcional; sem FK local.
qr_code varchar(100) N NULL Caminho gerado em ativos/qrcodes/; não editável.
setor_id bigint N NULL FK localizacao_setor, PROTECT; localização corrente.
responsavel_id bigint N NULL FK accounts_user, SET NULL; responsável corrente.

codigo_patrimonial e status têm índices explícitos em Meta.indexes; código também é único. setor_id e responsavel_id só devem ser alterados por MovimentacaoService.

localizacao_unidade

Campo Tipo PostgreSQL Null Default FK / índice / regra
id bigint NN sequência PK.
nome varchar(120) NN — Único.
endereco varchar(255) NN string vazia Opcional.
is_active boolean NN true Ativação lógica.
created_at timestamptz NN preenchido na criação auto_now_add.
updated_at timestamptz NN atualizado ao salvar auto_now.

localizacao_setor

Campo Tipo PostgreSQL Null Default FK / índice / regra
id bigint NN sequência PK.
unidade_id bigint NN — FK localizacao_unidade, PROTECT; índice automático.
nome varchar(120) NN — Único dentro da unidade.
is_active boolean NN true Ativação lógica.
created_at timestamptz NN preenchido na criação auto_now_add.
updated_at timestamptz NN atualizado ao salvar auto_now.

Restrição: UNIQUE (unidade_id, nome), nome setor_unico_por_unidade.

localizacao_movimentacaoativo

Campo Tipo PostgreSQL Null Default FK / índice / regra
id uuid NN UUID v4 PK herdada de BaseModel.
created_at timestamptz NN preenchido na criação Campo herdado.
updated_at timestamptz NN atualizado ao salvar Campo herdado.
is_active boolean NN true Campo herdado.
ativo_id uuid NN — FK ativos_ativo, PROTECT; índice automático.
tipo varchar(20) NN — atribuicao, transferencia, emprestimo, devolucao.
setor_origem_id bigint N NULL FK localizacao_setor, PROTECT.
setor_destino_id bigint NN — FK localizacao_setor, PROTECT.
responsavel_origem_id bigint N NULL FK accounts_user, SET NULL.
responsavel_destino_id bigint N NULL FK accounts_user, SET NULL.
data_movimentacao timestamptz NN — Momento do evento.
data_prevista_devolucao date N NULL Usada em empréstimos.
data_devolucao_real date N NULL Preenchida na devolução.
motivo text NN string vazia Descrição opcional.
usuario_responsavel_id bigint N NULL FK accounts_user, SET NULL; usuário que registrou.
alerta_vencimento_enviado boolean NN false Evita repetir alerta do empréstimo.

Índices explícitos: (tipo, data_devolucao_real) e data_prevista_devolucao; todas as FKs também recebem índice automático.

inventario_rodadainventario

Campo Tipo PostgreSQL Null Default FK / índice / regra
id uuid NN UUID v4 PK herdada de BaseModel.
created_at timestamptz NN preenchido na criação Campo herdado.
updated_at timestamptz NN atualizado ao salvar Campo herdado.
is_active boolean NN true Campo herdado.
descricao varchar(200) NN — Nome/descrição da rodada.
unidade_id bigint N NULL FK localizacao_unidade, PROTECT; escopo opcional.
setor_id bigint N NULL FK localizacao_setor, PROTECT; escopo opcional.
status varchar(10) NN aberta aberta ou fechada.
data_abertura timestamptz NN — Momento de abertura.
data_fechamento timestamptz N NULL Momento de fechamento.
usuario_responsavel_id bigint N NULL FK accounts_user, SET NULL.

inventario_iteminventario

Campo Tipo PostgreSQL Null Default FK / índice / regra
id uuid NN UUID v4 PK herdada de BaseModel.
created_at timestamptz NN preenchido na criação Campo herdado.
updated_at timestamptz NN atualizado ao salvar Campo herdado.
is_active boolean NN true Campo herdado.
rodada_id uuid NN — FK inventario_rodadainventario, CASCADE.
ativo_id uuid NN — FK ativos_ativo, PROTECT.
encontrado boolean NN true false marca ativo não localizado ao fechar rodada.
setor_esperado_id bigint N NULL FK localizacao_setor, PROTECT.
setor_encontrado_id bigint N NULL FK localizacao_setor, PROTECT.
data_leitura timestamptz NN — Momento da leitura/registro.
usuario_id bigint N NULL FK accounts_user, SET NULL; usuário que bipou.

Restrição: UNIQUE (rodada_id, ativo_id), nome item_unico_por_rodada; torna a leitura do mesmo ativo idempotente em uma rodada.

Referências

  • Models: apps/core/models.py, apps/accounts/models.py, apps/ativos/models.py, apps/localizacao/models.py e apps/inventario/models.py.
  • Migrations: apps/*/migrations/.
  • Blueprint