Skip to content

Crossref 5.5.0: exportar peer_review quando v241 indica peer-reviewed-material #335

Description

@samuelveigarangel

Contexto

Com a migração do schema Crossref para 5.5.0, documentos do universo SciELO que representam artefatos de revisão por pares (open peer review) devem ser depositados como record type <peer_review>, e não como <journal><journal_article>.

Hoje o export_crossref.py trata todos os documentos como journal_article. O campo v241 (related_documents) só é usado para emitir relações em rel:program dentro do journal_article existente — não há ramificação de record type.

Caso real no SciELO

Artigo de referência: S2237-96222025000100800

Campo Valor Observação
document_type undefined v71 ausente no registro
v241 t: peer-reviewed-material, i: 10.1590/S2237-96222024v33e20240180.en, n: doi Aponta para o artigo revisado
v337 / v237 DOI próprio do parecer 10.1590/s2237-96222025v34e20240180.a
v12 Título começa com "Reviewed article: ..." Indica conteúdo de peer review

No SPS, pareceres publicados como documento separado usam @object-type="peer-reviewed-material" no <related-object> apontando para o DOI do artigo revisado — exatamente o que v241 representa no ArticleMeta.

Regra de detecção proposta

Tratar o documento corrente como peer_review quando:

  1. document_type == 'undefined' (ou equivalente: v71 ausente / não mapeado); e
  2. Existe ao menos uma entrada em v241 (raw.related_documents) com related_article_type == 'peer-reviewed-material'.
def is_peer_review_document(raw):
    if raw.document_type != 'undefined':
        return False
    related = getattr(raw, 'related_documents', None) or []
    return any(
        r.get('related_article_type') == 'peer-reviewed-material'
        for r in related
    )

Nota: peer-reviewed-material em v241 indica que este documento é a revisão e o i/id é o DOI do artigo revisado → relação Crossref isReviewOf. Isso difere de reviewer-report em v241, que hoje mapeia para hasReview no artigo revisado (lado oposto da relação).

Comportamento atual vs. esperado

Atual (export_crossref.py)

<body>
  <journal>
    <journal_article publication_type="full_text">
      ...
      <program xmlns="http://www.crossref.org/relations.xsd">
        <related_item>
          <inter_work_relation relationship-type="isReviewOf" identifier-type="doi">
            10.1590/S2237-96222024v33e20240180.en
          </inter_work_relation>
        </related_item>
      </program>
      <doi_data>...</doi_data>
    </journal_article>
  </journal>
</body>

A relação isReviewOf já é emitida via RELATED_ARTICLE_TYPE_RELATIONS['peer-reviewed-material'], mas a estrutura do registro está incorreta.

Esperado (Crossref 5.5.0 — exemplo oficial)

<body>
  <peer_review stage="pre-publication" type="referee-report" revision-round="0">
    <contributors>...</contributors>          <!-- role reviewer ou <anonymous/> -->
    <titles><title>...</title></titles>
    <review_date>...</review_date>            <!-- obrigatório; mapear de v65 ou data equivalente -->
    <program xmlns="http://www.crossref.org/relations.xsd">
      <related_item>
        <inter_work_relation relationship-type="isReviewOf" identifier-type="doi">
          10.1590/S2237-96222024v33e20240180.en
        </inter_work_relation>
      </related_item>
    </program>
    <doi_data>
      <doi>10.1590/s2237-96222025v34e20240180.a</doi>
      <resource>...</resource>
    </doi_data>
  </peer_review>
</body>

Escopo de implementação

1. Ramificação de record type

  • Detectar peer review conforme regra acima (antes ou no lugar de XMLJournalArticlePipe)
  • Gerar <peer_review> no <body> em vez de <journal><journal_article>
  • Restrição Crossref: um <body> só pode conter um tipo de registro — batches com mix de artigos e peer reviews precisam ser separados

2. Mapeamento de campos (documento S2237-96222025000100800)

Metadado SciELO Elemento Crossref peer_review
v12 (título) <titles><title>
v10 (autores) <contributors> com contributor_role="reviewer" ou <anonymous/>
v70 (afiliações) <affiliations><institution> (schema 5.5.0)
v65 (data) <review_date> (não publication_date)
v241 peer-reviewed-material rel:programisReviewOf (obrigatório)
v337 / v237 <doi_data>
v40 (idioma) atributo language no peer_review

3. Atributos do <peer_review>

Definir defaults e enriquecer quando houver metadados no SPS:

Atributo Valor sugerido Fonte
type referee-report Default para pareceres SciELO (equivalente SPS referee-report)
stage pre-publication Default; usar post-publication se houver indicador no XML de origem
revision-round 0 Obrigatório no schema; enriquecer se SPS passar rodada

4. O que não incluir em peer_review

Conforme guia Crossref:

  • Crossmark — não suportado
  • citation_list — não suportado
  • Metadados do artigo revisado (autores, título do artigo) — só via isReviewOf

5. Schema 5.5.0

Esta issue assume a migração base para 5.5.0 (cabeçalho, afiliações <affiliations>/<institution>, validação XSD 1.1). Depende da issue de migração de schema.

6. Testes

  • Caso S2237-96222025000100800 (ou fixture equivalente): XML contém <peer_review>, não <journal_article>
  • isReviewOf aponta para 10.1590/S2237-96222024v33e20240180.en
  • review_date presente
  • Documento research-article com v241 sem peer-reviewed-material continua como journal_article
  • Documento undefined sem v241 continua como journal_article
  • Validação contra crossref5.5.0.xsd

Referências

Critérios de aceite

  1. Documentos com document_type == undefined e v241.t == peer-reviewed-material geram <peer_review type="referee-report"> conforme schema 5.5.0
  2. Relação isReviewOf obrigatória apontando para o DOI do artigo revisado
  3. Demais tipos de documento do SciELO não são afetados
  4. Testes automatizados cobrindo o caso de referência e regressões

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions