CST
Código de Situação Tributária de ICMS, IPI, PIS e COFINS.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca5 casos falham
- Ruby, biblioteca32 casos falham
- Rust, biblioteca
- .NET, biblioteca26 casos falham
- Erlang, biblioteca
Verifica se um código CST é válido para um tributo.
options.taxescolhe a tabela:icms,ipi,pisoucofins(PIS e COFINS usam a mesma tabela). Quandooptions.taxé omitido ou desconhecido, a função aceita um código que exista em qualquer uma das tabelas.- Para
icmso 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 campoCSTda NF-e o traz ao lado deorig, ou a forma de 3 dígitos com um dígito de origem0-8antes.02,15,53e61são os códigos de monofasia de combustíveis que o Ajuste SINIEF 39/23 incluiu;12,13,52,72e74não são códigos, porque o Ajuste SINIEF 20/24 os suprimiu antes de entrarem em vigor. ipiaceita 14 códigos de 2 dígitos:00-05,49,50-55e99.pisecofinsaceitam 33 códigos de 2 dígitos:01-09,49,50-56,60-67,70-75,98e99. 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 (
0e"0"são000, 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úmero7é lido como007, não como07. - Um
optionsnulo 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 erafalse). - Até a 2.4.0 um valor de 2 dígitos nunca era um código ICMS válido (
"10","00"comtax: "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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
options | IsValidCstOptions | não |
options.tax | "icms" | "ipi" | "pis" | "cofins" | não |
| retorna | boolean |
Valida um código de CST (Código de Situação Tributária) para um tributo. Informe o tributo em options.tax:
| Tributo | Formato | Códigos aceitos |
|---|---|---|
icms | 2 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 |
ipi | 2 dígitos | 00, 01, 02, 03, 04, 05, 49, 50, 51, 52, 53, 54, 55, 99 |
pis | 2 dígitos | 01-09, 49, 50-56, 60-67, 70-75, 98, 99 |
cofins | 2 dígitos | mesma tabela do pis |
- Opções (
IsValidCstOptions):taxescolhe a tabela. Omitido, ou fora desses quatro valores, todas as tabelas são aceitas; umoptionsnullou 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 B10), enquanto o número7é lido como o código ICMS007, 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/javascriptTeste com JavaScript isValidCst
Casos de teste compartilhados (102) e o resultado em cada biblioteca cst.isValid
Fontes oficiais
- confaz.fazenda.gov.br/legislacao/ajustes/…/cvsn_70
- confaz.fazenda.gov.br/legislacao/ajustes/…/ajuste-sinief-39-23
- confaz.fazenda.gov.br/legislacao/ajustes/…/AJ020_24
- confaz.fazenda.gov.br/legislacao/ajustes/…/aj_003_94
- confaz.fazenda.gov.br/legislacao/ajustes/…/AJ_006_00
- confaz.fazenda.gov.br/legislacao/ajustes/…/aj_020_12
- confaz.fazenda.gov.br/legislacao/ajustes/…/aj_015_13
- normas.receita.fazenda.gov.br/sijut2consulta/link.action
Veja também CSOSN
Atualizado em
