You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Esse padrão aceita qualquer caractere alfanumérico em qualquer uma das 16 posições, quando o identificador
ORCID deveria ter uma estrutura mais restrita: os 15 primeiros caracteres exclusivamente numéricos e o 16º
(dígito de checksum) numérico ou "X" maiúsculo. Não há também nenhuma verificação do próprio dígito de
checksum (algoritmo ISO 7064 MOD 11-2, usado pela ORCID).
Adicionalmente, ContribsValidation.validate_orcid_is_registered() (linha ~304), que hoje sempre retorna a
mensagem "Unable to automatically check the {orcid}. Check it manually" quando nenhuma função externa de
checagem é fornecida, trata apenas a verificação de existência do identificador na base da ORCID (que
depende de rede/consulta externa) - questão distinta da validação estrutural aqui descrita, que pode ser
feita totalmente offline.
O SPS 1.10 exige o uso de ORCID (@contrib-id-type="orcid" obrigatório para a coleção SciELO Brasil, seção
"<contrib-id>: ORCID e outros identificadores digitais de pesquisador"), mas não detalha no próprio texto a
estrutura do identificador, remetendo à documentação oficial da ORCID ("Consulte: ORCID Brand Guidelines").
As regras estruturais abaixo vêm dessa fonte oficial referenciada pelo próprio SPS, não do texto do SPS em si.
Regras estruturais esperadas (conforme a documentação oficial da ORCID):
16 caracteres, em 4 blocos de 4 separados por hífen: XXXX-XXXX-XXXX-XXXX.
Os primeiros 15 caracteres exclusivamente numéricos (0-9).
O 16º caractere numérico (0-9) ou X maiúsculo (dígito de checksum).
x minúsculo como checksum deve ser inválido.
Separadores devem ser hífen ASCII (-); en dash (–) ou em dash (—) devem ser inválidos.
O dígito de checksum deve ser validado pelo algoritmo ISO 7064 MOD 11-2 usado pela ORCID.
Passos para reproduzir o problema
Validar um XML com <contrib-id contrib-id-type="orcid">000A-0002-1694-233X</contrib-id> (letra em posição
numérica) e observar que passa na validação de formato.
Validar um ORCID com checksum incorreto (mesmos 15 primeiros dígitos de um ORCID válido, mas último
caractere trocado) e observar que também passa.
Comportamento esperado
Restringir os 15 primeiros caracteres a dígitos e o último a dígito ou X maiúsculo.
Validar o dígito de checksum pelo algoritmo ISO 7064 MOD 11-2.
Manter as validações já existentes (rejeição de URL, formato geral com hífens).
Anexos
Trecho citado a partir do arquivo SPS 1.10_pt.pdf (versão 1.10, última atualização em 22/05/2025), seção
"<contrib-id>: ORCID e outros identificadores digitais de pesquisador". Regras estruturais detalhadas
conforme a documentação oficial da ORCID, referenciada pelo próprio SPS (ORCID Brand Guidelines / estrutura do
ORCID Identifier).
Classificação (esforço / risco / relevância)
Esforço: Médio - o algoritmo de checksum ISO 7064 é bem definido e de implementação direta, mas é
necessário reescrever o regex e adicionar a etapa de checksum sem quebrar as validações já existentes
(URL, formato geral).
Risco: Médio - é a primeira vez que a checagem se torna automática; pode capturar como inválidos ORCIDs
malformados que hoje passam despercebidos, o que é o objetivo, mas exige atenção para não introduzir falsos
positivos por erro na implementação do checksum.
Relevância: Média - hoje o problema é de qualidade de dado (ORCIDs malformados não são detectados), não
de bloqueio de artigos válidos.
Descrição do problema
ContribsValidation.validate_orcid_format()(packtools/sps/validation/article_contribs.py:196) usa o regex:Esse padrão aceita qualquer caractere alfanumérico em qualquer uma das 16 posições, quando o identificador
ORCID deveria ter uma estrutura mais restrita: os 15 primeiros caracteres exclusivamente numéricos e o 16º
(dígito de checksum) numérico ou "X" maiúsculo. Não há também nenhuma verificação do próprio dígito de
checksum (algoritmo ISO 7064 MOD 11-2, usado pela ORCID).
Adicionalmente,
ContribsValidation.validate_orcid_is_registered()(linha ~304), que hoje sempre retorna amensagem "Unable to automatically check the {orcid}. Check it manually" quando nenhuma função externa de
checagem é fornecida, trata apenas a verificação de existência do identificador na base da ORCID (que
depende de rede/consulta externa) - questão distinta da validação estrutural aqui descrita, que pode ser
feita totalmente offline.
O SPS 1.10 exige o uso de ORCID (
@contrib-id-type="orcid"obrigatório para a coleção SciELO Brasil, seção"
<contrib-id>: ORCID e outros identificadores digitais de pesquisador"), mas não detalha no próprio texto aestrutura do identificador, remetendo à documentação oficial da ORCID ("Consulte: ORCID Brand Guidelines").
As regras estruturais abaixo vêm dessa fonte oficial referenciada pelo próprio SPS, não do texto do SPS em si.
Regras estruturais esperadas (conforme a documentação oficial da ORCID):
XXXX-XXXX-XXXX-XXXX.Xmaiúsculo (dígito de checksum).xminúsculo como checksum deve ser inválido.-); en dash (–) ou em dash (—) devem ser inválidos.Passos para reproduzir o problema
<contrib-id contrib-id-type="orcid">000A-0002-1694-233X</contrib-id>(letra em posiçãonumérica) e observar que passa na validação de formato.
caractere trocado) e observar que também passa.
Comportamento esperado
Xmaiúsculo.Anexos
Trecho citado a partir do arquivo
SPS 1.10_pt.pdf(versão 1.10, última atualização em 22/05/2025), seção"
<contrib-id>: ORCID e outros identificadores digitais de pesquisador". Regras estruturais detalhadasconforme a documentação oficial da ORCID, referenciada pelo próprio SPS (ORCID Brand Guidelines / estrutura do
ORCID Identifier).
Classificação (esforço / risco / relevância)
necessário reescrever o regex e adicionar a etapa de checksum sem quebrar as validações já existentes
(URL, formato geral).
malformados que hoje passam despercebidos, o que é o objetivo, mas exige atenção para não introduzir falsos
positivos por erro na implementação do checksum.
de bloqueio de artigos válidos.
Referências
packtools/sps/validation/article_contribs.py(
ContribsValidation.validate_orcid_format,ContribsValidation.validate_orcid_is_registered)