CFOP

Código Fiscal de Operações e Prestações: os códigos do Anexo II do Convênio SINIEF s/nº 1970.

  • Matriz de paridade

Validar

Verifica se um código CFOP existe no Anexo II consolidado do Convênio SINIEF s/nº 1970 em vigor.

  • Só contam os códigos operáveis: a função rejeita títulos de grupo e de subgrupo (códigos terminados em 00 e 50).
  • Aceita os 4 dígitos, a forma N.NNN ou um inteiro seguro não negativo. Uma string com máscara pode ter qualquer sequência de separadores (espaço, ., - ou /) entre os grupos: 5..102 é válido. Até a 2.4.0 a forma tinha um único separador e 5..102 era rejeitado. Qualquer outra string é rejeitada.
  • Espaços nas pontas são ignorados.
  • Nenhum CFOP começa com zero, então a função não completa nada com zeros.
ParâmetroTipoObrigatório
valuestring | numbersim
retornaboolean

Valida um código CFOP (Código Fiscal de Operações e Prestações) contra a tabela oficial, o Anexo II consolidado do Convênio SINIEF s/nº 1970 em vigor.

  • Só os códigos operáveis contam: os títulos de grupo e subgrupo, os códigos terminados em 00 e 50, são rejeitados.
  • Aceita uma string com os 4 dígitos ou com a forma N.NNN, com qualquer sequência de separadores (espaço, ., - ou /) entre os grupos, ou um número. Qualquer outra string é rejeitada.
  • Nenhum código CFOP começa com zero, então nada é completado.
import { isValidCfop } from '@brazilian-utils/brazilian-utils';

isValidCfop('5102'); // true
isValidCfop('1.101'); // true
isValidCfop('7504'); // true (incluído na reescrita de 2022 do anexo)
isValidCfop('0000'); // false
isValidCfop('1150'); // false (título de subgrupo, não é um código operável)
isValidCfop('abc5102'); // false (não é uma forma documentada)
isValidCfop(-5102); // false (não é um inteiro seguro não negativo)

Fonte: Anexo II consolidado do Convênio SINIEF s/nº 1970, última alteração pelo Ajuste SINIEF 39/25.

Código: brazilian-utils/javascript
Teste com JavaScript isValidCfop
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 cfop.isValid

Formatar

Formata um código CFOP com a máscara N.NNN. Só a estrutura muda (use cfop.isValid para verificar o código na tabela).

  • A máscara é aplicada até onde os dígitos vão, então um valor sendo digitado é mascarado progressivamente.
  • options.pad (padrão false) primeiro completa o valor com zeros à esquerda até 4 dígitos. Um número é tratado como a string dos seus dígitos, então só é completado com pad.
  • Uma string é lida pelos seus dígitos: os outros caracteres são descartados e dígitos depois do último da máscara são ignorados.
  • Um valor vazio, ou sem dígitos, retorna uma string vazia mesmo com pad. null e undefined também retornam uma string vazia.
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia.
  • Nenhum CFOP começa com zero, então pad só serve a quem quer largura fixa.
  • Nova na 2.5.0 (#615), para que todo código com máscara tenha o seu formatador.
ParâmetroTipoObrigatório
valuestring | numbersim
optionsFormatCfopOptionsnão
options.padbooleannão
retornastring

Formata um código CFOP (Código Fiscal de Operações e Prestações) na forma N.NNN que o anexo imprime. Só a estrutura muda; use isValidCfop para conferir um código com a tabela.

  • Opções (FormatCfopOptions): pad (padrão false) completa antes o valor com zeros à esquerda até os 4 dígitos de um código completo (nenhum CFOP começa com zero, então só serve para largura fixa). Sem ele a máscara é aplicada até onde o valor vai. Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
  • Caracteres fora da máscara são descartados, e um número só é lido como a string dos seus dígitos quando é um inteiro seguro não negativo: um número negativo, fracionário ou inseguro retorna ''. Retorna '' quando não há dígito algum.
import { formatCfop } from '@brazilian-utils/brazilian-utils';

formatCfop('5102'); // 5.102
formatCfop('51'); // 5.1 (máscara aplicada até onde o valor vai)
formatCfop('102', { pad: true }); // 0.102 (completado até 4 dígitos antes)
formatCfop('abc5102'); // 5.102 (só os dígitos são lidos)
formatCfop(-5102); // '' (não é um inteiro seguro não negativo)

Fonte: Convênio SINIEF s/nº 1970, Anexo II, que imprime os códigos como N.NNN.

Código: brazilian-utils/javascript
Teste com JavaScript formatCfop
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 (19) e o resultado em cada biblioteca cfop.format

Interpretar

Remove a formatação do CFOP e mantém apenas os dígitos, limitados a 4.

  • A função não completa o resultado com zeros.
  • Retorna string vazia quando não há nenhum dígito (null e undefined incluídos).
  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os dígitos de qualquer número, descartando sinal e ponto decimal).
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação do CFOP (Código Fiscal de Operações e Prestações), mantém apenas os dígitos e limita o resultado a 4 dígitos.

  • Nenhum código CFOP começa com zero, então nada é completado aqui.
import { parseCfop } from '@brazilian-utils/brazilian-utils';

parseCfop('5.102'); // '5102'
Código: brazilian-utils/javascript
Teste com JavaScript parseCfop
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 (9) e o resultado em cada biblioteca cfop.parse

Consultar

Consulta um código CFOP na tabela oficial e retorna o código e a descrição.

  • Mesmas regras de entrada de cfop.isValid, inclusive uma sequência de separadores entre os grupos (5..102 retorna o registro; até a 2.4.0 retornava null). Retorna null para um título, um código desconhecido ou um valor fora das formas aceitas.
  • Retorna null exatamente quando cfop.isValid retorna false.
ParâmetroTipoObrigatório
valuestring | numbersim
retornaCfop | null

Consulta um código CFOP (Código Fiscal de Operações e Prestações) e retorna seu código e a descrição oficial. O resultado é um registro Cfop: { code, description }.

  • Mesmas regras de isValidCfop. Retorna null para um título, um código desconhecido ou um valor fora das formas documentadas.
import { getCfop } from '@brazilian-utils/brazilian-utils';

getCfop('1101'); // { code: '1101', description: 'Compra para industrialização ou produção rural' }
getCfop('7504'); // { code: '7504', description: 'Exportação de mercadoria que foi objeto de formação de lote de exportação' }
getCfop('0000'); // null
getCfop('5350'); // null (título de subgrupo, não é um código operável)
getCfop('abc5102'); // null (não é uma forma documentada)

Fonte: Anexo II consolidado do Convênio SINIEF s/nº 1970, última alteração pelo Ajuste SINIEF 39/25.

Código: brazilian-utils/javascript
Teste com JavaScript getCfop
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 (22) e o resultado em cada biblioteca cfop.get

Fontes oficiais

Atualizado em

Nesta página