FormatadorXML
- Active · last change 5-26-2026
- ★ 1 on GitHub
README
📄 FormatadorXML - Engenharia de Integração
Um utilitário de alta performance projetado para processamento em lote de arquivos XML (como NF-e e afins). O sistema atua lendo diretórios, extraindo dados atualizados de bancos de dados Oracle e reescrevendo as tags XML utilizando rotinas em Python via background process.
📌 Regra de Negócio
O objetivo principal deste sistema é viabilizar a "Engenharia Reversa" e o transbordo de XMLs entre bases de dados de clientes diferentes. O fluxo funciona da seguinte forma:
- Leitura Visual: O usuário seleciona um diretório contendo dezenas ou centenas de arquivos
.xml. - Identificação: O sistema lê cada arquivo e extrai sua Chave de Acesso.
- Consulta SQL: Com base na chave, o Delphi se conecta ao banco de dados Oracle do cliente de destino e busca as informações reais (Ex: Dados do Destinatário, CFOP, Impostos, etc).
- Parametrização: Um arquivo
.jsontemporário é gerado com a instrução exata das tags a serem substituídas. - Formatação Otimizada: Um core em Python lê a estrutura do XML original, busca os Namespaces dinamicamente e injeta os novos dados do Oracle sem quebrar a assinatura e validade do documento.
- Entrega: O novo lote de XMLs formatados é salvo na pasta
Formatados.
🏗️ Arquitetura e Padrões (Stack Técnica)
O projeto foi construído utilizando um rigoroso padrão MVC (Model-View-Controller) aliado aos princípios SOLID e Injeção de Dependência.
Front-End & Core (Delphi)
- Camada Visual: Delphi VCL + UI DevExpress (
TcxGridotimizado comDataController.Valuespara alta velocidade). - Comunicação DB: Driver DBExpress devidamente parametrizado via algoritmos nativos de criptografia (
TCryptoUtils) para arquivos.conexoes. - Orquestrador: A classe
Service.ExtratorDadosatua como Maestro, consultando o banco e repassando o payload para interfaces sem travar a thread gráfica (uso de Callbacks/Métodos Anônimos).
Worker/Manipulação (Python)
- Por que Python? XMLs de NF-e possuem complexidades com namespaces (
xmlns="http://www.portalfiscal.inf.br/nfe"). A bibliotecalxmlno Python manipulaXPathde forma extremamente superior e tolerante a falhas. - A ponte Delphi-Python é feita consumindo a API nativa do Windows (
CreateProcessemSW_HIDE), garantindo processamento invisível e baseando-se emExit Codespara rastrear sucesso ou falhas.
⚙️ Pré-requisitos e Instalação
1. Configuração do Ambiente Python
O executável Delphi depende que o ambiente virtual do Python esteja criado e as bibliotecas instaladas.
Abra o terminal na pasta raiz do projeto e execute:
# Acesse a pasta python
cd python
# Crie o ambiente virtual (venv)
python -m venv venv
# Ative o ambiente
# No Windows:
venv\Scripts\activate
# Instale as dependências contidas no requirements.txt
pip install -r requirements.txt2. Configuração do Arquivo de Conexões (.conexoes)
O sistema lê parâmetros do banco a partir de um arquivo FormatadorXML.conexoes no padrão INI.
Coloque este arquivo na raiz de execução ou no diretório mapeado.
Exemplo de estrutura:
[NOME_DO_CLIENTE]
DriverName=DevartOracleDirect
Database=127.0.0.1:30100:ORCL
User_Name=VIASOFTMERC
Password=3303700807702709817218219217218219217218219217218219217218219217218219217216205809604709807608619217218219217218219217218219217218219217218219217218211206603. Compilação (Delphi)
- Abra o arquivo
FormatadorXML.dprojem uma IDE Delphi compatível. - Certifique-se de que as bibliotecas DevExpress estão instaladas no seu ambiente.
- Compile o projeto para a plataforma alvo (Win32/Win64).
4. 🚀 Como Usar
- Execute o
FormatadorXML.exe. - No painel superior, selecione a Conexão de Banco desejada.
- No campo Diretório dos XMLs, navegue até a pasta base que contém os XMLs a serem formatados. O Grid será carregado imediatamente.
- Clique em Processar XMLs.
- Acompanhe a barra de progresso e o status no Grid sendo atualizados em tempo real (MVC Callbacks).
- Os arquivos resultantes estarão em uma subpasta chamada
Formatadosdentro do diretório original escolhido.
5. 🛠️ Manutenção da Engenharia Reversa (Mapeamento de Tags)
Para adicionar uma nova tag na regra de substituição (Ex: Inserir um CFOP novo):
- Vá até a unit
Service.ExtratorDados.pasno Delphi. - Adicione a coluna necessária no
SELECTda instruçãoTSQLQuery. - Utilize a Fluent Interface do
GeradorJSONpara incluir a tag mapeando o retorno do banco:
oGeradorJSON
.AdicionarTag('xNome' , oQuery.FieldByName('xNome').AsString )
.AdicionarTag('NOVA_TAG_AQUI', oQuery.FieldByName('NOVA_COLUNA_SQL').AsString);- Apenas compile o projeto Delphi. O script Python processará a nova regra de forma 100% dinâmica e automática.
📝 Desenvolvido com foco em escalabilidade, manutenibilidade e Clean Architecture.

