API REST para processamento de Notas Fiscais Eletrônicas (NFe) com integração à biblioteca Java-NFe.
Arquitetura com separação de responsabilidades, configuração multi-ambiente, geração e validação XML contra .xsd oficial, montagem automática de DANFE com envio por e-mail e armazenamento do XML no Amazon S3.
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /nfe/create |
Emitir NFe (gera XML, valida, cria DANFE e envia email) |
| GET | /nfe/list |
Listar todas as NFes |
| GET | /nfe/tracking/{trackingId} |
Buscar NFe por código de rastreamento |
| GET | /nfe/tracking/{trackingId}/xml |
Buscar XML da NFe por código de rastreamento |
📖 Swagger UI: http://localhost:8080/q/swagger-ui
POST /nfe/create
│
├─ Gera XML NFe
├─ Valida contra XSD (Receita Federal)
├─ Assina XML (mock em test / A1 em prod)
├─ Gera DANFE em PDF (JasperReports)
├─ Envia email com DANFE anexado
├─ Upload XML ──────────────────────► S3 (chave 44 dígitos = nome do arquivo)
└─ Persiste Invoice + InvoiceXml ───► PostgreSQL
GET /nfe/list ──► PostgreSQL → lista todas as NFes
GET /nfe/tracking/{id} ──► PostgreSQL → dados da NFe
GET /nfe/tracking/{id}/xml ──► S3 → XML da NFe
##💻 Pré-requisitos
Copie o arquivo de exemplo e ajuste os valores:
cp .env.example .env💡 Em desenvolvimento, mantenha
AWS_ACCESS_KEY_ID=testeAWS_SECRET_ACCESS_KEY=testpara funcionar com o LocalStack.
💡 Mock está ativo por padrão — emails aparecem confirmados apenas no console (sem envio real). Para envio real, preencha
SMTP_USERNAMEeSMTP_PASSWORDno.enve desative mock.enbaled.
Em ambiente de desenvolvimento o LocalStack simula o S3 localmente (porta 4566). O bucket s3-nfe-bucket é criado automaticamente pelo docker compose up. O XML de cada NFe é armazenado usando a chave de acesso de 44 dígitos como nome do arquivo.
Para apontar para o S3 real (produção), substitua as credenciais e remova a configuração de endpoint local.
Para integração com SEFAZ:
export NFE_CERT_PATH="/caminho/certificado.pfx"
export NFE_CERT_PASSWORD="senha_certificado"git clone https://github.com/Ayrton-Machado/NFe-Processing-Service-API
cd NFe-Processing-Service-APIcp .env.example .env
# Edite o .env com suas credenciaisLinux / macOS:
docker compose up -dIsso sobe o PostgreSQL na porta
5432e o LocalStack (S3) na porta4566, além de criar automaticamente o buckets3-nfe-bucket.
Linux / macOS:
chmod +x mvnw # Dar permissão de execução (executar apenas uma vez)
./mvnw quarkus:devWindows (CMD):
mvnw.cmd quarkus:devWindows (PowerShell):
.\mvnw.cmd quarkus:dev✅ Aplicação disponível em: http://localhost:8080
📖 Swagger UI: http://localhost:8080/q/swagger-ui
💡 Quarkus Dev Mode inclui hot reload - suas alterações são aplicadas automaticamente!
Linux / macOS:
chmod +x mvnw # Dar permissão (se ainda não fez)
./mvnw testWindows:
mvnw.cmd test- API REST com Quarkus (3 endpoints principais)
- Configuração multi-ambiente (application.properties)
- Ambiente (test) que executa o fluxo do sistema sem necessidade de certificado A1
- Certificado mockado para ambiente Teste (desenvolvimento sem A1)
- Geração de XML NFe com validação estrutural contra schemas XSD da Receita
- Geração de DANFE em PDF (JasperReports)
- Envio de email com anexo PDF (Quarkus Mailer)
- Entidades JPA com Hibernate Panache (Invoice, InvoiceItem, InvoiceXml)
- Migração de H2 para PostgreSQL
- Banco e LocalStack (s3) rodando em Container Docker
- LocalStack (S3) no Docker Compose para simulação local do S3
- Upload do XML NFe para S3 (nome do arquivo = chave de acesso de 44 dígitos)
- Testes unitários (13 testes passando com JUnit)
- Exigir dados pelo POST para validação e inserção no XML
- Integração total com SEFAZ (Homologação/Produção)
- Validação de XML assinada contra schemas XSD da Receita
- Autorização de NFe com SEFAZ
-
Atualizar Readme Sempre
-
Calcular Impostos Automaticamente
- Corrigir DANFE para retornar impostos da nota (atualmente todos zerados)
-
Criar validação dos dados + testes de validação
-
Criar/refatorar endpoints
- Implementar busca do XML no bucket pelo endpoint "/nfe/tracking/{id}/xml"
-
Implementar autenticação JWT
-
Configurar GitHub Actions
-
Implementar métricas e observabilidade completa
-
Implementar filas com RabbitMQ ou Kafka
-
Preparar para deploy em nuvem
-
Integrar Frontend Angular para demonstrar fluxo com inputs
-
Em produção: substituir persistência do DANFE em disco por pdf_byte em memória, enviando por email sem salvar localmente
Este projeto está sob licença. Veja o arquivo LICENSE para mais detalhes.