Configuração do Supabase
Configure sua conexão com o Supabase para começar a usar o sistema de farmácia.
Estrutura do Banco de Dados
Execute os comandos SQL abaixo para criar as tabelas necessárias para o sistema de farmácia.
1. Tabela de Categorias
CREATE TABLE categorias (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL UNIQUE,
descricao TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
2. Tabela de Fornecedores
CREATE TABLE fornecedores (
id SERIAL PRIMARY KEY,
nome VARCHAR(200) NOT NULL,
cnpj VARCHAR(18) UNIQUE,
telefone VARCHAR(20),
email VARCHAR(100),
endereco TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
3. Tabela de Medicamentos
CREATE TABLE medicamentos (
id SERIAL PRIMARY KEY,
nome VARCHAR(200) NOT NULL,
principio_ativo VARCHAR(200),
categoria_id INTEGER REFERENCES categorias(id),
fornecedor_id INTEGER REFERENCES fornecedores(id),
codigo_barras VARCHAR(50) UNIQUE,
preco_compra DECIMAL(10,2),
preco_venda DECIMAL(10,2),
margem_lucro DECIMAL(5,2),
prescricao_obrigatoria BOOLEAN DEFAULT FALSE,
controlado BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT NOW()
);
4. Tabela de Estoque
CREATE TABLE estoque (
id SERIAL PRIMARY KEY,
medicamento_id INTEGER REFERENCES medicamentos(id),
lote VARCHAR(50),
quantidade INTEGER NOT NULL DEFAULT 0,
data_fabricacao DATE,
data_vencimento DATE,
preco_compra_lote DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);
5. Tabela de Vendas
CREATE TABLE vendas (
id SERIAL PRIMARY KEY,
data_venda TIMESTAMP DEFAULT NOW(),
valor_total DECIMAL(10,2),
desconto DECIMAL(10,2) DEFAULT 0,
forma_pagamento VARCHAR(50),
cpf_cliente VARCHAR(14),
nome_cliente VARCHAR(200),
receita_medica VARCHAR(100),
created_at TIMESTAMP DEFAULT NOW()
);
6. Tabela de Itens da Venda
CREATE TABLE itens_venda (
id SERIAL PRIMARY KEY,
venda_id INTEGER REFERENCES vendas(id),
medicamento_id INTEGER REFERENCES medicamentos(id),
estoque_id INTEGER REFERENCES estoque(id),
quantidade INTEGER NOT NULL,
preco_unitario DECIMAL(10,2),
subtotal DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);
7. Dados Iniciais
Execute também os comandos para inserir dados de exemplo:
Gestão de Medicamentos
Cadastrar Novo Medicamento
| Medicamento | Princípio Ativo | Categoria | Preço Venda | Estoque | Status | Ações |
|---|
Alertas de Estoque
Controle de Estoque
Nova Entrada de Estoque
| Medicamento | Lote | Quantidade | Vencimento | Status |
|---|
Nova Venda
Dados do Cliente
Adicionar Medicamentos
Itens da Venda
Total:
R$ 0,00
Vendas Recentes
Selecione um relatório acima para visualizar os dados.
Consultas SQL Úteis
Exemplos de consultas SQL para análise e gestão da farmácia.
1. Medicamentos com Estoque Baixo
SELECT
m.nome,
m.principio_ativo,
SUM(e.quantidade) as estoque_total
FROM medicamentos m
LEFT JOIN estoque e ON m.id = e.medicamento_id
GROUP BY m.id, m.nome, m.principio_ativo
HAVING SUM(e.quantidade) < 10 OR SUM(e.quantidade) IS NULL
ORDER BY estoque_total ASC;
2. Medicamentos Próximos ao Vencimento
SELECT
m.nome,
e.lote,
e.quantidade,
e.data_vencimento,
(e.data_vencimento - CURRENT_DATE) as dias_para_vencer
FROM estoque e
JOIN medicamentos m ON e.medicamento_id = m.id
WHERE e.data_vencimento <= CURRENT_DATE + INTERVAL '30 days'
AND e.quantidade > 0
ORDER BY e.data_vencimento ASC;
3. Relatório de Vendas por Período
SELECT
DATE(v.data_venda) as data,
COUNT(v.id) as total_vendas,
SUM(v.valor_total) as faturamento,
AVG(v.valor_total) as ticket_medio
FROM vendas v
WHERE v.data_venda >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY DATE(v.data_venda)
ORDER BY data DESC;
4. Medicamentos Mais Vendidos
SELECT
m.nome,
m.principio_ativo,
SUM(iv.quantidade) as quantidade_vendida,
SUM(iv.subtotal) as receita_total
FROM itens_venda iv
JOIN medicamentos m ON iv.medicamento_id = m.id
JOIN vendas v ON iv.venda_id = v.id
WHERE v.data_venda >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY m.id, m.nome, m.principio_ativo
ORDER BY quantidade_vendida DESC
LIMIT 10;
5. Análise de Margem de Lucro
SELECT
m.nome,
m.preco_compra,
m.preco_venda,
(m.preco_venda - m.preco_compra) as lucro_unitario,
((m.preco_venda - m.preco_compra) / m.preco_compra * 100) as margem_percentual
FROM medicamentos m
WHERE m.preco_compra > 0 AND m.preco_venda > 0
ORDER BY margem_percentual DESC;
6. Controle de Medicamentos Controlados
SELECT
v.data_venda,
v.cpf_cliente,
v.nome_cliente,
v.receita_medica,
m.nome as medicamento,
iv.quantidade
FROM vendas v
JOIN itens_venda iv ON v.id = iv.venda_id
JOIN medicamentos m ON iv.medicamento_id = m.id
WHERE m.controlado = true
ORDER BY v.data_venda DESC;