Uma API robusta e de alta performance para processamento, validação e armazenamento de Notas Fiscais Eletrônicas (NF-e) a partir de arquivos XML. O projeto foi construído seguindo princípios de Clean Architecture e S.O.L.I.D, garantindo modularidade, facilidade de manutenção e escalabilidade.
- Parsing Inteligente: Extração eficiente de dados de XMLs da NF-e (v4.00) utilizando
xmltodict. - Modelagem Relacional: Estrutura de banco de dados normalizada com entidades para
Emitente,Destinatário,Transportadora,ProdutoseImpostos. - Transações Atômicas: Integridade de dados garantida. Se uma parte do salvamento falhar, nada é persistido.
- Validação de Dados: Uso de Pydantic para validar schemas de entrada e saída.
- Idempotência: Verifica duplicidades antes de inserir, evitando registros redundantes de entidades.
- Framework Web: FastAPI - Moderno, rápido e com documentação automática.
- ORM: SQLAlchemy 2.0 - Mapeamento objeto-relacional poderoso.
- Banco de Dados: SQLite (padrão) / Extensível para PostgreSQL/MySQL.
- Parsing:
xmltodictelxml. - Testes:
pytestehttpx.
O projeto segue uma estrutura modular clara:
app/
├── api/ # Rotas e endpoints da API
├── core/ # Configurações globais (env vars)
├── db/ # Configuração do banco e modelos ORM
│ ├── crud/ # Camada de acesso a dados (Repository pattern)
│ └── models/ # Definição das tabelas
├── schemas/ # Modelos Pydantic (Request/Response)
├── services/ # Regras de negócio e lógicas de parsing isoladas
└── tests/ # Testes de integração e unitários
- Python 3.10 ou superior
- Pip
-
Clone o repositório
git clone https://github.com/vianaxx/NF-e-XML_Parser-API.git cd NF-e-XML_Parser-API -
Crie um ambiente virtual
python -m venv venv # Windows .\venv\Scripts\activate # Linux/Mac source venv/bin/activate
-
Instale as dependências
pip install -r requirements.txt
-
Configuração O projeto usa um arquivo
.envpara configurações. Cria um arquivo.envna raiz (ou renomeie um exemplo) se necessário. Por padrão, ele usará um banco SQLite local.
uvicorn app.main:app --reloadAcesse a documentação interativa em: http://127.0.0.1:8000/docs
Para rodar a suíte de testes automatizados:
pytestEnvia um arquivo XML para processamento.
- Request:
multipart/form-data, campofile(arquivo .xml). - Response:
{ "message": "Nota fiscal processada com sucesso" }