Glossário do projeto¶
Vocabulário do domínio comercial de combustíveis (OnPetro) que este app usa. Termos da plataforma X-Adm (Forgejo, Coolify, Garage…) não são redefinidos aqui — linkam para o glossário da plataforma.
Tipos de arquivo¶
Cada envio é um .zip com um ou mais .xlsx; o ArquivoDetector reconhece o tipo
de cada planilha pelo conteúdo (abas e cabeçalhos) e pelo nome, sem o operador
informar nada. Ordem de prioridade e critérios em
Detecção do tipo.
- RELATORIO18
- Relatório principal de vendas. Alimenta o fato
bi_movimentoe, de passagem, garante os cadastros relacionados (bi_filial,bi_cliente,bi_vendedor,bi_produto). Faz DELETE seletivo do período antes do UPSERT. Detectado pelo nome do arquivo (relatorio,relatórioourel 18). - MARGEM_CONSOLIDADA
- Relatório de custo/inventário do período. Alimenta
bi_custo_inventarioe complementabi_movimentodo período. Detectado pelo nome (margem consolidada/margem_consolidada). - MARGEM_DIA
- Variante diária da margem. Complementa
bi_movimento. Detectado pelo nome no padrãomargem -(espaço-hífen-espaço, convenção da equipe). - META
- Metas de litros/margem por vendedor e período. Alimenta
bi_meta(upsert por vendedor + data). Detectado pelo nome (meta, quando nenhum tipo mais específico bateu). - META_FERNANDO
- Variante de meta por vendedor, numa aba específica (
Meta por vendedorou colunaTipo de meta). Também alimentabi_meta. Tem a prioridade mais alta na detecção. - POSTOS
- Cadastro de postos revendedores (com vinculação a distribuidor). Alimenta
bi_posto(upsert por CNPJ). Detectado pela colunaVinculação a Distribuidor. - TRR
- Cadastro de Transportadores-Revendedores-Retalhistas. Alimenta
bi_trr(upsert por CNPJ). Detectado pela colunaTipo de InstalaçãoouQualificação da Empresa(a ANP renomeou a coluna ~2026). - COMPRAS
- Relação de compras de combustível (itens de NF). Alimenta
bi_fornecedor(upsert por CNPJ) ebi_compra(sem chave natural: substitui o período do arquivo). Só entram linhas de combustível (produtoONU …). Detectado por uma aba chamadaCompras, antes de qualquer regra por nome. - COTA_PETROBRAS
- Cota mensal de volume (m³) por polo e produto, uma aba por ano. Alimenta
bi_cota_petrobraspor full-replace (a planilha é a matriz inteira). Detectado por uma aba com nome de ano cujo cabeçalho começa comPOLO/PRODUTO/JANEIRO.
Domínio comercial¶
- Movimento
- Fato central de vendas (
bi_movimento): uma linha por NF × produto × cliente × filial. Carrega quantidade, preço, margem, frete, taxa administrativa, prazo, além de UF/município de destino da venda (não da filial). - Filial
- Unidade da OnPetro que originou a venda (
bi_filial, chavecod_filial). Os relatórios XLSX só trazem o código da filial — município/UF da própria filial são cadastrados à parte (docs/privado/seed-filiais.sql); as colunas UF/ Município dos relatórios referem-se ao destino, e vão parabi_movimento. - Vendedor
- Vendedor responsável pela venda e alvo das metas (
bi_vendedor, chavecod_vendedor). Ligado abi_movimentoe abi_meta. - Meta
- Objetivo de litros e margem por vendedor num período (
bi_meta, chave naturalcod_vendedor + data). custo_inventario- Custo de carregar estoque no período (
bi_custo_inventario, chavedata): valor, taxa de aplicação, juros totais, venda simulada e total. Origem: MARGEM_CONSOLIDADA. - Chave natural
- Combinação de colunas que identifica um fato de forma estável, independente da
posição na planilha (ex.:
nf, cod_produto, cod_cliente, cod_filialembi_movimento). ViraUNIQUE(uq_*) e é a chave do UPSERT diff-aware — é o que permite reprocessar o mesmo período sem duplicar. - Período
- Intervalo de datas coberto por um envio. Vem do conteúdo do arquivo (não do upload — ao contrário do projeto irmão Transporte); é o que delimita o DELETE seletivo do diff-aware.
- Conjunto (lote)
- Pacote de N arquivos enviados juntos: é o próprio
.ziprecebido no POST. O cliente não declara nada — o identificador do lote e o total de arquivos são derivados do conteúdo pelo servidor (o id ézip-<sha256 do zip>; o total, o número de entradas.xlsx). Quando todas as entradas terminam, sai uma notificação de resumo no Telegram (ConjuntoLoteService). - Checksum
- SHA-256 do conteúdo binário do
.xlsx; chave de idempotência de upload — evita reprocessar o mesmo arquivo após sucesso. - Diff-aware (UPSERT)
INSERT … ON CONFLICT (chave natural) DO UPDATE … WHERE … IS DISTINCT FROM: só grava a linha que realmente mudou. Linhas inalteradas preservamidUUID exmin— não re-propagam pelo PowerSync. Métricas agregadas por envio:linhas_efetivas(INSERT/UPDATE que escreveram) elinhas_removidas(DELETE seletivo).- Segmento
- Classificação do produto em
combustivel,lubrificanteou vazio (Arla/Ureia), derivada do nome e gravada embi_produtoe, denormalizada, embi_movimento. É o corte que o PowerSync usa para mandar a cada perfil de usuário só o seu segmento.
Infraestrutura específica¶
- PowerSync
- Serviço de sincronização que replica as tabelas
bi_*do PostgreSQL para os clientes móveis (SQLite). Aqui sincronizam todas asbi_*(fatos, dimensões ebi_configuracao); asxls_*são locais por design. Exige PK de coluna única TEXT/UUID — por isso osbi_*usamid UUID DEFAULT uuidv7(). bi_configuracao- Tabela KV global (
id TEXT) sincronizada via PowerSync. Guardaultimo_nuke(sinal de reset lido pelo cliente Flutter) e parâmetros comoslow_query_timeout_ms. Rowssistema=TRUEsão editáveis só pelo backend. - Nuke da replicação
- Operação destrutiva que zera o estado replicado (slot lógico do PostgreSQL +
MongoDB do PowerSync) e força o re-sync dos clientes. No código,
NukeReplicationService; auditada emxls_nuke_replication. Procedimento no runbook de operação.