{{ message }}
Repository navigation
Conversation
O services/date.js não carregava o plugin customParseFormat do dayjs,
então toISOString(data, 'DD/MM/YYYY') ignorava o formato e caía no
new Date('01/06/2026'), que lê MM/DD. Toda data do IGP-M saía em
janeiro, com o dia igual ao mês real.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




Descrição
Causa raiz: o
services/date.jssó estende os pluginsutcetimezonedo dayjs. Sem o plugincustomParseFormat, o dayjs ignora o formato passado emdayjs(valor, formato). Por isso otoISOString(igpmIndex.data, 'DD/MM/YYYY')doservices/indices/igpm.jscai nonew Date('01/06/2026'), que lê a data como MM/DD (6 de janeiro). Como o BCB sempre manda o IGP-M no dia 01, toda data sai em janeiro, com o dia igual ao mês real.Em produção hoje:
bcdata.sgs.189/dados/ultimos/3):{"data":"01/06/2026","valor":"-0.50"}/api/indices/igpm/v1/ultimos?limit=3):{"value":-0.5,"date":"2026-01-06T00:00:00.000Z"}Correção: carregar o plugin
customParseFormatnoservices/date.js(2 linhas). Vale para os três endpoints:/indices/igpm/v1,/ultimose/intervalo. Com a correção, o mesmo registro volta como2026-06-01.Teste:
tests/services/indices/igpm.test.jsmocka o axios com um registro do BCB01/06/2026e verifica que a data retornada é 1 de junho. Falha antes da correção (expected +0 to be 5, ou seja, janeiro) e passa depois. Não depende da rede nem do BCB. Otests/services/date.test.jscobre o modo strict doparseToDateusado no/intervalo(ver Notas Adicionais).Tipo de Mudança
Checklist de Compatibilidade (CRÍTICO)
/intervalo, ver Notas Adicionais)Checklist de Documentação
/pages/docs/doc/Checklist de Testes
npm test) (rodei os de IGP-M, câmbio e os unitários; os demais dependem de APIs externas e não foram tocados)Checklist de Código
npm run fixantes de commitarChecklist de Performance e Custos
Como Testar
npm run devrodando (o setup global dos testes espera o servidor em localhost:3000):NODE_ENV=test npx vitest run tests/services/indices/igpm.test.js tests/services/date.test.jsservices/date.js, o teste falha comexpected +0 to be 5; com a mudança, passa.curl "http://localhost:3000/api/indices/igpm/v1/ultimos?limit=3"agora retorna2026-06-01,2026-07-01e2026-08-01, iguais ao BCB. Os testes E2E existentes emtests/indices/igpm.test.jsetests/cambio-v1.test.jscontinuam passando.Screenshots (se aplicável)
N/A
Issues Relacionadas
Nenhuma.
Notas Adicionais
O
parseToDate(valor, 'YYYY-MM-DD')e o modo strict dovalidateDateComponentstambém passam a funcionar como estão escritos. No câmbio nada muda, porque a data já é validada por regex antes. No/intervalo, datas válidas no formatoYYYY-MM-DDtêm o mesmo resultado de antes.O que muda no
/indices/igpm/v1/intervalo, que agora valida as datas em modo strict no formatoYYYY-MM-DD:initial_dateou semfinal_date, o parâmetro ausente era tratado como a data atual (sóinitial_date=2026-01-01retornava 200 com tudo até hoje). Agora retorna 400 com "Intervalo de datas inválido, informe um intervalo correto", que é o que a documentação OpenAPI (required: true) e os testes E2E existentes já esperam.2026-1-1ou20260101, eram aceitas e agora também retornam 400.parseToDateganhou um terceiro parâmetro opcionalstrict(padrãofalse, então o câmbio não muda) e o/intervalopassatrue. Assim, qualquer entrada fora do formatoYYYY-MM-DD, incluindo texto sobrando no fim como2026-01-01abc, continua retornando 400. Uma data inexistente como2026-02-30, que antes era aceita e consultada no BCB como 02/03/2026, também passa a retornar 400. Otests/services/date.test.jscobre esses dois casos: falha sem o modo strict e passa com ele.