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.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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
SSpode começar com 0, e aí o número perde esse zero e fica com 8 dígitos. O setor nunca pode ser00. - 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 queSSpode 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 deSS.NNNN.LLD(dígito verificador incluído, como em20.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âmetro | Tipo | Obrigatório |
|---|---|---|
suframa | string | sim |
| retorna | boolean |
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
falsepara um código de setor00e 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 emisValidCpf. 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)Teste com JavaScript isValidSuframa
Casos de teste compartilhados (41) e o resultado em cada biblioteca suframa.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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.padprimeiro 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 compad.- 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 (10001018dá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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
options | FormatSuframaOptions | não |
options.pad | boolean | não |
| retorna | string |
Formata uma Inscrição SUFRAMA.
- Opções (
FormatSuframaOptions):padcompleta o valor com zeros à esquerda até os 9 dígitos antes de aplicar a máscara (padrãofalse), o que devolve o zero à esquerda de um valor de 8 dígitos. Um valor vazio, ou sem dígitos, devolve''mesmo compad. - A máscara é progressiva, como nas outras funções
format, então um valor de 8 dígitos sempadé agrupado uma posição antes: usepad: truepara um valor lido direto do campoISUF, 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.018Teste com JavaScript formatSuframa
Casos de teste compartilhados (26) e o resultado em cada biblioteca suframa.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | string |
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'); // 123456789Teste com JavaScript parseSuframa
Casos de teste compartilhados (11) e o resultado em cada biblioteca suframa.parse
Gerar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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âmetro | Tipo | Obrigatório |
|---|---|---|
| retorna | string |
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).
Teste com JavaScript generateSuframa
Casos de teste compartilhados (2) e o resultado em cada biblioteca suframa.generate
Fontes oficiais
- confaz.fazenda.gov.br/legislacao/arquivo-manuais/…/moc7-visao-geral.pdf
- confaz.fazenda.gov.br/legislacao/arquivo-manuais/…/moc7-anexo-i-leiaute-e-rv.pdf
Veja também Chave de acesso NF-e, Inscrição estadual, CNPJ
Atualizado em
