NFS-e para SaaS
Guia prático para devs e founders BR sobre Nota Fiscal de Serviço Eletrônica em cobranças recorrentes de SaaS. Asaas, certificado A1, prefeituras.
3 min de leituraIT Booster Global
Vender SaaS em assinatura mensal no Brasil parece simples até você bater nas obrigações fiscais. Aqui está o que aprendi rodando o JetSend em produção emitindo NFS-e automaticamente a cada cobrança paga.
O que é NFS-e
NFS-e (Nota Fiscal de Serviço Eletrônica) é o documento fiscal obrigatório para toda venda de serviço, incluindo software como serviço (SaaS). É municipal: cada prefeitura tem seu próprio padrão XML e webservice de emissão.
Para SaaS, a regra geral é simples:
Toda cobrança paga → uma NF emitida em até 5 dias úteis (varia por município)
Esquecer disso = sonegação. A Receita Federal cruza extrato bancário (E-Financeira) com sua DCTF/DEFIS e detecta receita não declarada.
Dados fiscais
Antes de emitir a primeira NF, sua empresa precisa:
- Inscrição Municipal ativa (no município sede). Brasília-DF emite via Cadastro Fiscal do DF
- CNAE principal compatível com o serviço (no nosso caso, 6201-5/01 ou 6209-1/00 para TI)
- Item da lista de serviços LC 116/03 correspondente. Para desenvolvimento de software: 1.01. Para suporte técnico: 1.07
- Certificado Digital A1 da empresa (PFX/P12) válido, usado para assinar a NF
Manual ou automático
Manual
- Cliente paga
- Você lança no controle interno
- Acessa portal da prefeitura
- Preenche CPF/CNPJ do tomador, valor, descrição, código municipal
- Assina com cert A1
- Baixa PDF + XML
- Envia pro cliente
Automático
Asaas é o que mais usei. O fluxo vira:
- Cliente paga (cartão, Pix ou boleto)
- Asaas dispara webhook
PAYMENT_RECEIVEDpro seu backend - Seu código chama
POST /v3/invoicesno Asaas com{customer, value, description, serviceCode, deductions} - Asaas pega o cert A1 que você uploadeou e assina o XML
- Envia para prefeitura
- Prefeitura responde em <60s com
AUTHORIZEDouERROR - Cliente recebe email automático com PDF + XML
- Webhook
INVOICE_AUTHORIZEDchega no seu backend para você arquivar
Erros comuns
Em produção, NFs falham frequentemente por:
- Endereço do tomador incompleto, CEP inválido, sem complemento ou bairro. Solução: ao cadastrar customer no gateway, exigir CEP válido + auto-fill via BrasilAPI quando CNPJ
- Inscrição Municipal do prestador inativa, empresa nova ou recém-migrada. Solução: validar IM no cadastro municipal antes do primeiro envio
- Optante Simples Nacional incorreto, empresa Lucro Presumido marcada como Simples na configuração do gateway, ou vice-versa. Solução: confirmar com contador o regime real (não confiar no que está no SaaS)
Retenções federais
Empresa Lucro Presumido (como a IT Booster) emitindo serviço de informática:
- PF tomador: sem retenção federal. ISS 2% (DF) recolhido por você
- PJ Simples Nacional tomador: sem retenção federal
- PJ Lucro Real/Presumido tomador acima de limite:
O gateway Asaas calcula automaticamente baseado no CPF/CNPJ do tomador. Você só configura uma vez no cadastro do serviço.
Cancelamento
Possível em até 24h-7 dias dependendo da prefeitura. Em Brasília-DF: 24h pelo portal. Depois disso, só "Carta de Correção" ou cancelamento administrativo (com justificativa).
No JetSend
No JetSend, o fluxo NF é totalmente invisível pro cliente:
- Cliente assina plano paid (Starter R$ 29, Pro R$ 99, etc) via dashboard
- Asaas cobra mensal (boleto, Pix ou cartão)
- Webhook
PAYMENT_RECEIVEDchega na API do JetSend - Backend dispara
emitirNotaFiscal()setenant.nfEnabled === true - NF emitida com:
- Cliente recebe NF por email automaticamente
Conclusão
Para SaaS brasileiro, automação fiscal não é luxo, é sobrevivência operacional acima de 50 cobranças/mês. Asaas + certificado A1 + webhook handler resolve o pipeline completo em ~1 dia de implementação.
Se você quer ver isso funcionando sem precisar implementar, todo cliente do JetSend recebe NF brasileira automática em qualquer plano paid: jetsend.com.br.
