Skip to content

NF-e — Inutilização de Numeração

Visão Geral

A Inutilização de Numeração é o processo obrigatório de comunicar à SEFAZ que determinados números de NF-e não foram e não serão utilizados. É exigida pela legislação fiscal para manter a integridade da sequência numérica das notas.

Casos de uso típicos:

  • Números pulados por falha de sistema
  • Séries encerradas sem emissão de todas as numerações
  • Cancelamento de bloco de numeração previamente reservado

Atenção: A inutilização é irreversível. Uma numeração inutilizada jamais poderá ser utilizada para emissão.


Localização

CamadaArquivo
Serviçobackend/src/fiscal/inutilizacao.service.ts
Schemabackend/src/fiscal/schemas/inutilizacao-event.schema.ts
EndpointPOST /t/:slug/admin/fiscal/inutilizar
ListagemGET /t/:slug/admin/fiscal/inutilizacoes

Acesso na UI: Admin → Fiscal → Inutilização de Numeração


Schema InutilizacaoEvent

CampoTipoDescrição
tenantObjectIdTenant proprietário
serienumberSérie da NF-e (ex: 1)
startNumbernumberPrimeiro número da faixa
endNumbernumberÚltimo número da faixa (>= startNumber)
justificationstring (15–255 chars)Motivo da inutilização
statuspending | authorized | rejectedEstado junto à SEFAZ
protocolNumberstring?Protocolo SEFAZ retornado
rejectionReasonstring?Mensagem de rejeição
requestedByObjectId → UserUsuário que solicitou

Índice: { tenant, serie, startNumber } para consulta rápida por série.


API Endpoints

MétodoRotaDescrição
POST/t/:slug/admin/fiscal/inutilizarInutilizar faixa de numeração
GET/t/:slug/admin/fiscal/inutilizacoesListar eventos do tenant

Guards: JwtAuthGuard → TenantGuard

DTO — InutilizarRangeDto

typescript
{
  serie: number;          // Série NF-e
  startNumber: number;    // Número inicial
  endNumber: number;      // Número final (>= startNumber)
  justification: string;  // Justificativa (≥ 15 chars)
}

Fluxo de Inutilização

Admin preenche: série, faixa (início–fim), justificativa

POST /t/:slug/admin/fiscal/inutilizar

InutilizacaoService.inutilizar()

1. Valida: endNumber >= startNumber
2. Lê CNPJ e UF do tenant (obrigatórios)
3. Persiste InutilizacaoEvent { status: 'pending' }
4. Chama SefazDirectProvider.inutilizar()

SEFAZ retorna protocolNumber ou rejeição

InutilizacaoEvent atualizado → 'authorized' ou 'rejected'

A persistência antes da chamada SEFAZ garante rastreabilidade mesmo em caso de timeout.


Pré-requisitos

Para inutilizar, o tenant deve ter:

  • CNPJ configurado em Configurações → Fiscal
  • UF (estado) configurado
  • Ambiente (homologacao ou producao) definido

Se algum campo estiver faltando, o serviço lança 400 BadRequestException com mensagem descritiva.


Status dos Eventos

StatusDescrição
pendingEnviado à SEFAZ, aguardando retorno (estado transitório)
authorizedSEFAZ confirmou — números permanentemente inutilizados
rejectedSEFAZ rejeitou — ver rejectionReason para detalhes

Ambiente de Homologação

Em homologação, a inutilização segue o mesmo fluxo mas opera no ambiente de testes da SEFAZ. Use para validar o processo antes de ir para produção. Os eventos de homologação ficam separados dos de produção pelo campo ambiente no tenant.


Relacionados

Lançado sob a licença MIT.