🍕 ERP Vitaliano — Login

Entre para acessar o sistema

🍕 ERP Vitaliano Professional

Sistema Completo de Gestão Financeira e Estoque

📊 Dashboard
📦 Produtos
📊 Estoque CD
📥 Notas Entrada
🛒 Pedidos Lojas
💳 Contas a Pagar
💰 Contas
💵 Vendas
💸 Despesas
📊 Relatórios
⚙️ Cadastros
Valor Estoque CD
R$ 0,00
Produtos Estoque Baixo
0
Alertas Estoque
Sistema carregado. Explore os m\u00f3dulos acima.
Produtos (amostra)
CódigoNomeCategoriaEstoqueValor Total
Conta Virtual CD (créditos)
R$ 0,00
Total a receber (débitos lojas)
R$ 0,00
Débitos pendentes (qtd)
0
Quanto cada loja deve ao CD
LojaTotal a pagarStatus
Saldos das contas
ContaLojaSaldo
Cadastro de Produtos
⚙️ Gerenciar categorias em: Cadastros → Categorias de Produtos
Custo padrão/atual do produto
Calculado automaticamente com base nas compras
Produtos Cadastrados
Código Nome Categoria Un. Custo Venda Margem Estoque Mín. Ações
Estoque do CD em Tempo Real
Código Produto Categoria Saldo Un. Custo Unit. Valor Total Status
Registro de Nota Fiscal de Entrada
CNPJ
Dica: arquivos grandes podem não caber no armazenamento do navegador. Recomendado até ~1,5 MB por arquivo.
Produtos da Nota
Total: R$ 0,00
Notas de Entrada Registradas
Nº Nota Fornecedor Data Vencimento Forma Pgto Qtd Itens Valor Total Status
Novo Pedido - CD para Loja
ℹ️ Clique nos produtos abaixo para adicionar ao pedido. O estoque será baixado automaticamente ao finalizar.
Selecionar Produtos
Carrinho do Pedido
Total: R$ 0,00
Pedidos Gerados
Nº Pedido Data Loja Qtd Itens Valor Total Status Ações
Contas a Pagar (Pedidos e Despesas)
Tipo Loja Referência Data Valor Original Valor Pago Saldo Status Ações
Cadastro de Contas Bancárias
Conta Virtual CD (banco virtual)

O CD não tem conta real; compras são pagas pelas contas das lojas. Quando uma loja paga um débito ou você paga uma despesa/compra do CD usando a conta de uma loja, o valor é creditado aqui e o débito da loja é abatido.

Saldo atual (créditos recebidos)
R$ 0,00
DataDescriçãoLojaValor
Movimentações e ajustes
Contas Cadastradas (saldo por movimentações)
IDBancoTitularLojaTipoSaldoAções
💵 Nova Venda
Formas de pagamento

Distribua o valor entre as formas. Parcelas e dias geram Contas a Receber com vencimentos e desconto de taxa.

Tipo Valor (R$) Taxa % Parcelas Dias entre
Total formas: R$ 0,00
Vendas realizadas
DataLojaValorFormas
📥 Contas a Receber
OrigemVencimentoValorTaxaLíquidoStatusAções
💸 Lançar despesa (gera Conta a Pagar)
Despesas lançadas
DataLojaDescriçãoCategoriaValorVencimento
📊 DRE - Demonstração do Resultado do Exercício
Descrição Valor (R$) %
Selecione o período e clique em Atualizar
💸 Despesas por Categoria
CategoriaQuantidadeValor Total% do Total
Clique em Atualizar para ver o relatório
🏪 Despesas por Loja (Comparativo)
LojaQtd DespesasValor TotalMédia por Despesa
Clique em Atualizar para ver o relatório
ℹ️ Cadastros Gerais
Todos os cadastros do sistema estão consolidados aqui: Lojas, Fornecedores, Contas Bancárias e Categorias de Despesas.
🏪 Lojas / Unidades

Lojas Cadastradas

IDNomeCNPJTipoStatusAções
🚚 Fornecedores

Fornecedores Cadastrados

IDNomeCNPJContatoStatusAções
📋 Categorias de Despesas
💡 Dica: As categorias aqui definidas aparecerão no SELECT ao lançar despesas.

Categorias Cadastradas

CategoriaTipoAções
📦 Categorias de Produtos
💡 Dica: As categorias aqui definidas aparecerão no SELECT ao cadastrar produtos.

Categorias Cadastradas

CategoriaDescriçãoAções
💰 Contas Bancárias e Caixas

Contas Cadastradas

IDBancoTitularLojaTipoAções

Registrar Pagamento

💰 Saldo disponível desta Loja:
R$ 0,00
Crédito acumulado com o CD que será usado para compensar este débito.
💰 Saldo disponível na Conta Virtual CD:
R$ 0,00
Este valor será debitado do saldo virtual (créditos acumulados).

Adicionar Fornecedor

Pagar despesa/compra do CD com conta de loja

O valor será debitado da conta escolhida. Se a conta for de uma loja, o débito dela ao CD será abatido e o valor creditado na Conta Virtual do CD.

Lançar entrada

Transferência entre contas

Ajuste de saldo

Informe o saldo que a conta deve passar a ter. O sistema lançará um ajuste (diferença) para conciliar.

Registrar Recebimento

// ============================================ // CAMADA DE SINCRONIZAÇÃO SUPABASE // Adiciona persistência em banco real mantendo appData // ============================================ async function syncFromSupabase() { try { console.log('📥 Sincronizando do Supabase...'); const [ { data: lojas }, { data: produtos }, { data: categoriasProduto }, { data: fornecedores }, { data: estoque }, { data: vendas }, { data: despesas }, { data: contasPagar }, { data: notasEntrada }, { data: contasBancarias }, { data: contaVirtualCD } ] = await Promise.all([ supa.from('lojas').select('*'), supa.from('produtos').select('*'), supa.from('categorias_produto').select('*'), supa.from('fornecedores').select('*'), supa.from('estoque').select('*'), supa.from('vendas').select('*'), supa.from('despesas').select('*'), supa.from('contas_pagar').select('*'), supa.from('notas_entrada').select('*'), supa.from('contas_bancarias').select('*'), supa.from('conta_virtual_cd').select('*') ]); // Popular appData mantendo estrutura existente if (lojas && lojas.length > 0) appData.lojas = lojas; if (produtos && produtos.length > 0) appData.produtos = produtos; if (categoriasProduto && categoriasProduto.length > 0) appData.categoriasProduto = categoriasProduto; if (fornecedores && fornecedores.length > 0) appData.fornecedores = fornecedores; if (estoque && estoque.length > 0) appData.estoque = estoque; if (vendas && vendas.length > 0) appData.vendas = vendas; if (despesas && despesas.length > 0) appData.despesas = despesas; if (contasPagar && contasPagar.length > 0) appData.contasPagar = contasPagar; if (notasEntrada && notasEntrada.length > 0) appData.notasEntrada = notasEntrada; if (contasBancarias && contasBancarias.length > 0) appData.contas = contasBancarias; if (contaVirtualCD && contaVirtualCD.length > 0) { appData.contaVirtualCD = { movimentacoes: contaVirtualCD }; } console.log('✅ Dados sincronizados do Supabase'); return true; } catch (error) { console.error('Erro ao carregar do Supabase:', error); return false; } } async function syncToSupabase() { try { console.log('📤 Salvando no Supabase...'); // Salvar cada entidade (silenciosamente, sem bloquear UI) const promises = []; if (appData.produtos && appData.produtos.length > 0) { promises.push(supa.from('produtos').upsert(appData.produtos)); } if (appData.estoque && appData.estoque.length > 0) { promises.push(supa.from('estoque').upsert(appData.estoque)); } if (appData.vendas && appData.vendas.length > 0) { promises.push(supa.from('vendas').upsert(appData.vendas)); } if (appData.despesas && appData.despesas.length > 0) { promises.push(supa.from('despesas').upsert(appData.despesas)); } if (appData.contasPagar && appData.contasPagar.length > 0) { promises.push(supa.from('contas_pagar').upsert(appData.contasPagar)); } if (appData.notasEntrada && appData.notasEntrada.length > 0) { promises.push(supa.from('notas_entrada').upsert(appData.notasEntrada)); } if (appData.contas && appData.contas.length > 0) { promises.push(supa.from('contas_bancarias').upsert(appData.contas)); } if (appData.contaVirtualCD && appData.contaVirtualCD.movimentacoes) { promises.push(supa.from('conta_virtual_cd').upsert(appData.contaVirtualCD.movimentacoes)); } await Promise.all(promises); console.log('✅ Dados salvos no Supabase'); return true; } catch (error) { console.error('Erro ao salvar no Supabase:', error); return false; } } // Auto-sync a cada 30 segundos (silencioso) setInterval(function() { if (appData && Object.keys(appData).length > 0) { syncToSupabase().catch(console.error); } }, 30000); console.log('✅ Camada de sincronização Supabase carregada');