Valida data em ISO, agrupa erros com dica da causa e adiciona modelos para download - #5
Merged
diogenesdie merged 1 commit intoAug 25, 2026
Conversation
A validacao de data usava new Date(), que interpreta barra como mm/dd: "06/08/26" era aceito como 8 de junho e so "19/08/26" reprovava. O relatorio saia inconsistente, reprovando apenas as linhas com dia > 12, e as demais seriam ingeridas com dia e mes trocados. - isDateValue passa a casar formatos ISO explicitos (YYYY-MM-DD, YYYY-MM-DDTHH:MM:SS, YYYY-MM-DD HH:MM:SS) com checagem de calendario. - Erros iguais viram grupos (issueGroups) com contagem real (issueCount) e ate 5 amostras. Antes MAX_ERRORS cortava a lista e a contagem junto: um arquivo com 46 mil erros aparecia com 201. - Catalogo HINTS com a causa provavel no arquivo para os erros recorrentes (virgula decimal sem aspas, data fora do ISO, arquivo em Latin-1, linha inteira entre aspas, delimitador nao identificado). - Linha com quantidade de colunas diferente do cabecalho entra em malformedRows e sai das validacoes de conteudo: os valores estao deslocados e so geravam erro derivado. - Detecta arquivo fora de UTF-8 pelos caracteres U+FFFD. feat: modelos de arquivo para download TEMPLATES traz um lote de exemplo por tipo que fecha entre si (as chaves estrangeiras dos 9 arquivos sao validas), exposto na UI em CSV e JSON. tests/validate_templates.js valida esse lote com o proprio motor e faz a regressao das regras acima. O relatorio exportado passa a omitir o campo parsed, que carregava o dado bruto inteiro (70 MB no caso testado, contra 39 KB sem ele).
Pedro-Sprandel
approved these changes
Aug 25, 2026
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.
Contexto
Validando um lote real (SPDM) o relatorio ficou inconsistente. Investigando, parte era problema do CSV e parte era problema do validador.
Bug: validacao de data
isDateValueusavanew Date(val), que interpreta barra como mm/dd:Ou seja, o validador so reprovava as datas com dia > 12. No lote testado, com 100% das datas em
dd/mm/aa:pessoa.DTNASCIMENTOpessoa.DTINTERNACAOcultura.DTCOLETAalergia.CREATED_ATPassa a casar formatos ISO explicitos (
YYYY-MM-DD,YYYY-MM-DDTHH:MM:SS,YYYY-MM-DD HH:MM:SS) com checagem de calendario, e a mensagem diz o que foi detectado:registro 1, valor "06/08/26" - formato dd/mm/aa (ano de 2 digitos, ambiguo).Bug: contagem de erros subnotificada
MAX_ERRORS = 200cortava a lista e a contagem junto. Um arquivo com 46 mil erros aparecia com 201 e quem lia o relatorio nao conseguia dimensionar a gravidade.Erros iguais agora viram grupos:
issueGroups({ message, count, samples[] }, ate 5 amostras) eissueCountcom o total real.issuescontinua existindo, com uma linha por grupo.Dicas por erro recorrente
Catalogo
HINTSnovalidator.js— em vez de so dizer que o valor falhou, aponta a causa provavel no arquivo. Aparece agrupado no topo do painel do arquivo.CUSTO 0,0909vira duas colunas) -> exportar com pontodd/mm/aae ambiguo, risco emDTNASCIMENTOLinha malformada nao gera erro derivado
Linha com contagem de colunas diferente do cabecalho entra em
malformedRowse sai das validacoes de conteudo — os valores estao deslocados e so geravam ruido (NRATENDIMENTO deve ser numero1.204x,DTALTAcom valor6611309). Vira alerta com a contagem.Deteccao de encoding
Conta caracteres
U+FFFD: o arquivo e lido como UTF-8, entao byte invalido denuncia Latin-1 / Windows-1252. Os 9 arquivos do lote testado acusam.Modelos para download
Nova secao na tela, acima do upload: botao por tipo (CSV/JSON) e "baixar todos". Saem de
TEMPLATESnovalidator.js— lote de 2 registros por arquivo que fecha entre si, todas as FKs dos 9 arquivos resolvem.tests/validate_templates.jsvalida esse lote com o proprio motor, entao um modelo que o validador reprovaria quebra o teste. O mesmo arquivo faz a regressao das 4 regras acima.Relatorio exportado
Passa a omitir o campo
parsed, que carregava o dado bruto inteiro: 70 MB -> 39 KB no lote testado.Como testar
Na tela: "Baixar todos (CSV)" -> jogar os 9 no upload em lote -> tem que dar "Validacao concluida sem erros".
Alem do
npm test, rodei o app renderizado em DOM headless: 0 erros de runtime, upload + validacao + expansao dos paineis funcionando, lote de modelos validando 9/9.Fica de fora deste PR (precisa de decisao)
ATIVO = T/F(1.840 registros no lote) — adicionart/fao whitelist booleano ou o hospital converte para 1/0? Hoje so entra a dica.DS_DOENCA_CID,QT_RESULTADO,DS_RESULTADO— entram noallowedou continuam como campo inesperado?FKFREQUENCIAnumerico (14 de 128) — mantem como erro ou vira alerta?