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
29 de outubro de 2026
23 de setembro de 2026