AWS e Notas fiscais: Convertendo NFe XML em CSV com arquitetura serverless

AWS e Notas fiscais: Convertendo NFe XML em CSV com arquitetura serverless

Desenvolvimento
AWS
API

Introdução

A emissão de notas fiscais eletrônicas (NFe) virou rotina no Brasil. Mas lidar com centenas de arquivos XML e extrair informações úteis deles? Aí já é outra história.

Neste post, vou mostrar como construí uma API serverless que transforma arquivos NFe em planilhas no formato CSV, usando AWS Lambda, S3, SQS e DynamoDB sem precisar manter nenhum servidor e não gastando um centavo (por enquanto).

📌 O problema

Há um tempo que emito notas fiscais, antes pelo infame sistema terceirizado da prefeitura, rodando num delphi jurássico numa máquina escondida em alguma caverna, agora no sistema de emissão de notas nacionais do governo que funciona incrivelmente bem. Certo dia emiti uma nota e como de costume a enviei por e-mail para um tomador de serviços que respondeu com:

Poderia me encaminhar o XML por favor?

Na hora fiquei confuso, sempre fui tão focado nas notas em PDF que nunca tinha realmente parado pra pensar que o arquivo .xml que vinha junto das notas tinha alguma utilidade, mas o período em que isso aconteceu foi o melhor (ou pior) possível.

🦁 Hora do Leão

Como todo cidadão pagador de impostos preciso fazer a declaração do imposto de renda e no meu caso tinha alguns megabytes de notas fiscais para declarar. Só de pensar em manualmente olhar todas elas para calcular valores já me dava sono, existe uma categoria de problema que eu gosto de chamar de "chatice digital moderna". Aqueles perrengues tecnológicos que são simples de resolver, mas são só... chatos demais.

Era um fim de semana normal, meu backlog de side projects ignorado com carinho, e eu lá, tentando organizar minhas notas fiscais quando veio um desejo simples: Ter um CSV bonitinho com os dados úteis das minhas notas. Algo pra entender meus faturamentos e de onde o dinheiro vinha (ou ia).

A maioria das pessoas nesse momento aceita o destino, pega as notas e vai marcando numa planilha.

Eu abri o terminal.

📋 O plano (ou a ausência dele)

A ideia era simples: se eu tenho um diretório com dezenas de XML padronizados com dados de todas as minhas notas então eu posso processar um lote e extrair os dados para um CSV que facilite minha análise.

O escopo estava definido, poderia ser um scriptzinho local. Mas sempre tem aquele porém.

E se desse pra colocar isso na AWS, com Lambda e S3? Eu deveria fazer uma API?

A resposta provavelmente é não, tenho projetos pra tocar coisas para estudar... mas eu fiz. E resolveu meu problema.

Projetos e mais projetos

🛠️ A arquitetura serverless

Decidi dividir o processamento em duas partes principais:

  1. Upload dos arquivos: Onde recebemos os XMLs e os armazenamos temporariamente

  2. Processamento em fila: Onde transformamos os XMLs em CSV e armazenamos o resultado

📤 Parte 1: O upload

Criei um endpoint API Gateway conectado a uma Lambda (upload.js) que:

  • Recebe até N arquivos XML por requisição (no código travei em 5 mas é facilmente modificável)
  • Armazena os arquivos num bucket S3
  • Envia mensagens para uma fila SQS com as localizações dos arquivos e seta uma flag no DynamoDB

🔄 Parte 2: A fila de processamento

A fila SQS aciona outra Lambda (processQueue.js) que:

  • Pega cada arquivo XML do S3 daquele upload
  • Extrai os dados importantes (número da nota, data, valor, CNPJ do destinatário)
  • Converte para formato CSV
  • Salva a planilha na S3
  • Atualiza o status no DynamoDB

✅ Conclusão: Free tier salva vidas

O melhor de tudo isso foi que o projeto não custou nada. Graças ao free tier da AWS, as notas puderam ser processadas sem pagar um centavo. Com alguns ajustes como autenticação, limites de requisição e um frontend simples (trabalho em andamento) essa solução poderia virar uma API production ready para qualquer autônomo ou pequena empresa. Caso tenha curiosidade em conhecer um projeto com um arquitetura serverless simples não deixe de dar uma olhada no repositório do notas-csv, software open source nunca é demais.

Compartilhar este post