fix(ncm): corrige busca por código NCM formatado completo by kwy404 · Pull Request #914 · BrasilAPI/BrasilAPI · GitHub
Skip to content

fix(ncm): corrige busca por código NCM formatado completo - #914

Open
kwy404 wants to merge 1 commit into
BrasilAPI:mainfrom
kwy404:fix/ncm-busca-codigo-formatado
Open

kwy404 wants to merge 1 commit into
BrasilAPI:mainfrom
kwy404:fix/ncm-busca-codigo-formatado

Conversation

@kwy404

@kwy404 kwy404 commented Sep 26, 2026

Copy link
Copy Markdown

Descrição

Causa raiz: no pages/api/ncm/v1/index.js, o searchByCode limpa o termo buscado com search.replace(/[,.]/, ''). Como a regex não tem a flag g, só o primeiro ponto é removido: 3304.10.00 vira 330410.00, que nunca é prefixo de um código com apenas dígitos (33041000). Por isso a busca pelo código no formato oficial, com os dois pontos, retorna vazio, enquanto 3304.10 (um ponto só) e 33041000 funcionam. A documentação do endpoint diz que o search aceita código parcial ou palavras-chave.

Em produção hoje:

  • /api/ncm/v1?search=3304.10.00: []
  • /api/ncm/v1?search=3304.10: [{"codigo":"3304.10.00", ...}]
  • /api/ncm/v1?search=33041000: [{"codigo":"3304.10.00", ...}]

O mesmo acontece com qualquer código completo, por exemplo 0101.21.00.

Correção: adicionar a flag g na regex (/[,.]/g), 1 linha. Assim todos os pontos e vírgulas do termo são removidos antes da comparação. A busca por descrição não muda.

Teste: novo caso Utilizando um código formatado: 3304.10.00 em tests/ncm-v1.test.js, logo depois do teste que já busca por 330410. Falha antes da correção (expected [] to have a length of 1 but got +0) e passa depois. O código 3304.10.00 é o mesmo do teste vizinho e existe tanto na lista do Siscomex quanto no ncmList.json usado como fallback.

Tipo de Mudança

  • Correção de bug (mudança que corrige um problema)
  • Nova funcionalidade (mudança que adiciona funcionalidade)
  • Breaking change (correção ou funcionalidade que causa quebra de compatibilidade)
  • Documentação (mudanças apenas em documentação)
  • Refatoração (mudança que não corrige bug nem adiciona funcionalidade)
  • Performance (mudança que melhora performance)
  • Testes (adiciona ou corrige testes)
  • Configuração (mudanças em configuração ou build)

Checklist de Compatibilidade (CRÍTICO)

  • Não remove campos de respostas de API existentes
  • Não renomeia campos de respostas de API existentes
  • Não muda tipos de dados de campos existentes (string para number, etc.)
  • Não muda o formato de URLs de endpoints existentes
  • Não muda códigos de status HTTP de endpoints existentes
  • Se fez mudanças incompatíveis, criei uma nova versão (v2, v3, etc.)

Checklist de Documentação

  • Atualizei ou criei documentação OpenAPI em /pages/docs/doc/
  • Documentação inclui exemplos de requisição e resposta
  • Documentação está em português
  • Atualizei README.md se necessário
  • N/A - Mudanças não requerem documentação

Checklist de Testes

  • Criei ou atualizei testes E2E
  • Todos os testes passam localmente (npm test) (rodei o tests/ncm-v1.test.js, 16 de 16 passando; os demais não foram tocados)
  • Teste de CORS funciona corretamente
  • Testei casos de erro (404, 400, 500, etc.)
  • Testei casos de sucesso
  • N/A - Mudanças não requerem testes

Checklist de Código

  • Código segue os padrões do projeto (ESLint + Prettier) (sem apontamentos nos arquivos alterados; o comando de ESLint do CI passa)
  • Executei npm run fix antes de commitar
  • Não adicionei dependências desnecessárias ou pesadas
  • Código não expõe credenciais ou informações sensíveis
  • Validei todos os inputs de usuário
  • Tratei erros apropriadamente
  • Usei Conventional Commits

Checklist de Performance e Custos

  • Não adicionei processamento pesado que aumenta custos
  • Usei cache quando apropriado
  • Minimizei chamadas a APIs externas
  • Considerei impacto em rate limits de APIs externas
  • Testei performance em casos de alto volume

Como Testar

  1. Com o npm run dev rodando: NODE_ENV=test npx vitest run tests/ncm-v1.test.js
  2. Sem a mudança no pages/api/ncm/v1/index.js, o novo teste falha com expected [] to have a length of 1 but got +0; com a mudança, os 16 testes passam.
  3. curl "http://localhost:3000/api/ncm/v1?search=3304.10.00" agora retorna o NCM 3304.10.00, igual a ?search=33041000.

Screenshots (se aplicável)

N/A

Issues Relacionadas

Nenhuma.

Notas Adicionais

Não troquei a regex por /\D/g (remover tudo que não é dígito) de propósito: uma busca só por texto, como ?search=Xampus, viraria string vazia e casaria com todos os NCMs. Com /[,.]/g, as buscas por descrição e por código sem pontos continuam com o mesmo resultado de antes.

O searchByCode removia só o primeiro ponto do termo buscado (regex sem a flag g), então ?search=3304.10.00 virava 330410.00 e não casava com nenhum código.
@vercel

vercel Bot commented Sep 26, 2026

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant