NBS

Nomenclatura Brasileira de Serviços: os códigos de classificação de serviços da tabela NBS 2.0, informados na NFS-e nacional.

  • Matriz de paridade

Validar

Verifica se um código NBS existe na tabela NBS 2.0 publicada pelo MDIC (Portarias Conjuntas RFB/SCS 1.429/2018 e 2.000/2018).

  • Um código tem 9 dígitos, impressos como N.NNNN.NN.NN: o dígito 1, o capítulo, a posição, os dois níveis de subposição, o item e o subitem.
  • Aceita os 9 dígitos, a máscara N.NNNN.NN.NN ou um inteiro seguro não negativo. A máscara aceita qualquer sequência de separadores entre os grupos: espaço, ., - ou / ("1..0101.11.00" é válido). Espaços nas pontas são ignorados.
  • Qualquer outra string é rejeitada ("1.0101abc11.00"). A função não extrai os dígitos dela. Nada é completado com zeros: todo código começa com 1.
  • Só códigos completos são válidos. Os cabeçalhos de capítulo, posição e subposição ("1.01", "1.0101", "1.0101.1") não são. A tabela tem 920 códigos completos.
  • A função segue a nomenclatura do MDIC. 1.0402.29.00, 1.0403.29.00 e 1.0904.40.00 são válidos aqui, embora a NFS-e os recuse. O placeholder 9.9999.99.99 do ANEXO B da NFS-e não é válido.
ParâmetroTipoObrigatório
valuestring | numbersim
retornaboolean

Valida um código NBS (Nomenclatura Brasileira de Serviços, Intangíveis e Outras Operações que Produzam Variações no Patrimônio) contra a tabela oficial da NBS 2.0, o código que a NFS-e nacional leva em cNBS.

  • O código tem 9 dígitos, impressos como N.NNNN.NN.NN: o algarismo 1, o capítulo, a posição, os dois níveis de subposição, o item e o subitem.
  • Aceita uma string com os 9 dígitos ou com a máscara, 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.
  • Só códigos completos são válidos: os títulos de capítulo (1.01), posição (1.0101) e subposição (1.0101.1) não classificam nada por si sós.
  • O ANEXO B do Sistema Nacional NFS-e lista os mesmos 920 códigos menos três (1.0402.29.00, 1.0403.29.00 e 1.0904.40.00), então um código válido aqui ainda pode ser recusado pela NFS-e.
import { isValidNbs } from '@brazilian-utils/brazilian-utils';

isValidNbs('1.0101.11.00'); // true
isValidNbs('101011100'); // true
isValidNbs(101011100); // true
isValidNbs('1.0101'); // false (título de posição, não um código completo)
isValidNbs('1.9999.99.99'); // false
isValidNbs('1.0101abc11.00'); // false (não é uma forma documentada)
Código: brazilian-utils/javascript
Teste com JavaScript isValidNbs
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 nbs.isValid

Formatar

Formata um código NBS com a máscara N.NNNN.NN.NN. Só a estrutura muda (use nbs.isValid para verificar o código).

  • A função lê os dígitos de uma string e aplica a máscara até onde eles vão, então um código parcial é formatado aos poucos. Outros caracteres e os dígitos depois do nono são descartados.
  • options.pad (padrão false) primeiro completa os dígitos com zeros à esquerda até os 9 dígitos de um código completo: "1" dá 0.0000.00.01. Todo código NBS começa com 1, então o preenchimento só serve a quem quer largura fixa.
  • Um valor vazio, ou sem dígitos, retorna uma string vazia mesmo com pad (ele não é completado até a máscara de zeros).
  • Um número só é lido se for um inteiro seguro não negativo. Qualquer outro número retorna uma string vazia.
ParâmetroTipoObrigatório
valuestring | numbersim
optionsFormatNbsOptionsnão
options.padbooleannão
retornastring

Formata um código NBS (Nomenclatura Brasileira de Serviços) na máscara N.NNNN.NN.NN em que a nomenclatura o imprime. Só a estrutura muda; use isValidNbs para conferir um código com a tabela.

  • Opções (FormatNbsOptions): pad (padrão false) completa antes o valor com zeros à esquerda até os 9 dígitos de um código completo (todo código NBS começa com 1, então só serve para largura fixa). Um valor vazio, ou sem dígitos, devolve '' mesmo com pad.
  • No resto, mesmas regras de formatCnae: a máscara é aplicada até onde o valor vai, os caracteres fora dela são descartados e um número só é lido como a string dos seus dígitos quando é um inteiro seguro não negativo; qualquer outro número retorna ''.
import { formatNbs } from '@brazilian-utils/brazilian-utils';

formatNbs('101011100'); // 1.0101.11.00
formatNbs(101011100); // 1.0101.11.00
formatNbs('10101'); // 1.0101 (mascarado até onde vai)
formatNbs('1', { pad: true }); // 0.0000.00.01 (completado até 9 dígitos antes)
formatNbs('abc101011100'); // 1.0101.11.00 (só os dígitos são lidos)
formatNbs(-101011100); // '' (não é um inteiro seguro não negativo)
Código: brazilian-utils/javascript
Teste com JavaScript formatNbs
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 nbs.format

Interpretar

Remove a formatação do NBS e mantém somente os dígitos, limitados a 9 dígitos.

  • Não completa nada com zeros à esquerda. Um código parcial (um capítulo, uma posição ou uma subposição ainda sendo digitada) fica como está escrito, porque todo código NBS começa com 1.
  • 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.
  • Retorna string vazia quando não há nenhum dígito.
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação do NBS (Nomenclatura Brasileira de Serviços), mantém apenas os dígitos e limita o resultado aos 9 dígitos de um código completo.

  • Mesmas regras de parseCbo: nada é completado com zeros à esquerda aqui.
import { parseNbs } from '@brazilian-utils/brazilian-utils';

parseNbs('1.0101.11.00'); // '101011100'
Código: brazilian-utils/javascript
Teste com JavaScript parseNbs
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 nbs.parse

Consultar

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

  • Uma sequência de separadores entre os grupos é aceita, como em nbs.isValid ("1..0101.11.00").
  • Mesmas regras de entrada de nbs.isValid. Retorna null exatamente quando essa função retorna false.
  • O código retornado tem os 9 dígitos sem máscara.
ParâmetroTipoObrigatório
valuestring | numbersim
retornaNbs | null

Consulta um código NBS (Nomenclatura Brasileira de Serviços) e retorna a sua descrição oficial. O resultado é um registro Nbs: { code, description }.

  • Mesmas regras de isValidNbs. code são os 9 dígitos, sem a máscara. Retorna null quando o código é desconhecido ou o valor não está em uma forma documentada.
import { getNbs } from '@brazilian-utils/brazilian-utils';

getNbs('1.0101.11.00');
// { code: '101011100', description: 'Serviços de construção de edificações residenciais de um e dois pavimentos' }

getNbs(126050000); // { code: '126050000', description: 'Serviços domésticos' }
getNbs('1.0101'); // null (título de posição, não um código completo)
getNbs('1.9999.99.99'); // null

Fonte: tabela da NBS 2.0 publicada pelo MDIC, aprovada pela Portaria Conjunta RFB/SCS 1.429/2018 e alterada pela Portaria Conjunta RFB/SCS 2.000/2018.

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

Fontes oficiais

Veja também Lista de serviços (LC 116), Chave de acesso NFS-e

Atualizado em

Nesta página