Projeto desenvolvido para automatizar a exportação de produtos de um banco Firebird 2.0.3 para um layout de importação utilizado por outro ERP.
O objetivo foi transformar uma exportação manual em uma consulta SQL inteligente, aplicando automaticamente regras fiscais, tributárias e de negócio.
Durante uma migração de ERP foi necessário exportar milhares de produtos do banco Firebird para um novo sistema.
Embora as informações existissem no banco, diversos dados precisavam ser tratados antes da importação, como:
- definição automática de CST
- definição automática de CFOP
- localização correta do CEST
- tratamento de produtos de balança
- padronização das unidades
- preservação do estoque
- formatação dos valores monetários
Ao invés de realizar esse tratamento manualmente em Excel, foi desenvolvida uma consulta SQL que já gera o resultado no formato esperado pelo sistema de destino.
- Exportação de produtos ativos
- Busca automática do CEST através da faixa do NCM
- Definição automática do CST
- Definição automática dos CFOPs
- Tratamento de produtos de balança
- Conversão automática da unidade para KG
- Geração da referência da balança
- Manutenção de estoques negativos
- Formatação dos preços com duas casas decimais
- Compatível com Firebird 2.0.3
Firebird 2.0.3
ESTOQUE
CEST
| Campo | Finalidade |
|---|---|
| CODIGO | Código do produto |
| DESCRICAO | Nome |
| PRECO_VENDA | Valor de venda |
| PRECO_CUSTO | Valor de compra |
| COD_NCM | NCM |
| BARRAS | Código de barras |
| ST | CST |
| UND | Unidade |
| QTD | Estoque |
| SITUACAO | Produto ativo |
| Campo |
|---|
| CODIGO |
| FAIXA_NCM_INI |
| FAIXA_NCM_FIM |
Firebird
│
▼
Tabela ESTOQUE
│
▼
Aplicação das regras
• Tributação
• CFOP
• CEST
• Unidade
• Produtos de balança
│
▼
Layout pronto para importação
│
▼
ERP de destino
Caso o campo ST esteja vazio:
102
Caso contrário:
ST
| Operação | CFOP |
|---|---|
| Venda Estadual | 5102 |
| Venda Interestadual | 6102 |
| Compra Estadual | 1102 |
| Compra Interestadual | 2102 |
| Operação | CFOP |
|---|---|
| Venda Estadual | 5405 |
| Venda Interestadual | 6405 |
| Compra Estadual | 1403 |
| Compra Interestadual | 2403 |
| Campo | Valor |
|---|---|
| CST PIS | 49 |
| CST COFINS | 49 |
| CST IPI | 99 |
| Origem | 0 |
| Redução BC | 0 |
| Enquadramento IPI | 999 |
| Gerenciar Estoque | 1 |
| ICMS | 0 |
| PIS | 0 |
| COFINS | 0 |
| IPI | 0 |
Foi identificado durante o projeto que o campo:
ESTOQUE.COD_CESTnão era confiável.
A solução foi localizar automaticamente o CEST utilizando a tabela de faixas.
SELECT FIRST 1
C.CODIGO
FROM CEST C
WHERE E.COD_NCM
BETWEEN
C.FAIXA_NCM_INI
AND C.FAIXA_NCM_FIMCaso não exista correspondência, o campo permanece vazio.
Um produto é identificado como produto de balança quando:
- possui exatamente 5 caracteres
- inicia com o número 2
Exemplo
20123
Nesse caso:
| Campo | Resultado |
|---|---|
| Código de Barras | vazio |
| Referência da Balança | 0123 |
| Unidade | KG |
| Balança PDV | 1 |
Demais produtos:
| Campo | Resultado |
|---|---|
| Código de Barras | BARRAS |
| Unidade | 2 primeiros caracteres |
| Balança PDV | 0 |
Foi identificado que o estoque correto está armazenado no campo:
QTDO projeto preserva estoques negativos.
Os preços são exportados utilizando:
CAST(PRECO_VENDA AS NUMERIC(15,2))
CAST(PRECO_CUSTO AS NUMERIC(15,2))- Firebird 2.0.3
- IBExpert
- SQL ANSI compatível com Firebird
firebird-product-migration
├── README.md
├── LICENSE
│
├── sql
│ ├── export_produtos.sql
│ ├── validar_estoque.sql
│ └── consultas_auxiliares.sql
│
├── docs
│ ├── regras_de_negocio.md
│ ├── produtos_balanca.md
│ ├── cests.md
│ ├── arquitetura.md
│ └── decisoes_do_projeto.md
│
├── exemplos
│ ├── layout_importacao.xlsx
│ ├── resultado.csv
│ └── imagens
│
└── imagens
├── fluxo.png
└── estrutura.png
- Abrir o banco no IBExpert.
- Executar o script
export_produtos.sql. - Exportar o resultado para Excel ou CSV.
- Importar o arquivo no ERP de destino.
Durante o desenvolvimento foram identificadas algumas particularidades importantes:
- O CST correto estava armazenado na coluna
ST. - O campo
COD_CESTda tabelaESTOQUEnão era confiável. - O CEST precisava ser obtido por faixa de NCM.
- Produtos de balança possuem um padrão específico de código de barras.
- O estoque correto é obtido pela coluna
QTD. - O Firebird 2.0.3 possui limitações que exigem funções clássicas como
CASE,FIRST,SUBSTRING,STARTING WITHeCOALESCE.
Este projeto pode evoluir para uma ferramenta completa de migração, incluindo:
- Conexão automática com Firebird via Python
- Geração de arquivos Excel (.xlsx)
- Interface gráfica para usuários
- Configuração de regras fiscais por cliente
- Exportação para diferentes layouts de ERP
- Logs de execução
- Testes automatizados
Cássio Brito Rodrigues
Este projeto está licenciado sob a licença MIT.