Inscrição SUFRAMA

Inscrição SUFRAMA, o número que a Superintendência da Zona Franca de Manaus dá às empresas com incentivos fiscais. A NF-e o traz no campo ISUF.

  • Matriz de paridade

Validar

Valida uma Inscrição SUFRAMA: o leiaute SS.NNNN.LLD (setor, sequencial, localidade da unidade SUFRAMA e dígito verificador) e o dígito verificador por módulo 11.

  • O campo da NF-e é numérico, com 8 ou 9 posições. O setor SS pode começar com 0, e aí o número perde esse zero e fica com 8 dígitos. O setor nunca pode ser 00.
  • Um valor de 8 dígitos é validado com o zero recolocado à esquerda. Por isso um valor de 8 dígitos que começa com 0 é rejeitado: vira setor 00. O manual da NF-e só diz que SS pode começar com 0: essa leitura dos 8 dígitos é inferência da biblioteca.
  • Dígito verificador: módulo 11 sobre os 8 primeiros dígitos, pesos 2 a 9 da direita para a esquerda. O dígito é 0 quando o resto é 0 ou 1.
  • Aceita como máscara espaço em branco, ., - e /, sozinhos ou em sequência, entre os campos de SS.NNNN.LLD (dígito verificador incluído, como em 20.5678.10-6), e espaços nas pontas. Qualquer outro caractere, ou um separador dentro de um campo, torna o valor inválido.
  • Setor e localidade não são validados contra tabela: não existe lista oficial exaustiva. Por isso não há getSuframaInfo.
  • A regra E18-30 da NF-e (destinatário em AC, AM, RO, RR ou Macapá/Santana-AP) fica fora do escopo.
  • A regra vem do Manual de Orientação do Contribuinte da NF-e (MOC 7.0, seção 8.4, e campo E18 ISUF, regra E18-20, rejeição 235). A própria SUFRAMA não publica leiaute nem dígito verificador.
  • Só uma string é lida. Qualquer outro tipo retorna false.
ParâmetroTipoObrigatório
suframastringsim
retornaboolean

Valida uma Inscrição SUFRAMA. É o número de registro que a Superintendência da Zona Franca de Manaus dá às empresas com incentivo fiscal, informado no campo ISUF do destinatário da NF-e.

  • O número tem a forma SS.NNNN.LLD: setor de atividade, número sequencial, localidade da unidade da SUFRAMA e dígito verificador.
  • Aceita 8 ou 9 dígitos. O MOC só diz que o código de setor "pode começar por '0'"; ler um valor de 8 dígitos como um cujo código de setor perdeu esse zero é uma inferência desta biblioteca.
  • Retorna false para um código de setor 00 e para um dígito verificador módulo 11 errado.
  • Os códigos de setor e de localidade não são conferidos com uma tabela, pois o manual os lista apenas como exemplos.
  • A regra vem do Manual de Orientação do Contribuinte da NF-e (CONFAZ/ENCAT), não da SUFRAMA, cuja Resolução CAS nº 64/2021, art. 5º, só chama a inscrição de "um número de identificação e controle" e não traz layout nem dígito verificador.
  • Espaços, ., - e / são aceitos entre os campos, como em isValidCpf. Qualquer outro caractere invalida o valor.
import { isValidSuframa } from '@brazilian-utils/brazilian-utils';

isValidSuframa('123456789'); // true
isValidSuframa('12.3456.789'); // true
isValidSuframa('10001018'); // true (o mesmo que '010001018')
isValidSuframa('123456780'); // false
isValidSuframa('001234560'); // false (setor 00)
Código: brazilian-utils/javascript
Teste com JavaScript isValidSuframa
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (41) e o resultado em cada biblioteca suframa.isValid

Formatar

Formata uma Inscrição SUFRAMA com a máscara 00.0000.000. Só a estrutura muda (use suframa.isValid para verificar o número).

  • A máscara é progressiva: um valor parcial é formatado até onde vai. Caracteres que não são dígitos são descartados, e dígitos depois do 9º são ignorados.
  • options.pad primeiro completa o valor com zeros à esquerda até 9 dígitos. Um valor sem dígitos (vazio, ou só letras e símbolos) retorna uma string vazia, mesmo com pad.
  • Um valor de 8 dígitos é um número cujo setor perdeu o zero à esquerda. Sem pad, a máscara agrupa uma posição antes (10001018 dá 10.0010.18). Use { pad: true } para obter a máscara correta (01.0001.018).
  • Um número só é lido se for um inteiro seguro não negativo. Um número negativo, fracionário, não finito ou inseguro retorna uma string vazia.
ParâmetroTipoObrigatório
valuestring | numbersim
optionsFormatSuframaOptionsnão
options.padbooleannão
retornastring

Formata uma Inscrição SUFRAMA.

  • Opções (FormatSuframaOptions): pad completa o valor com zeros à esquerda até os 9 dígitos antes de aplicar a máscara (padrão false), o que devolve o zero à esquerda de um valor de 8 dígitos. Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
  • A máscara é progressiva, como nas outras funções format, então um valor de 8 dígitos sem pad é agrupado uma posição antes: use pad: true para um valor lido direto do campo ISUF, que pode vir com 8 dígitos.
import { formatSuframa } from '@brazilian-utils/brazilian-utils';

formatSuframa('123456789'); // 12.3456.789
formatSuframa('10001018'); // 10.0010.18 (8 dígitos, a máscara agrupa uma posição antes)
formatSuframa('10001018', { pad: true }); // 01.0001.018
Código: brazilian-utils/javascript
Teste com JavaScript formatSuframa
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (26) e o resultado em cada biblioteca suframa.format

Interpretar

Remove a formatação da Inscrição SUFRAMA e mantém apenas os dígitos, no máximo 9, como o campo ISUF da NF-e espera.

  • A função não completa o valor com zeros à esquerda. Um valor de 8 dígitos continua com 8.
  • Um número só é lido se for um inteiro seguro não negativo. Um número negativo, fracionário, não finito ou inseguro retorna uma string vazia.
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação da Inscrição SUFRAMA, mantém apenas os dígitos e limita o resultado a 9 dígitos.

import { parseSuframa } from '@brazilian-utils/brazilian-utils';

parseSuframa('12.3456.789'); // 123456789
Código: brazilian-utils/javascript
Teste com JavaScript parseSuframa
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (11) e o resultado em cada biblioteca suframa.parse

Gerar

Gera uma Inscrição SUFRAMA aleatória com dígito verificador válido: sempre 9 dígitos, sem máscara.

  • O setor nunca é 00, a única regra de estrutura que o manual da NF-e traz.
  • Setor e localidade são aleatórios. Não precisam corresponder a códigos que a SUFRAMA usa.
ParâmetroTipoObrigatório
retornastring

Gera uma Inscrição SUFRAMA aleatória válida de 9 dígitos.

  • O dígito verificador é válido e o código de setor nunca é 00. Os códigos de setor e de localidade são aleatórios.
import { generateSuframa } from '@brazilian-utils/brazilian-utils';

generateSuframa(); // '205678106'

Fonte: Manual de Orientação do Contribuinte da NF-e 7.0, Visão Geral (seção 8.4), MOC 7.0, Anexo I (campo 79, E18 ISUF, e regra E18-20).

Código: brazilian-utils/javascript
Teste com JavaScript generateSuframa
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (2) e o resultado em cada biblioteca suframa.generate

Fontes oficiais

Veja também Chave de acesso NF-e, Inscrição estadual, CNPJ

Atualizado em

Nesta página