fix(cvm): lê o cad_fi.csv inteiro quando um campo começa com aspas by guubernardi · Pull Request #919 · BrasilAPI/BrasilAPI · GitHub
Skip to content

fix(cvm): lê o cad_fi.csv inteiro quando um campo começa com aspas - #919

Open
guubernardi wants to merge 1 commit into
BrasilAPI:mainfrom
guubernardi:fix/cvm-fundos-aspas-csv
Open

guubernardi wants to merge 1 commit into
BrasilAPI:mainfrom
guubernardi:fix/cvm-fundos-aspas-csv

Conversation

@guubernardi

Copy link
Copy Markdown

📋 Descrição

Corrige o parse do cad_fi.csv em services/cvm/fundos.js, que lia só 16.882 das 46.806 linhas do arquivo.

O Papa Parse trata " como delimitador de campo por padrão. Na linha 16.882, o campo INF_TAXA_PERFM começa com "1" é ..., o parser abre um campo entre aspas que nunca fecha e lê o resto do arquivo como um único campo. Todos os fundos depois dessa linha respondiam 404, e o fundo da própria linha respondia com um JSON de 11,5 MB.

O CSV da CVM não usa aspas para delimitar campos, então o parse passa a ignorá-las (quoteChar: '\0'). Com isso as 46.806 linhas são lidas, sem nenhum erro do parser.

🎯 Tipo de Mudança

  • 🐛 Correção de bug (mudança que corrige um problema)
  • ✅ Testes (adiciona ou corrige testes)

⚠️ 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 → number, etc.)
  • ✅ Não muda o formato de URLs de endpoints existentes
  • ✅ Não muda códigos de status HTTP de endpoints existentes

A única mudança visível é que fundos que antes davam 404 passam a ser encontrados. Campos com texto entre aspas passam a vir com as aspas, como estão no arquivo da CVM (ex.: "1" é ...).

📚 Checklist de Documentação

  • ✅ N/A - Mudanças não requerem documentação

🧪 Checklist de Testes

  • ✅ Criei ou atualizei testes E2E
  • ✅ Testei casos de sucesso

Testes novos:

  • tests/fundos-csv-aspas.test.js: mocka o axios com um CSV de 3 linhas no formato da CVM, com aspas na linha do meio. Roda mesmo quando a CVM bloqueia o runner.
  • tests/fundos-v1.test.js: caso E2E com um fundo que fica depois da linha com aspas (00822055000187).

Sem a correção, os 4 testes novos falham. Com ela, tests/fundos-csv-aspas.test.js, tests/fundos-v1.test.js e tests/corretoras-v1.test.js passam (22 testes). Não rodei a suíte completa.

💻 Checklist de Código

  • ✅ Código segue os padrões do projeto (ESLint + Prettier)
  • ✅ Não adicionei dependências desnecessárias ou pesadas
  • ✅ Código não expõe credenciais ou informações sensíveis
  • ✅ Usei Conventional Commits

O ESLint do CI (npx eslint pages/ services/ lib/ util/ middlewares/ errors/ --ext .js) passa sem erros.

🚀 Checklist de Performance e Custos

  • ✅ Não adicionei processamento pesado que aumenta custos
  • ✅ Minimizei chamadas a APIs externas

O parse passa de ~140 ms para ~340 ms na minha máquina, porque agora lê 2,8 vezes mais linhas. A resposta já tem cache de 24 h (app({ cache: 86400 })) e o número de chamadas à CVM não muda.

🔍 Como Testar

  1. npm test -- tests/fundos-csv-aspas.test.js tests/fundos-v1.test.js
  2. Em produção, hoje: curl https://brasilapi.com.br/api/cvm/fundos/v1/37267363000106 responde 404, mesmo com o fundo presente no cad_fi.csv.

📎 Issues Relacionadas

Refs #918 (item 1). O item 2 da issue, sobre os fundos adaptados à Resolução CVM 175, fica para outro PR depois da definição do formato.

O Papa Parse trata `"` como delimitador de campo por padrão. Na linha
16.882 do cad_fi.csv, o campo INF_TAXA_PERFM começa com `"1" é ...` e o
parser passa a tratar o resto do arquivo como um único campo: só 16.882
das 46.806 linhas eram lidas, e os fundos seguintes respondiam 404.

O CSV da CVM não usa aspas para delimitar campos, então o parse passa a
ignorá-las.
@vercel

vercel Bot commented Oct 13, 2026

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

@guubernardi

Copy link
Copy Markdown
Author

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