Ir para o conteúdo

🗄️ Banco de Dados — PegasusImpercia

  • Motor: SQL Server 2017+
  • Banco: PegasusImpercia
  • Acesso: pymssql (api/analyzer/db.py), as_dict=True, tds_version=7.0
  • Padrão de acesso: o backend só lê/escreve via T-SQL direto — não há ORM sobre esse banco (o Django ORM só é usado para o sqlite interno de autenticação do painel)

Este catálogo é parcial

As tabelas abaixo foram documentadas conforme investigadas durante o desenvolvimento/suporte. Para um catálogo completo e atualizado, use a própria aba Estrutura BD do painel (lista todas as tabelas, views, procedures e índices em tempo real) ou rode struct_tools.list_tables() — ver Como gerar o inventário completo.

Funções analíticas

Todas recebem @DATA1 (início) e @DATA2 (fim) como parâmetros de período, e são consumidas pela aba Análises BI via api/analyzer/tools.py.

Função SQL Uso no painel
FN_DESPESAS_PAGAS_CENTRO_CUSTO(@DATA1, @DATA2) Despesas pagas agrupadas por centro de custo
FN_FATURAMENTO(@DATA1, @DATA2) Faturamento no período
FN_PRODUTIVIDADE_OBRA(@DATA1, @DATA2) Produtividade por obra
FN_RESERVAS_POR_MOVIMENTOS(@DATA1, @DATA2) Reservas de estoque por movimento
FN_RESERVAS_POR_MOVIMENTOS_USOECONSUMO(@DATA1, @DATA2) Idem, para materiais de uso e consumo

Tabelas conhecidas

MATERIAL

Cadastro geral de materiais/produtos (chave CODMATERIAL). Um material só existe "de verdade" numa filial quando também tem uma linha correspondente em MATERIALFILIAL.

MATERIALFILIAL

Vínculo material × filial — preço, CMV, estoque mínimo/máximo e flags específicos de cada filial. Chave composta (CODMATERIAL, FILIAL).

Causa comum de erro no Pegasus Corporate

"Material não encontrado na Filial!" significa que existe o material em MATERIAL, mas falta a linha correspondente em MATERIALFILIAL para aquela filial — geralmente porque o material foi cadastrado numa filial e nunca replicado/habilitado nas demais.

BLOQUEIOMOVIMENTO

Log de bloqueios de movimentação (ex: reserva insuficiente). Campo COMENTARIO (varchar) concatena uma linha por material/lote sem disponibilidade — pode crescer bastante em movimentos com muitos itens; se o campo for pequeno demais, o SQL Server trunca a inserção (String or binary data would be truncated).

Backup & manutenção

O ambiente usa os scripts de manutenção do Ola Hallengren (DatabaseBackup, IndexOptimize, DatabaseIntegrityCheck) via SQL Agent, com jobs próprios:

  • Backup FULL diário, DIFF a cada 4h, LOG a cada 15min (recovery model FULL)
  • IndexOptimize diário, CHECKDB semanal
  • Um job de restore diário (Baseteste) valida a cadeia de backup restaurando numa base de teste

Detalhes de incidentes e ajustes já feitos nesses jobs estão em Operações → Diagnóstico de Backups.

Como gerar o inventário completo

Com o backend rodando e conectado ao banco:

curl "http://localhost:8001/api/struct/tables/"      # todas as tabelas, linhas, tamanho
curl "http://localhost:8001/api/struct/columns/?table=NOME_DA_TABELA"
curl "http://localhost:8001/api/struct/views/"
curl "http://localhost:8001/api/struct/procedures/"

Ou direto pela aba Estrutura BD do painel.