CST

Código de Situação Tributária de ICMS, IPI, PIS e COFINS.

  • Matriz de paridade

Validar

Verifica se um código CST é válido para um tributo.

  • options.tax escolhe a tabela: icms, ipi, pis ou cofins (PIS e COFINS usam a mesma tabela). Quando options.tax é omitido ou desconhecido, a função aceita um código que exista em qualquer uma das tabelas.
  • Para icms o código é um dos 15 códigos da Tabela B de 2 dígitos (00, 02, 10, 15, 20, 30, 40, 41, 50, 51, 53, 60, 61, 70, 90), sozinho como o campo CST da NF-e o traz ao lado de orig, ou a forma de 3 dígitos com um dígito de origem 0-8 antes. 02, 15, 53 e 61 são os códigos de monofasia de combustíveis que o Ajuste SINIEF 39/23 incluiu; 12, 13, 52, 72 e 74 não são códigos, porque o Ajuste SINIEF 20/24 os suprimiu antes de entrarem em vigor.
  • ipi aceita 14 códigos de 2 dígitos: 00-05, 49, 50-55 e 99. pis e cofins aceitam 33 códigos de 2 dígitos: 01-09, 49, 50-56, 60-67, 70-75, 98 e 99. Esses tributos não têm forma de 3 dígitos.
  • Aceita uma string ou um inteiro seguro não negativo. A forma de 3 dígitos do ICMS aceita qualquer sequência de separadores (espaço, ., - ou /) logo após o dígito de origem ("1--10", "0 . 10"). Um separador em qualquer outro lugar é rejeitado ("0-0", "00-", "11-0"). Espaços nas pontas são ignorados. Qualquer outra string ("abc110") é rejeitada, a função não extrai os dígitos dela.
  • Um único dígito é completado com zeros até a forma de 3 dígitos do ICMS (0 e "0" são 000, também para os outros tributos, então um único dígito nunca é um código de IPI, PIS ou COFINS). Um valor de 2 dígitos é um código da Tabela B, lido como está escrito e nunca como origem mais um dígito: isValidCst("10", { tax: "icms" }) é o código 10 da Tabela B, e "07" não é um código do ICMS. O número 7 é lido como 007, não como 07.
  • Um options nulo ou que não seja objeto é lido como sem opções, então todas as tabelas são consultadas (até a 2.4.0 o resultado era false).
  • Até a 2.4.0 um valor de 2 dígitos nunca era um código ICMS válido ("10", "00" com tax: "icms" davam false) e só um separador era aceito após o dígito de origem ("1--10" dava false). As duas coisas mudaram na 2.5.0.
  • Fontes: a Tabela B do ICMS do Convênio SINIEF s/nº 1970 na redação dada pelo Ajuste SINIEF 39/23 e alterada pelo Ajuste SINIEF 20/24; IPI, PIS e COFINS da Instrução Normativa RFB nº 1.009/2010.
ParâmetroTipoObrigatório
valuestring | numbersim
optionsIsValidCstOptionsnão
options.tax"icms" | "ipi" | "pis" | "cofins"não
retornaboolean

Valida um código de CST (Código de Situação Tributária) para um tributo. Informe o tributo em options.tax:

TributoFormatoCódigos aceitos
icms2 dígitos (Tabela B) ou 3 dígitos (origem + CST)o código da Tabela B sozinho, ou origem 0-8 + um de 00, 02, 10, 15, 20, 30, 40, 41, 50, 51, 53, 60, 61, 70, 90
ipi2 dígitos00, 01, 02, 03, 04, 05, 49, 50, 51, 52, 53, 54, 55, 99
pis2 dígitos01-09, 49, 50-56, 60-67, 70-75, 98, 99
cofins2 dígitosmesma tabela do pis
  • Opções (IsValidCstOptions): tax escolhe a tabela. Omitido, ou fora desses quatro valores, todas as tabelas são aceitas; um options null ou que não seja objeto é lido como ausente.
  • Aceita uma string com os 2 dígitos de um código da Tabela B ou os 3 dígitos da forma do ICMS, ou um número. A forma do ICMS pode ter qualquer sequência de separadores (espaço, ., - ou /) depois do dígito de origem.
  • Um único dígito é completado até a forma de 3 dígitos do ICMS; um valor de 2 dígitos é um código da Tabela B e nunca é lido como origem mais um dígito ('10' é o código da Tabela B 10), enquanto o número 7 é lido como o código ICMS 007, que não está na tabela, então dá false.
import { isValidCst } from '@brazilian-utils/brazilian-utils';

isValidCst('000', { tax: 'icms' }); // true
isValidCst(0, { tax: 'icms' }); // true (um único dígito é completado até a forma de 3 dígitos, '000')
isValidCst('0', { tax: 'icms' }); // true (completado do mesmo jeito que um número)
isValidCst('110', { tax: 'icms' }); // true
isValidCst('002', { tax: 'icms' }); // true (monofasia de combustíveis)
isValidCst('60', { tax: 'icms' }); // true (um código da Tabela B sozinho, como o campo CST da NF-e o traz)
isValidCst('06', { tax: 'pis' }); // true
isValidCst('99', { tax: 'ipi' }); // true
isValidCst('110'); // true (encontrado na tabela icms, tax omitido)
isValidCst('000', { tax: 'nope' }); // true (um tax desconhecido cai em todas as tabelas)
isValidCst('999'); // false (não existe em nenhuma tabela)
isValidCst('abc110'); // false (não é uma forma documentada)
isValidCst(-110); // false (não é um inteiro seguro não negativo)

Fonte: Tabela B do ICMS do Anexo I do Convênio SINIEF s/nº 1970 alterado pelo Ajuste SINIEF 20/24; IPI, PIS e COFINS da IN RFB nº 1.009/2010.

Código: brazilian-utils/javascript
Teste com JavaScript isValidCst
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 (102) e o resultado em cada biblioteca cst.isValid

Fontes oficiais

Veja também CSOSN

Atualizado em

Nesta página