Informe seu e-mail e enviaremos um link para criar uma nova senha.
Dashboard
DoPampa3D Manager
⚙️ Configuração do Supabase
Cole as credenciais do seu projeto Supabase para conectar o sistema ao banco de dados na nuvem.
🔐 E-mail do Administrador
Somente este e-mail terá acesso a este painel. Qualquer outro usuário cadastrado no Supabase será bloqueado.
⚠️ Importante: O e-mail é salvo na tabela sistema_config do Supabase. Se ainda não rodou o SQL dos expositores, faça isso primeiro para que essa tabela exista.
🗄️ Criar Tabelas no Supabase
No painel do Supabase, vá em SQL Editor → New query e cole o SQL abaixo. Execute uma vez e as tabelas estarão prontas.
-- 1. Filamentos
CREATE TABLE filamentos (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
marca text NOT NULL,
cor text NOT NULL,
cor_hex text DEFAULT '#ffffff',
tipo text NOT NULL DEFAULT 'PLA',
peso_total integer NOT NULL DEFAULT 1000,
peso_restante integer NOT NULL DEFAULT 1000,
preco_kg numeric(10,2) NOT NULL DEFAULT 0,
preco_total numeric(10,2) DEFAULT 0,
pago_status text DEFAULT 'pendente',
alerta_g integer NOT NULL DEFAULT 200,
ativo boolean DEFAULT true,
created_at timestamptz DEFAULT now()
);
-- 2. Catálogo de produtos
CREATE TABLE catalogo (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
nome text NOT NULL,
descricao text,
foto_url text,
tempo_horas numeric(6,2) DEFAULT 0,
peso_g numeric(8,2) DEFAULT 0,
custo numeric(10,2) DEFAULT 0,
preco_venda numeric(10,2) DEFAULT 0,
tipo text DEFAULT 'PLA',
categoria text,
largura numeric(8,2) DEFAULT 0,
altura numeric(8,2) DEFAULT 0,
profundidade numeric(8,2) DEFAULT 0,
filamentos_ids jsonb DEFAULT '[]',
ativo boolean DEFAULT true,
created_at timestamptz DEFAULT now()
);
-- 3. Clientes
CREATE TABLE clientes (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
nome text NOT NULL,
telefone text,
email text,
endereco text,
cidade text,
estado text DEFAULT 'RS',
total_gasto numeric(10,2) DEFAULT 0,
created_at timestamptz DEFAULT now()
);
-- 4. Pedidos
CREATE TABLE pedidos (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
numero serial,
cliente_id uuid REFERENCES clientes(id),
cliente_nome text,
produto_nome text,
catalogo_id uuid REFERENCES catalogo(id),
filamento_id uuid REFERENCES filamentos(id),
filamento_nome text,
filamentos_usados jsonb DEFAULT '[]',
quantidade integer DEFAULT 1,
peso_total_g numeric(8,2) DEFAULT 0,
valor numeric(10,2) DEFAULT 0,
status text DEFAULT 'feito',
pago text DEFAULT 'nao',
rastreio text,
observacoes text,
largura numeric(8,2) DEFAULT 0,
altura numeric(8,2) DEFAULT 0,
profundidade numeric(8,2) DEFAULT 0,
created_at timestamptz DEFAULT now(),
updated_at timestamptz DEFAULT now()
);
-- 5. RLS: habilitar e liberar acesso total para usuários autenticados
ALTER TABLE filamentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE catalogo ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes ENABLE ROW LEVEL SECURITY;
ALTER TABLE pedidos ENABLE ROW LEVEL SECURITY;
-- Policies: qualquer usuário autenticado pode ler e escrever
CREATE POLICY "acesso_autenticado" ON filamentos FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON catalogo FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON clientes FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON pedidos FOR ALL TO authenticated USING (true) WITH CHECK (true);
🔧 Migração / Correção de Erros
Se você já criou as tabelas e está recebendo erros como "violates row-level security policy" ou "column not found in schema cache", execute este SQL no Supabase → SQL Editor para corrigir tudo de uma vez:
-- ══ MIGRAÇÃO COMPLETA ══
-- Execute no Supabase → SQL Editor
-- Seguro para rodar mesmo se as colunas já existirem
-- 1. Adicionar colunas que possam estar faltando em filamentos
ALTER TABLE filamentos ADD COLUMN IF NOT EXISTS pago_status text DEFAULT 'pendente';
ALTER TABLE filamentos ADD COLUMN IF NOT EXISTS preco_total numeric(10,2) DEFAULT 0;
ALTER TABLE filamentos ADD COLUMN IF NOT EXISTS cor_hex text DEFAULT '#ffffff';
ALTER TABLE filamentos ADD COLUMN IF NOT EXISTS alerta_g integer NOT NULL DEFAULT 200;
ALTER TABLE filamentos ADD COLUMN IF NOT EXISTS ativo boolean DEFAULT true;
-- 2. Adicionar colunas que possam estar faltando em catalogo
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS filamentos_ids jsonb DEFAULT '[]';
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS foto_url text;
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS largura numeric(8,2) DEFAULT 0;
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS altura numeric(8,2) DEFAULT 0;
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS profundidade numeric(8,2) DEFAULT 0;
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS ativo boolean DEFAULT true;
ALTER TABLE catalogo ADD COLUMN IF NOT EXISTS categoria text;
-- 3. Adicionar colunas que possam estar faltando em pedidos
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS catalogo_id uuid REFERENCES catalogo(id);
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS filamento_id uuid REFERENCES filamentos(id);
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS filamento_nome text;
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS filamentos_usados jsonb DEFAULT '[]';
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS rastreio text;
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS observacoes text;
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS largura numeric(8,2) DEFAULT 0;
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS altura numeric(8,2) DEFAULT 0;
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS profundidade numeric(8,2) DEFAULT 0;
ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS updated_at timestamptz DEFAULT now();
-- 4. Adicionar colunas que possam estar faltando em clientes
ALTER TABLE clientes ADD COLUMN IF NOT EXISTS total_gasto numeric(10,2) DEFAULT 0;
-- 5. Corrigir RLS — habilitar e criar policies para usuários autenticados
ALTER TABLE filamentos ENABLE ROW LEVEL SECURITY;
ALTER TABLE catalogo ENABLE ROW LEVEL SECURITY;
ALTER TABLE clientes ENABLE ROW LEVEL SECURITY;
ALTER TABLE pedidos ENABLE ROW LEVEL SECURITY;
-- Remover policies antigas se existirem (evita erro de duplicata)
DROP POLICY IF EXISTS "acesso_autenticado" ON filamentos;
DROP POLICY IF EXISTS "acesso_autenticado" ON catalogo;
DROP POLICY IF EXISTS "acesso_autenticado" ON clientes;
DROP POLICY IF EXISTS "acesso_autenticado" ON pedidos;
-- Criar policies novas
CREATE POLICY "acesso_autenticado" ON filamentos FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON catalogo FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON clientes FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON pedidos FOR ALL TO authenticated USING (true) WITH CHECK (true);
🏪 SQL — Módulo Expositores
Se você ainda não criou as tabelas de expositores, rode este SQL no Supabase → SQL Editor. Substitua SEU_EMAIL@AQUI.COM pelo seu e-mail antes de executar.
-- 1. Tabela de expositores (lojas parceiras)
CREATE TABLE IF NOT EXISTS expositores (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
nome_loja TEXT NOT NULL,
responsavel TEXT,
telefone TEXT,
endereco TEXT,
email_acesso TEXT,
ativo BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT now()
);
-- 2. Estoque vinculado a cada expositor
CREATE TABLE IF NOT EXISTS expositor_estoque (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
expositor_id UUID REFERENCES expositores(id) ON DELETE CASCADE,
catalogo_id UUID REFERENCES catalogo(id) ON DELETE CASCADE,
quantidade_inicial INTEGER DEFAULT 0,
quantidade_atual INTEGER DEFAULT 0,
preco_venda NUMERIC(10,2) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- 3. Histórico de movimentações (com campos extras para venda)
CREATE TABLE IF NOT EXISTS expositor_movimentacoes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
expositor_id UUID REFERENCES expositores(id) ON DELETE CASCADE,
estoque_id UUID REFERENCES expositor_estoque(id) ON DELETE CASCADE,
tipo TEXT CHECK (tipo IN ('saida','entrada','ajuste','venda','cancelado')) NOT NULL,
quantidade INTEGER NOT NULL,
observacao TEXT,
cliente_nome TEXT,
status_pagamento TEXT,
valor_total NUMERIC(10,2) DEFAULT 0,
desconto_aplicado NUMERIC(10,2) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- 4. Configurações do sistema (admin_email e outras)
CREATE TABLE IF NOT EXISTS sistema_config (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
chave TEXT UNIQUE NOT NULL,
valor TEXT,
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Inserir registro do e-mail admin (substitua pelo seu e-mail real)
INSERT INTO sistema_config (chave, valor)
VALUES ('admin_email', 'SEU_EMAIL@AQUI.COM')
ON CONFLICT (chave) DO NOTHING;
-- 5. RLS — acesso total para usuários autenticados (admin gerencia tudo)
ALTER TABLE expositores ENABLE ROW LEVEL SECURITY;
ALTER TABLE expositor_estoque ENABLE ROW LEVEL SECURITY;
ALTER TABLE expositor_movimentacoes ENABLE ROW LEVEL SECURITY;
ALTER TABLE sistema_config ENABLE ROW LEVEL SECURITY;
-- Remover policies antigas se existirem (evita erro de duplicata)
DROP POLICY IF EXISTS "expositor_own" ON expositores;
DROP POLICY IF EXISTS "estoque_own" ON expositor_estoque;
DROP POLICY IF EXISTS "movimentacao_own" ON expositor_movimentacoes;
DROP POLICY IF EXISTS "admin_expositores" ON expositores;
DROP POLICY IF EXISTS "admin_estoque" ON expositor_estoque;
DROP POLICY IF EXISTS "admin_movimentacoes" ON expositor_movimentacoes;
DROP POLICY IF EXISTS "acesso_autenticado" ON expositores;
DROP POLICY IF EXISTS "acesso_autenticado" ON expositor_estoque;
DROP POLICY IF EXISTS "acesso_autenticado" ON expositor_movimentacoes;
DROP POLICY IF EXISTS "acesso_autenticado" ON sistema_config;
-- Policies: qualquer usuário autenticado pode ler e escrever
CREATE POLICY "acesso_autenticado" ON expositores
FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON expositor_estoque
FOR ALL TO authenticated USING (true) WITH CHECK (true);
CREATE POLICY "acesso_autenticado" ON expositor_movimentacoes
FOR ALL TO authenticated USING (true) WITH CHECK (true);
-- sistema_config: qualquer autenticado lê, mas só o admin (verificado no app) escreve
CREATE POLICY "acesso_autenticado" ON sistema_config
FOR ALL TO authenticated USING (true) WITH CHECK (true);
Vá em Project Settings → API e copie a Project URL e a anon public key
4
Cole as credenciais acima e clique em Salvar e Conectar
5
Vá em SQL Editor, cole o SQL acima e clique em Run
6
Pronto! Volte ao Dashboard e comece a usar.
Pedidos (mês)
—
por data de criação
Faturamento (mês)
—
por data de criação
Clientes
—
cadastrados
Filamentos
—
bobinas ativas
💸 A Pagar
—
investimentos pendentes
⚠️ Alertas de Estoque
Carregando...
🛒 Pedidos Recentes
#
Cliente
Produto
Valor
Status
Carregando...
🧵 Estoque de Filamentos
🔍
🧵
Nenhum filamento cadastrado ainda.
🗂️ Catálogo de Produtos
🔍
🗂️
Nenhum produto no catálogo.
🛒 Pedidos
🔍
#
Data
Cliente
Produto
Qtd
Valor
Andamento
Pago
Rastreio
Carregando...
👤 Clientes
🔍
Nome
Telefone
Cidade/UF
Pedidos
TotalGasto
Carregando...
Total a Pagar
R$ 0,00
investimentos pendentes
Filamentos (custo)
R$ 0,00
valor total investido
Já Descontado
R$ 0,00
recuperado via pedidos
Saldo Restante
R$ 0,00
a recuperar
🧵 Investimentos em Filamentos
Filamento
Tipo
PesoTotal
Preço/kg
CustoTotal
Usado(g)
Recuperado
APagar
Status
Carregando...
🛍️ Sugestão de Recompra
Carregando...
📦 Pedidos e Pagamentos
#
Cliente
Produto
Valor
Andamento
Pago?
Ações
Carregando...
⚡ Predefinições salvas
🧵
Filamento
Dados do rolo e do fatiador
R$/kg
g
g
Impressão multicolor (AMS / troca de filamento)
Insira cada cor separada. O peso aparece no Bambu Handy como PLA | Xg.
Cor/Filamento
Peso(g)
PreçoR$/kg
g
⏱
Impressão
Tempo e consumo de energia
h
min
W
R$/kWh
⚙️
Máquina e Consumíveis
Depreciação e desgaste — salvo automaticamente
R$
h
R$
h
Incluir desgaste da cama (PEI)
R$
h
📦
Embalagem e Envio
Custos de materiais de embalagem por pedido
Incluir custos de embalagem no cálculo
Informe o custo unitário de cada material usado por pedido. Deixe 0 nos que não usa.
R$
R$
R$
R$
R$
R$
Total embalagem:R$ 0,00
🗂️
Objetos na Mesa
Múltiplos modelos diferentes na mesma impressão
Impressão com múltiplos objetos diferentes
Modo atual: peça única ou lote idêntico. Use os campos de Filamento acima e Quantidade abaixo.
Modo múltiplos objetos: o tempo total é dividido proporcionalmente pelo peso.
Objeto
Modelo(g)
Suporte(g)
Qtd
📊
Falhas e Preço de Venda
%
un
%
🏪
Taxas de Plataforma e Frete
Descontadas do preço de venda — salvo automaticamente
%
Categoria selecionada
—
0%
Incluir custo de frete no cálculo
Informe o custo de frete que você paga. Pode ser valor fixo (R$) ou percentual sobre a venda.
R$
%
💡 Frete grátis ao cliente? O custo ainda existe. Inclua aqui para não comer sua margem.
Custo por peça
—
custo real total
Preço de venda
—
com margem aplicada
🔍
Detalhamento dos Custos
📦
Resumo do Lote
🗂️ Resultado por Objeto
📐 Dimensões do Objeto (mm) — opcional
mm
mm
mm
🏪 Lojas Parceiras
🔍
Loja
Responsável
Telefone
Endereço
Status
Termos
Criado em
Carregando...
📦 Estoque nos Expositores
Loja
Produto
Preço Venda
Inicial
Atual
Vendido
% Vendido
Valor Vendido
Carregando...
Total Saídas
—
unidades vendidas
Valor Vendido
—
receita nos expositores
Entradas
—
reposições registradas
📋 Histórico de Movimentações
Data
Loja
Produto
Tipo
Qtd
Observação
Carregando...
📜 Termos de Recebimento em Consignação
📜
Nenhum termo ainda.
🛍️ Publicar no Catálogo Externo
✅ Este produto será salvo diretamente no Supabase e aparecerá no seu catálogo.html público.
R$
R$
g
h
📐 Dimensões (mm) — aparecem no catálogo
mm
mm
mm
📷 Clique para adicionar uma foto JPG, PNG ou WebP
A foto é salva como base64. Para fotos grandes, use URL externa no campo abaixo.
👁️ Visível no catálogo público
✅ O produto aparecerá no catalogo.html para os clientes verem.
🧵 Novo Filamento
🗂️ Novo Produto
Cole o link direto da imagem do Imgur (ex: https://i.imgur.com/abc123.jpg)
⚠️ Não foi possível carregar a imagem. Verifique o link.
🧮 Calculadora de Custo Integrada
R$/kg
g
h
min
%
%
Custo calculado:—Preço sugerido:—
📐 Dimensões do Produto (mm)
mm
mm
mm
🧵 Filamentos deste Produto
Selecione os filamentos que compõem este produto. Isso ajuda no controle financeiro.
👁️ Visível no catálogo público
✅ O produto aparecerá no catalogo.html para os clientes verem.
👤 Novo Cliente
🛒 Novo Pedido
🧵 Filamentos Utilizados
Adicione cada filamento com o peso gasto. Suporta multicolor / AMS.
Filamento
Peso(g)
Peso total: 0g
mm
mm
mm
⚠️ Após salvar, o peso de cada filamento será descontado do estoque automaticamente.
📋 Cadastro em Massa — Produtos
Cole uma linha por produto. Colunas separadas por ; (ponto e vírgula): Nome ; Descrição ; Tipo ; Preço Venda ; Custo ; Peso(g) ; Tempo(h) ; Largura(mm) ; Altura(mm) ; Profundidade(mm)
Apenas Nome e Preço Venda são obrigatórios. Deixe campos vazios com ; entre eles.
Exemplo: Chaveiro Gato ; Personalizado ; PLA ; 25 ; 8 ; 15 ; 0.5 ; 40 ; 10 ; 30
#
Nome
Tipo
PreçoVenda
Custo
Peso(g)
Tempo(h)
Dims(mm)
Status
📋 Cadastro em Massa — Pedidos
Cole uma linha por pedido. Colunas separadas por ; (ponto e vírgula): Cliente ; Produto ; Valor ; Quantidade ; Status ; Pago ; Rastreio ; Observações Cliente, Produto e Valor são obrigatórios.
Status: feito / andamento / pronto / entregue / cancelado | Pago: sim / nao / parcial
Exemplo: João Silva ; Chaveiro Gato ; 25 ; 2 ; feito ; nao ; ; Cor verde
#
Cliente
Produto
Valor
Qtd
Status
Pago
Rastreio
Obs
Status
🏪 Nova Loja Parceira
⚠️ O e-mail precisa ser criado antes no Supabase → Authentication → Invite user. Cole o mesmo e-mail aqui para vinculação automática.
📦 Vincular Produto ao Expositor
💡 O custo definido aqui será visível (mas não editável) pelo expositor na loja, para calcular a comissão.