Skip to content

Cria journal_article no Crossref mesmo quando o artigo não tem DOI - #337

Open
samuelveigarangel wants to merge 1 commit into
scieloorg:masterfrom
samuelveigarangel:fix-journal-article-without-doi
Open

Cria journal_article no Crossref mesmo quando o artigo não tem DOI#337
samuelveigarangel wants to merge 1 commit into
scieloorg:masterfrom
samuelveigarangel:fix-journal-article-without-doi

Conversation

@samuelveigarangel

@samuelveigarangel samuelveigarangel commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Evita que a exportação Crossref quebre em artigos legado sem DOI (v237/v337). O XMLJournalArticlePipe criava journal_article apenas a partir de doi_and_lang; quando essa lista vinha vazia, os pipes seguintes falhavam (por exemplo XMLFundingDataPipe com IndexError ao buscar publisher_item).

Agora, se não houver doi_and_lang, um único journal_article é criado com o idioma original do documento. O atributo language continua opcional no schema Crossref.

Onde a revisão poderia começar?

articlemeta/export_crossref.py — classe XMLJournalArticlePipe.

O teste correspondente está em tests/test_export_crossref.py, método test_journal_article_element_without_doi_and_lang.

Como este poderia ser testado manualmente?

  1. Exportar o artigo S0103-50531998000400002 no formato Crossref (fmt=xmlcrossref).
  2. Verificar que a pipeline não lança IndexError e que o XML contém um <journal_article language="en">.
  3. Comparar um artigo com DOI/traduções (ex.: PID com v337) e confirmar que continua gerando um journal_article por par idioma/DOI.
  4. Rodar: python -m unittest tests.test_export_crossref.ExportCrossRef_one_DOI_only_Tests.test_journal_article_element tests.test_export_crossref.ExportCrossRef_one_DOI_only_Tests.test_journal_article_element_without_doi_and_lang

Algum cenário de contexto que queira dar?

O artigo S0103-50531998000400002 (JBChS, 1998) não tem DOI, mas tem financiadores em v58. Sem journal_article, o XMLFundingDataPipe quebrava ao acessar publisher_item[-1].

O fallback não torna o depósito Crossref válido por si só: o schema ainda exige doi_data. Ele só impede a exportação de falhar nesse ponto e permite que o restante da pipeline preencha o XML.

Screenshots

N/A

Quais são tickets relevantes?

Não há issue vinculada. Problema reproduzido com o artigo https://articlemeta.scielo.org/api/v1/article/?collection=scl&code=S0103-50531998000400002

Referências

  • Schema Crossref 4.4.0: atributo language em journal_article é opcional (language.atts, use="optional").

Segurança da informação (NSI.04)

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim — descreva os controles de proteção aplicados (criptografia, mascaramento, anonimização, etc.):
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim — descreva o que mudou e por quê:
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim — as novas dependências foram verificadas no SBOM/Trivy sem vulnerabilidades críticas/altas em aberto?
    • Verificado e aprovado
    • Pendente / vulnerabilidade aceita com justificativa:
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim — link do job:
  • Não aplicável a este PR (justifique): alterações localizadas em código Python/Django e traduções; sem mudanças em infra/dependências.

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim — confirme que há sanitização/parametrização (prepared statements, escaping, etc.):
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim — HTTPS obrigatório está garantido e o acesso segue o princípio de menor privilégio?
    • As novas telas são páginas do Wagtail ModelAdmin, acessíveis apenas a usuários autenticados e com permissões do Django.
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim (bloquear merge e corrigir antes de prosseguir)

Evita que a pipeline Crossref quebre em artigos legado sem v237/v337, usando o idioma original como fallback.

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

2 participants