CEST
Código Especificador da Substituição Tributária: os códigos de 7 dígitos do Convênio ICMS 142/18 para mercadorias sujeitas à substituição tributária do ICMS.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Verifica se um CEST consta dos anexos do Convênio ICMS 142/18 (Anexos II a XXVI do texto consolidado, alterado até o Convênio ICMS 180/24).
- Um CEST tem 7 dígitos: os dois primeiros dígitos são o segmento, os dígitos 3 a 5 são o item do segmento e os dois últimos são a especificação do item (cláusula sexta, IV do Convênio).
- Formas aceitas em string: 7 dígitos, ou
NN.NNN.NNcom qualquer sequência de separadores (espaço,.,-ou/) entre os grupos, ou nenhum, e espaços opcionais nas pontas. Qualquer outra string é inválida: a função não extrai os dígitos dela. - Dígitos sem máscara são completados com zeros à esquerda até 7, em string ou em número, porque os segmentos 01 a 09 começam com zero:
100100,"100100"e"0100100"são o mesmo código. Um valor com máscara é lido como foi escrito. - Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro é inválido.
- Itens revogados são inválidos, por exemplo 01.110.00, 03.001.00, 03.002.00, 03.004.00, 03.010.03, 03.014.00, 03.016.00, 10.023.00, 17.049.08, 17.049.09 e 20.035.01.
- A tabela tem 1.040 códigos em 25 segmentos (Anexo I). Os segmentos 15, 18 e 27 não existem.
- A coluna NCM/SH dos anexos não é carregada, e não há validação cruzada CEST×NCM. Pela cláusula sétima, a descrição é o critério que decide.
- Saber se o estado aplica ICMS-ST ao código depende da lei estadual e fica fora do escopo. MVA/PMPF e o Anexo XXVII também ficam fora.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | boolean |
Valida um CEST (Código Especificador da Substituição Tributária) contra os anexos do Convênio ICMS 142/18, no texto consolidado vigente.
- Só os itens em vigor contam: um item que os anexos marcam como revogado é rejeitado.
- A verificação é só do código: ela não diz se o código combina com um dado NCM, nem se um estado aplica o regime de substituição tributária a ele.
- Um CEST tem 7 dígitos: os dois primeiros são o segmento, do terceiro ao quinto o item do segmento e os dois últimos a especificação do item (cláusula sexta, IV).
- Aceita uma string com os 7 dígitos ou com a forma
NN.NNN.NNque os anexos imprimem, com qualquer sequência de separadores (espaço,.,-ou/) entre os grupos e espaços opcionais nas extremidades, ou um inteiro seguro não negativo. Qualquer outra string é rejeitada em vez de ter os dígitos pinçados. - O zero à esquerda dos segmentos 01 a 09 faz parte do código, então um valor escrito apenas com dígitos é completado com zeros à esquerda até 7, como string ou como número:
100100,'100100'e'0100100'são o mesmo código. Um valor mascarado é lido como foi escrito.
import { isValidCest } from '@brazilian-utils/brazilian-utils';
isValidCest('01.001.00'); // true
isValidCest('0100100'); // true
isValidCest(100100); // true (completado para 7 dígitos, ou seja, '0100100')
isValidCest('03.001.00'); // false (um item revogado)
isValidCest('0000000'); // false
isValidCest('abc0100100'); // false (não é uma forma documentada)
isValidCest(-100100); // false (não é um inteiro seguro não negativo)Teste com JavaScript isValidCest
Casos de teste compartilhados (30) e o resultado em cada biblioteca cest.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Formata um CEST com a máscara NN.NNN.NN (segmento, item, especificação), a forma que os anexos imprimem. Só a estrutura muda (use cest.isValid para verificar o código).
- A máscara é progressiva: um valor parcial é formatado até onde vai (
01001dá01.001). Caracteres que não são dígitos são descartados, e dígitos depois do 7º são ignorados. options.padprimeiro completa o valor com zeros à esquerda até 7 dígitos. Sem ele, um número que perdeu o zero à esquerda desloca a máscara:100100dá10.010.0, e01.001.00compad.- Um valor sem dígitos, e
nullouundefined, retorna uma string vazia também compad. - 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 | FormatCestOptions | não |
options.pad | boolean | não |
| retorna | string |
Formata um CEST (Código Especificador da Substituição Tributária) na forma NN.NNN.NN que os anexos do Convênio ICMS 142/18 imprimem. Só a estrutura muda; use isValidCest para conferir um código com os anexos.
- Opções (
FormatCestOptions):pad(padrãofalse) completa antes o valor com zeros à esquerda até os 7 dígitos de um código completo. Um valor vazio, ou sem dígitos, devolve''mesmo compad. - Mesmas regras de
formatNcm: sempada máscara é aplicada até onde o valor vai, que é o que um campo sendo digitado precisa, os caracteres fora dela são descartados e um número é lido como a string dos seus dígitos, ou seja, só é completado compad: true. Um número só é lido quando é um inteiro seguro não negativo; qualquer outro número retorna''.
import { formatCest } from '@brazilian-utils/brazilian-utils';
formatCest('0100100'); // 01.001.00
formatCest(2899900); // 28.999.00
formatCest('01001'); // 01.001 (máscara aplicada até onde o valor vai)
formatCest(100100, { pad: true }); // 01.001.00 (completado até 7 dígitos antes)
formatCest('abc0100100'); // 01.001.00 (só os dígitos são lidos)
formatCest(-2899900); // '' (não é um inteiro seguro não negativo)Teste com JavaScript formatCest
Casos de teste compartilhados (27) e o resultado em cada biblioteca cest.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Remove a formatação do CEST e mantém apenas os dígitos, limitados a 7.
- A função não completa o valor com zeros à esquerda. Ela mantém um código parcial como foi escrito, então o zero dos segmentos 01 a 09 precisa ser escrito.
cest.isValidecest.getcompletam dígitos sem máscara. - Retorna uma string vazia quando não há nenhum dígito (
nulleundefinedincluídos). - 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 do CEST (Código Especificador da Substituição Tributária), mantém apenas os dígitos e limita o resultado aos 7 dígitos de um código completo.
- Mesmas regras de
parseCbo: nada é completado com zeros à esquerda aqui, então o zero à esquerda dos segmentos 01 a 09 precisa estar escrito. UseisValidCestougetCest, que completam um código numérico sem máscara, para consultar um código.
import { parseCest } from '@brazilian-utils/brazilian-utils';
parseCest('01.001.00'); // '0100100'
parseCest('28.999'); // '28999' (um código parcial é mantido como foi escrito)Teste com JavaScript parseCest
Casos de teste compartilhados (10) e o resultado em cada biblioteca cest.parse
Consultar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Consulta um CEST nos anexos do Convênio ICMS 142/18 e retorna o código, a descrição e o segmento. Retorna null exatamente quando cest.isValid é false.
- Mesmas regras de entrada de
cest.isValid(inclusive uma sequência de separadores entre os grupos,05..001.00): item revogado, código desconhecido e valor fora das formas aceitas retornamnull. codesão os 7 dígitos, sem máscara.descriptioné a redação vigente do anexo.segmenté o nome do segmento no Anexo I.- Retorna um objeto novo a cada chamada.
- Os códigos NCM/SH que os anexos associam a cada CEST não fazem parte do registro.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | Cest | null |
Consulta um CEST (Código Especificador da Substituição Tributária) e retorna a descrição do bem ou mercadoria e o nome do seu segmento, como os Anexos I a XXVI do Convênio ICMS 142/18 os redigem. O resultado é um registro Cest: { code, description, segment }.
- Mesmas regras de
isValidCest. Retornanullpara um código desconhecido, revogado ou malformado. - Os códigos NCM/SH que os anexos associam a cada CEST não fazem parte do resultado.
import { getCest } from '@brazilian-utils/brazilian-utils';
getCest('05.001.00'); // { code: '0500100', description: 'Cimento', segment: 'Cimentos' }
getCest(500100); // { code: '0500100', description: 'Cimento', segment: 'Cimentos' }
getCest('03.001.00'); // null (um item revogado)
getCest('0000000'); // null
getCest('abc0500100'); // null (não é uma forma documentada)Fonte: Convênio ICMS 142/18 consolidado, alterado por último pelo Convênio ICMS 180/24.
Código: brazilian-utils/javascriptTeste com JavaScript getCest
Casos de teste compartilhados (27) e o resultado em cada biblioteca cest.get
Fontes oficiais
Veja também NCM
Atualizado em
