Ferramenta local de precificação automatizada para varejo. Processa arquivos XML (NFe) e CSV (Sistema) e gera planilhas Excel com cálculos completos de custo, impostos e margem, além de um dashboard visual de análise da nota.
| Camada | Tecnologia |
|---|---|
| Backend | Python 3.x + Flask |
| Processamento | Pandas (merge/fallback EAN → REF) |
| XML | ElementTree (extração de NFe) |
| Excel | Openpyxl puro (sem pandas.to_excel — garante fórmulas no Mac/Windows) |
| Frontend | HTML5 + Bootstrap + JavaScript nativo (Drag & Drop) |
| Impostos externos | API SEFAZ AL (ST e Antecipado) |
# 1. Clonar o repositório
git clone https://github.com/seu-usuario/ph-SheetGenerator.git
cd ph-SheetGenerator
# 2. Criar e ativar ambiente virtual
python3 -m venv venv
source venv/bin/activate
# 3. Instalar dependências
pip install Flask pandas openpyxl requestsNota: o pacote
requestsé necessário para a consulta à API da SEFAZ AL (ST/Antecipado).
- Execute o servidor Flask:
python3 app.py- O navegador abrirá automaticamente em
http://127.0.0.1:8080. - Preencha o Nome do Fornecedor e o Número da Nota.
- Arraste o XML da NFe e o CSV do sistema para as áreas indicadas.
- Ajuste os parâmetros financeiros (multiplicador, impostos, frete, crédito de ICMS).
- Clique em Gerar Prévia para visualizar os dados e o dashboard na tela.
- Clique em Baixar Excel para salvar a planilha estilizada com fórmulas.
- Tenta cruzar pelo EAN (código de barras)
- Se não encontrar preço válido (ou preço = R$ 0,01), tenta pela Referência/Código
- Se ainda não encontrar, o preço de venda é calculado automaticamente via
arredondar_99(Custo Real × 2)
O sistema lê a descrição do XML (ex: "CAIXA COM 12", "CAIXA COM 24") e multiplica o preço unitário do sistema pela quantidade da embalagem para calcular o Preço Atual correto.
Proteção anti-absurdo: se o resultado da multiplicação for mais que 3× o custo esperado, o sistema assume que o cadastro já tem o preço da caixa e não multiplica (ex: grampos com 5000 unidades).
Custo Entrada = NF unit + IPI + Frete(10%) + Despesa(10%) - Crédito ICMS(variável)
Custo Real = Custo Entrada × Multiplicador
Custo Saída = Custo Real + Federal(9,13%) + Cartão(4%) + ICMS Saída(21%)
Preço Mín. = Custo Saída ÷ (1 - Meta%)
O Crédito de ICMS é variável conforme a origem do produto:
- Importado: 4% | SP: 7% | PE: 12% | AL: 19%
Custo Entrada = NF unit + ST + ANT + IPI + Frete(10%) + Despesa(10%)
Custo Real = Custo Entrada × Multiplicador
Custo Saída = Custo Real + Federal(9,13%) + Cartão(4%) + ICMS Saída(21%)
Preço Mín. = Custo Saída ÷ (1 - Meta%)
ST e Antecipado são consultados automaticamente na API da SEFAZ AL.
O campo Crédito de ICMS é zerado automaticamente quando há ST.
| Col | Campo | Tipo |
|---|---|---|
| A–E | NF, Descrição, REF, SKU, QTD | Fixo (XML) |
| F–I | NF Unit, ST, ANT, IPI | Fixo (XML) |
| J–L | Frete, Despesa, Cred. ICMS | Fórmula |
| M–N | Custo Entrada, Custo Real | Fórmula |
| O | CST | Fixo (XML) |
| P–S | Federal, Cartão, ICMS Saída, Custo Saída | Fórmula |
| T | Meta % | Editável (padrão 15%, por produto) |
| U | Preço Mín. Viável | Fórmula |
| V | Preço Atual (sistema × emb.) | Fixo (CSV) |
| W | Preço Varejo | Fórmula |
| X | Margem Real | Fórmula |
| Y–Z | P.Unit Sistema, Qtd Emb. | Auditoria (cinza) |
- 🔵 Azul: Preço Varejo e Margem Real
- 🟡 Amarelo: Preço Mínimo Viável
- 🟢 Verde: Coluna META % (editável por produto)
- 🍑 Pêssego: Linhas com ST > 0
- ⚫ Cinza: Colunas de auditoria (P.Unit Sistema / Qtd Emb.)
Todos os campos calculados são gravados como fórmulas Excel reais — alterar qualquer parâmetro na linha 2 recalcula toda a planilha automaticamente. O arquivo é gerado com fullCalcOnLoad=True para garantir recálculo imediato ao abrir no Mac.
Após processar, um painel é exibido abaixo da tabela com:
- Total de itens, quantos com ST e sem ST
- Produtos sem preço no sistema (usarão preço calculado)
- Valor total da NF
- Margem estimada média
- Barra de distribuição ST vs. Sem ST
- Lista de alertas de produtos sem preço
ph-SheetGenerator/
├── app.py # Servidor Flask (porta 8080)
├── core/
│ ├── __init__.py
│ └── processador.py # Motor de cálculo, geração Excel e dashboard HTML
├── static/
│ └── logo.png
└── templates/
└── index.html # Interface web
# Instalar PyInstaller (uma vez)
pip install pyinstaller
# Gerar o .app
pyinstaller --noconfirm --onefile --windowed \
--add-data "templates:templates" \
--add-data "static:static" \
--icon "static/logo.png" \
--name "PrecificadoraDaOnda" \
app.pypip install pyinstaller
pyinstaller --noconfirm --onefile --windowed `
--add-data "templates;templates" `
--add-data "static;static" `
--icon "static/logo.png" `
--name "PrecificadoraDaOnda" `
app.pyNota Windows: use
;para separar caminhos no--add-data. No Mac/Linux use:.
O executável gerado estará em dist/PrecificadoraDaOnda (Mac) ou dist/PrecificadoraDaOnda.exe (Windows).
- Altere o código e teste localmente
- Rode novamente o comando do PyInstaller (sobrescreve o
dist/automaticamente) - Compacte o
.appou.exe(botão direito → Comprimir) - Envie para os usuários via WhatsApp, Drive ou Slack
- O usuário substitui o ícone antigo pelo novo
O programa não se atualiza pela internet — a distribuição é manual via arquivo compactado.
- Na primeira execução no Windows, o SmartScreen pode exibir alerta. Clique em "Mais informações" → "Executar assim mesmo" (o executável não possui assinatura digital paga).
- O arquivo
.appdo Mac não funciona no Windows e vice-versa — gere um build separado para cada sistema. - A consulta à API da SEFAZ AL tem timeout de 10 segundos. Se indisponível, o processamento continua normalmente sem os valores de ST externos.